mirror of
https://github.com/meowarex/rl-mobile.git
synced 2026-10-15 07:53:12 +11:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
975779f64c | ||
|
|
f5cd48be5a | ||
|
|
bad91d3898 | ||
|
|
d47693ccaa | ||
|
|
86a0c69d26 | ||
|
|
1ab876ea59 | ||
|
|
bde7fd8880 | ||
|
|
aaf2d9e99d | ||
|
|
0ad5848354 | ||
|
|
49693ca36b | ||
|
|
2cb51576df | ||
|
|
973580e230 | ||
|
|
47fe539e76 | ||
|
|
4504b8d1ab | ||
|
|
8766043453 | ||
|
|
4dbbfba3a1 | ||
|
|
10f3dd724d | ||
|
|
dcf207d307 | ||
|
|
05b6f4edb2 | ||
|
|
28bf8ad148 | ||
|
|
ad196c3228 | ||
|
|
89122deb0c | ||
|
|
3aabcdff26 | ||
|
|
38300573aa | ||
|
|
08cb9174a0 | ||
|
|
6ace2d9e16 | ||
|
|
9543953794 | ||
|
|
0ede6ded9f | ||
|
|
c24add1d46 | ||
|
|
a594e23ee5 | ||
|
|
af28dda074 | ||
|
|
bbd0876324 | ||
|
|
5d8e52ce9f | ||
|
|
5e150d10e3 | ||
|
|
79ea2e512d | ||
|
|
225ebe3413 | ||
|
|
abcbd10678 | ||
|
|
b175890e9d | ||
|
|
4b1e9b5480 | ||
|
|
4531e6e259 | ||
|
|
526e424621 | ||
|
|
a7fa8f7d30 | ||
|
|
625d012e17 | ||
|
|
2cb0e1a67e | ||
|
|
b1f50d4098 | ||
|
|
24c429e8b9 |
No files matched your search
@@ -6,6 +6,8 @@ on:
|
||||
- main
|
||||
paths-ignore:
|
||||
- "**/*.md"
|
||||
# Lets a release be re-run by hand from the Actions tab if a push event is ever missed.
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
Version:
|
||||
@@ -16,8 +18,22 @@ jobs:
|
||||
- uses: actions/checkout@v4
|
||||
- id: set
|
||||
run: |
|
||||
# .version now holds the full semver (e.g. 1.0.0) and is bumped per release.
|
||||
# It used to be a "0.3" prefix with github.run_number appended as the patch,
|
||||
# which cannot express an exact 1.0.0. versionCode still tracks run_number,
|
||||
# so it stays monotonic regardless of what versionName says.
|
||||
BASE=$(cat .version | tr -d '[:space:]')
|
||||
echo "version=$BASE.${{ github.run_number }}" >> $GITHUB_OUTPUT
|
||||
echo "version=$BASE" >> $GITHUB_OUTPUT
|
||||
|
||||
# Releasing onto an existing tag silently overwrites that release's assets, so a
|
||||
# forgotten .version bump replaces history instead of publishing. Fail loudly instead.
|
||||
# ls-remote, not rev-parse: actions/checkout does not fetch tags by default,
|
||||
# so a local lookup would always miss and the guard would never fire.
|
||||
if git ls-remote --exit-code --tags origin "refs/tags/v$BASE" >/dev/null 2>&1; then
|
||||
echo "::error::Tag v$BASE already exists - bump .version before releasing." \
|
||||
"Re-running this workflow as-is would overwrite the v$BASE release assets."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
Build:
|
||||
needs: Version
|
||||
|
||||
@@ -27,3 +27,6 @@ Reference/
|
||||
!tidal-apk/*.apk
|
||||
!tidal-apk/*.apkm
|
||||
tidal-apk/*/
|
||||
|
||||
# Kawarp-AGSL library (CLONE HERE! the build tooling in tools/kawarp-build expects it)
|
||||
tools/kawarp-agsl
|
||||
@@ -0,0 +1,674 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||
@@ -31,8 +31,8 @@ android {
|
||||
defaultConfig {
|
||||
minSdk = 24
|
||||
targetSdk = 36
|
||||
versionCode = 10_05_02
|
||||
versionName = "1.5.2"
|
||||
versionCode = 84
|
||||
versionName = "1.5.0"
|
||||
|
||||
vectorDrawables {
|
||||
useSupportLibrary = true
|
||||
@@ -190,6 +190,7 @@ dependencies {
|
||||
implementation(libs.bundles.ktor)
|
||||
implementation(libs.bundles.shizuku)
|
||||
implementation(libs.bundles.voyager)
|
||||
implementation(libs.pebblekit2.client)
|
||||
|
||||
implementation(libs.compose.ui.tooling.preview)
|
||||
debugImplementation(libs.compose.ui.tooling)
|
||||
|
||||
@@ -43,6 +43,22 @@
|
||||
android:name=".installers.pm.PMIntentReceiver"
|
||||
android:exported="false" />
|
||||
|
||||
<!-- Pebble relay, bound by patched TIDAL -->
|
||||
<service
|
||||
android:name=".pebble.PebbleRelayService"
|
||||
android:exported="true"
|
||||
tools:ignore="ExportedService" />
|
||||
|
||||
<!-- Pebble watch messages -->
|
||||
<service
|
||||
android:name=".pebble.PebbleWatchListenerService"
|
||||
android:exported="true"
|
||||
tools:ignore="ExportedService">
|
||||
<intent-filter>
|
||||
<action android:name="io.rebble.pebblekit2.RECEIVE_DATA_FROM_WATCH" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<provider
|
||||
android:name="androidx.core.content.FileProvider"
|
||||
android:authorities="${applicationId}.provider"
|
||||
|
||||
@@ -14,17 +14,16 @@
|
||||
"DebugMenuUnlock"
|
||||
],
|
||||
"disables": [
|
||||
"LyricsDisableCover",
|
||||
"LyricsReplaceLyricsButton",
|
||||
"LyricsReplaceShareButton",
|
||||
"LyricsRlApi",
|
||||
"LyricsKeepControlsVisible",
|
||||
"PlayerBackdrop",
|
||||
"QualityBadgeColors",
|
||||
"PlayerMovePlayingFrom",
|
||||
"PlayerOneHanded",
|
||||
"LyricsProgressPill",
|
||||
"MiniPlayerRedesign"
|
||||
"LyricsDisableCover",
|
||||
"LyricsReplaceLyricsButton",
|
||||
"LyricsReplaceShareButton",
|
||||
"LyricsKeepControlsVisible"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -83,7 +82,13 @@
|
||||
"description": "[Only works with API results] - Generates Syllable timings from Line timings using a self trained AI model ",
|
||||
"default": false,
|
||||
"inline": true,
|
||||
"token": "RL_SYNTHESIZE"
|
||||
"token": "RL_SYNTHESIZE",
|
||||
"fileNames": [
|
||||
"lyrics-ai-indicator.patch"
|
||||
],
|
||||
"extensionFiles": [
|
||||
"radiant/AiSparkle.smali"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "toggle",
|
||||
@@ -119,36 +124,29 @@
|
||||
"order": 30,
|
||||
"fileNames": [],
|
||||
"title": "Player Backdrop",
|
||||
"description": "Lets you fully adjust how the player backdrop blur looks and behaves",
|
||||
"description": "Swap the player backdrop for the Kawarp shader, or fine-tune TIDAL's own blurred cover",
|
||||
"default": true,
|
||||
"defaultVariantIndex": 2,
|
||||
"defaultVariantIndex": 1,
|
||||
"variants": [
|
||||
{
|
||||
"title": "Static",
|
||||
"fileNames": [
|
||||
"player-backdrop-static.patch"
|
||||
],
|
||||
"extensionFiles": [
|
||||
"radiant/BackdropFx.smali"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Animated",
|
||||
"fileNames": [
|
||||
"player-backdrop-animated.patch"
|
||||
],
|
||||
"extensionFiles": [
|
||||
"radiant/BackdropFx.smali"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Playback",
|
||||
"title": "Tidal",
|
||||
"fileNames": [
|
||||
"player-backdrop-playback.patch"
|
||||
],
|
||||
"extensionFiles": [
|
||||
"radiant/BackdropFx.smali"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Radiant",
|
||||
"fileNames": [
|
||||
"player-backdrop-kawarp.patch"
|
||||
],
|
||||
"extensionFiles": [
|
||||
"radiant/Kawarp.smali",
|
||||
"dev/kawarp/KawarpEngine.smali"
|
||||
],
|
||||
"minSdk": 33
|
||||
}
|
||||
],
|
||||
"advancedOptions": [
|
||||
@@ -166,7 +164,8 @@
|
||||
"encode": {
|
||||
"kind": "int",
|
||||
"scale": 1.0
|
||||
}
|
||||
},
|
||||
"requiresVariant": 0
|
||||
},
|
||||
{
|
||||
"type": "slider",
|
||||
@@ -182,7 +181,8 @@
|
||||
"encode": {
|
||||
"kind": "floatBits",
|
||||
"scale": 0.02
|
||||
}
|
||||
},
|
||||
"requiresVariant": 0
|
||||
},
|
||||
{
|
||||
"type": "slider",
|
||||
@@ -198,7 +198,8 @@
|
||||
"encode": {
|
||||
"kind": "floatBits",
|
||||
"scale": 0.02
|
||||
}
|
||||
},
|
||||
"requiresVariant": 0
|
||||
},
|
||||
{
|
||||
"type": "slider",
|
||||
@@ -214,23 +215,212 @@
|
||||
"encode": {
|
||||
"kind": "floatBits",
|
||||
"scale": 0.02
|
||||
}
|
||||
},
|
||||
"requiresVariant": 0
|
||||
},
|
||||
{
|
||||
"type": "toggle",
|
||||
"key": "kawarp_reactive",
|
||||
"title": "Playback Reactive",
|
||||
"description": "Cover shader reacts to playback state by freezing/resuming",
|
||||
"default": true,
|
||||
"token": "RL_KW_REACTIVE",
|
||||
"requiresVariant": 1
|
||||
},
|
||||
{
|
||||
"type": "slider",
|
||||
"key": "kawarp_blur",
|
||||
"title": "Blur Passes",
|
||||
"description": "Kawase blur passes, higher is softer but costs more GPU",
|
||||
"default": 6,
|
||||
"min": 1,
|
||||
"max": 40,
|
||||
"steps": 38,
|
||||
"displayAsPercent": false,
|
||||
"token": "RL_KW_BLUR",
|
||||
"encode": {
|
||||
"kind": "int",
|
||||
"scale": 1.0
|
||||
},
|
||||
"requiresVariant": 1
|
||||
},
|
||||
{
|
||||
"type": "slider",
|
||||
"key": "kawarp_warp",
|
||||
"title": "Warp Intensity",
|
||||
"description": "Strength of the fluidity effect",
|
||||
"default": 100,
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"steps": 19,
|
||||
"displayAsPercent": true,
|
||||
"token": "RL_KW_WARP",
|
||||
"encode": {
|
||||
"kind": "floatBits",
|
||||
"scale": 0.01
|
||||
},
|
||||
"requiresVariant": 1
|
||||
},
|
||||
{
|
||||
"type": "slider",
|
||||
"key": "kawarp_speed",
|
||||
"title": "Animation Speed",
|
||||
"description": "How fast the backdrop flows",
|
||||
"default": 175,
|
||||
"min": 0,
|
||||
"max": 500,
|
||||
"steps": 19,
|
||||
"displayAsPercent": true,
|
||||
"token": "RL_KW_SPEED",
|
||||
"encode": {
|
||||
"kind": "floatBits",
|
||||
"scale": 0.01
|
||||
},
|
||||
"requiresVariant": 1
|
||||
},
|
||||
{
|
||||
"type": "slider",
|
||||
"key": "kawarp_scale",
|
||||
"title": "Backdrop Scale",
|
||||
"description": "Zoom level of the effect",
|
||||
"default": 100,
|
||||
"min": 10,
|
||||
"max": 400,
|
||||
"steps": 12,
|
||||
"displayAsPercent": true,
|
||||
"token": "RL_KW_SCALE",
|
||||
"encode": {
|
||||
"kind": "floatBits",
|
||||
"scale": 0.01
|
||||
},
|
||||
"requiresVariant": 1
|
||||
},
|
||||
{
|
||||
"type": "slider",
|
||||
"key": "kawarp_contrast",
|
||||
"title": "Contrast",
|
||||
"description": "Contrast of the backdrop",
|
||||
"default": 100,
|
||||
"min": 0,
|
||||
"max": 300,
|
||||
"steps": 11,
|
||||
"displayAsPercent": true,
|
||||
"token": "RL_KW_CONTRAST",
|
||||
"encode": {
|
||||
"kind": "floatBits",
|
||||
"scale": 0.01
|
||||
},
|
||||
"requiresVariant": 1
|
||||
},
|
||||
{
|
||||
"type": "slider",
|
||||
"key": "kawarp_saturation",
|
||||
"title": "Saturation",
|
||||
"description": "Colour intensity of the backdrop",
|
||||
"default": 100,
|
||||
"min": 0,
|
||||
"max": 400,
|
||||
"steps": 15,
|
||||
"displayAsPercent": true,
|
||||
"token": "RL_KW_SAT",
|
||||
"encode": {
|
||||
"kind": "floatBits",
|
||||
"scale": 0.01
|
||||
},
|
||||
"requiresVariant": 1
|
||||
},
|
||||
{
|
||||
"type": "slider",
|
||||
"key": "kawarp_brightness",
|
||||
"title": "Brightness",
|
||||
"description": "The value of Brightness applied to the backdrop",
|
||||
"default": 100,
|
||||
"min": 0,
|
||||
"max": 200,
|
||||
"steps": 19,
|
||||
"displayAsPercent": true,
|
||||
"token": "RL_KW_BRIGHT",
|
||||
"encode": {
|
||||
"kind": "floatBits",
|
||||
"scale": 0.01
|
||||
},
|
||||
"requiresVariant": 1
|
||||
},
|
||||
{
|
||||
"type": "slider",
|
||||
"key": "kawarp_darken",
|
||||
"title": "Auto Darken Bright Covers",
|
||||
"description": "Prevents bright covers from making text unreadable",
|
||||
"default": 80,
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"steps": 19,
|
||||
"displayAsPercent": true,
|
||||
"token": "RL_KW_DARKEN",
|
||||
"encode": {
|
||||
"kind": "floatBits",
|
||||
"scale": 0.01
|
||||
},
|
||||
"requiresVariant": 1
|
||||
},
|
||||
{
|
||||
"type": "slider",
|
||||
"key": "kawarp_dither",
|
||||
"title": "Dithering",
|
||||
"description": "Breaks up color banding in smooth gradients",
|
||||
"default": 15,
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"steps": 19,
|
||||
"displayAsPercent": false,
|
||||
"token": "RL_KW_DITHER",
|
||||
"encode": {
|
||||
"kind": "floatBits",
|
||||
"scale": 0.001
|
||||
},
|
||||
"requiresVariant": 1
|
||||
},
|
||||
{
|
||||
"type": "toggle",
|
||||
"key": "cover_everywhere",
|
||||
"title": "Cover Everywhere - WIP",
|
||||
"description": "Applies TIDAL's native blurred album-art backdrop to every Compose based page (Home & Collection)",
|
||||
"description": "Applies TIDAL's native blurred album-art backdrop to every Compose based page (Home, Collection, Search, Save For Later, Profile, Downloads & Settings)",
|
||||
"default": false,
|
||||
"inline": true,
|
||||
"fileNames": [
|
||||
"home-backdrop.patch",
|
||||
"collection-backdrop.patch",
|
||||
"cover-everywhere-pages.patch",
|
||||
"cover-capture.patch"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "AnimatedCovers",
|
||||
"order": 34,
|
||||
"fileNames": [
|
||||
"animated-covers.patch"
|
||||
],
|
||||
"title": "Animated Covers",
|
||||
"description": "Replaces cover art with animated artwork when available",
|
||||
"default": true,
|
||||
"extensionFiles": [
|
||||
"radiant/AnimatedCovers.smali",
|
||||
"radiant/AnimatedCoverView.smali",
|
||||
"radiant/RoundOutline.smali"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "PlayerCrossfade",
|
||||
"order": 35,
|
||||
"fileNames": [
|
||||
"player-crossfade.patch"
|
||||
],
|
||||
"title": "Audio Crossfade",
|
||||
"description": "[Temporary Patch] - Unlocks TIDAL's crossfade between tracks. Set the duration in TIDAL Settings > Audio & Playback (enables the mf-player-crossfade feature flag)",
|
||||
"default": true
|
||||
},
|
||||
{
|
||||
"id": "QualityBadgeColors",
|
||||
"order": 36,
|
||||
@@ -264,6 +454,142 @@
|
||||
"description": "Mirrors the bottom player buttons left-to-right for easier one-handed reach.",
|
||||
"default": false
|
||||
},
|
||||
{
|
||||
"id": "SwipeToQueue",
|
||||
"order": 39,
|
||||
"fileNames": [
|
||||
"swipe-to-queue.patch",
|
||||
"swipe-to-queue-compose.patch"
|
||||
],
|
||||
"extensionFiles": [
|
||||
"radiant/gestures/queue/SwipeToQueue.smali",
|
||||
"radiant/gestures/queue/QueueSwipeRemove.smali",
|
||||
"radiant/gestures/queue/QueueRequest.smali",
|
||||
"radiant/gestures/queue/QueueRowResolver.smali",
|
||||
"radiant/gestures/queue/QueueExecutor.smali",
|
||||
"radiant/gestures/queue/FavoriteTracksResolver.smali",
|
||||
"radiant/gestures/queue/DynamicTrackResolver.smali",
|
||||
"radiant/gestures/queue/MyAlbumsResolver.smali",
|
||||
"radiant/gestures/queue/MyPlaylistsResolver.smali",
|
||||
"radiant/gestures/queue/MyMixesAndRadioResolver.smali",
|
||||
"radiant/gestures/queue/SearchAlbumsResolver.smali",
|
||||
"radiant/gestures/queue/SearchPlaylistsResolver.smali",
|
||||
"radiant/gestures/queue/PlaylistItemsResolver.smali",
|
||||
"radiant/gestures/queue/UnifiedSearchResolver.smali",
|
||||
"radiant/gestures/queue/ComposeSwipeAction.smali",
|
||||
"radiant/gestures/queue/ComposeSwipeState.smali",
|
||||
"radiant/gestures/queue/ComposeSwipeState$Gesture.smali",
|
||||
"radiant/gestures/queue/ComposeSwipeState$Draw.smali",
|
||||
"radiant/gestures/queue/ComposeSwipeState$ResetAnimator.smali",
|
||||
"radiant/gestures/queue/ComposeTapGuard.smali",
|
||||
"radiant/gestures/queue/AlbumItemQueueAction.smali",
|
||||
"radiant/gestures/queue/DynamicTrackQueueEvent.smali",
|
||||
"radiant/gestures/queue/DynamicTrackQueueAction.smali",
|
||||
"radiant/gestures/queue/DynamicTrackQueue.smali",
|
||||
"radiant/gestures/queue/ViewAllTrackQueueAction.smali",
|
||||
"radiant/gestures/queue/ViewAllTrackQueue.smali",
|
||||
"radiant/gestures/queue/ComposeSearchQueueEvent.smali",
|
||||
"radiant/gestures/queue/ComposeSearchQueueAction.smali",
|
||||
"radiant/gestures/queue/ComposeSearchQueue.smali",
|
||||
"radiant/gestures/queue/FeedResolver.smali",
|
||||
"radiant/gestures/queue/ArtistTrackCreditsQueueEvent.smali",
|
||||
"radiant/gestures/queue/ArtistTrackCreditsQueueAction.smali",
|
||||
"radiant/gestures/queue/ArtistTrackCreditsQueue.smali",
|
||||
"radiant/gestures/queue/DynamicMediaQueueEvent.smali",
|
||||
"radiant/gestures/queue/CompactGridMediaQueueAction.smali",
|
||||
"radiant/gestures/queue/VerticalMediaQueueAction.smali",
|
||||
"radiant/gestures/queue/PublicPlaylistQueueAction.smali",
|
||||
"radiant/gestures/queue/DynamicMediaQueue.smali",
|
||||
"radiant/gestures/queue/SuggestionsResolver.smali"
|
||||
],
|
||||
"title": "Swipe to Queue",
|
||||
"description": "Swipe on tracks/albums/playlists to add them to the play queue (and more actions)",
|
||||
"default": false,
|
||||
"advancedOptions": [
|
||||
{
|
||||
"type": "choice",
|
||||
"key": "left_action",
|
||||
"title": "Left Swipe Action",
|
||||
"entries": [
|
||||
"Disabled",
|
||||
"Play next",
|
||||
"Add to queue",
|
||||
"Add to playlist"
|
||||
],
|
||||
"values": [
|
||||
"0x0",
|
||||
"0x1",
|
||||
"0x2",
|
||||
"0x3"
|
||||
],
|
||||
"defaultIndex": 2,
|
||||
"inline": true,
|
||||
"distinctFrom": "right_action",
|
||||
"token": "RL_SWIPE_TO_QUEUE_LEFT_ACTION"
|
||||
},
|
||||
{
|
||||
"type": "choice",
|
||||
"key": "right_action",
|
||||
"title": "Right Swipe Action",
|
||||
"entries": [
|
||||
"Disabled",
|
||||
"Play next",
|
||||
"Add to queue",
|
||||
"Add to playlist"
|
||||
],
|
||||
"values": [
|
||||
"0x0",
|
||||
"0x1",
|
||||
"0x2",
|
||||
"0x3"
|
||||
],
|
||||
"defaultIndex": 0,
|
||||
"inline": true,
|
||||
"distinctFrom": "left_action",
|
||||
"token": "RL_SWIPE_TO_QUEUE_RIGHT_ACTION"
|
||||
},
|
||||
{
|
||||
"type": "choice",
|
||||
"key": "remove_direction",
|
||||
"title": "Remove Track from Queue",
|
||||
"entries": [
|
||||
"Left swipe",
|
||||
"Right swipe",
|
||||
"Both directions"
|
||||
],
|
||||
"values": [
|
||||
"0x4",
|
||||
"0x8",
|
||||
"0xc"
|
||||
],
|
||||
"defaultIndex": 0,
|
||||
"forceDropdown": true,
|
||||
"inline": true,
|
||||
"token": "RL_SWIPE_TO_QUEUE_REMOVE_DIRECTION"
|
||||
},
|
||||
{
|
||||
"type": "color",
|
||||
"key": "background_color",
|
||||
"title": "Add to Queue Color",
|
||||
"default": -14408663,
|
||||
"token": "RL_SWIPE_TO_QUEUE_ADD_COLOR"
|
||||
},
|
||||
{
|
||||
"type": "color",
|
||||
"key": "play_next_color",
|
||||
"title": "Play Next Color",
|
||||
"default": -14408663,
|
||||
"token": "RL_SWIPE_TO_QUEUE_PLAY_NEXT_COLOR"
|
||||
},
|
||||
{
|
||||
"type": "color",
|
||||
"key": "add_to_playlist_color",
|
||||
"title": "Add to Playlist Color",
|
||||
"default": -14408663,
|
||||
"token": "RL_SWIPE_TO_QUEUE_ADD_TO_PLAYLIST_COLOR"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "LyricsProgressPill",
|
||||
"order": 40,
|
||||
@@ -298,7 +624,7 @@
|
||||
"lyrics-sparkle-conditional-visibility.patch"
|
||||
],
|
||||
"title": "Replace Lyrics Button",
|
||||
"description": "Replaces the Lyrics button with the RL Sparkle!",
|
||||
"description": "Replaces the Lyrics button with the RL Sparkle! Spins while lyrics load, and shows a greyed-out crossed note when a track has no lyrics",
|
||||
"default": true
|
||||
},
|
||||
{
|
||||
@@ -384,14 +710,14 @@
|
||||
"lyrics-gesture-scroll-guard.patch"
|
||||
],
|
||||
"extensionFiles": [
|
||||
"radiant/gestures/MiniPlayerGestures.smali",
|
||||
"radiant/gestures/MiniPlayerGestures$Gesture.smali",
|
||||
"radiant/gestures/MiniPlayerGestures$FeedbackLayer.smali",
|
||||
"radiant/gestures/MiniPlayerGestures$FeedbackResetAnimator.smali",
|
||||
"radiant/gestures/MiniPlayerGestures$RootGesture.smali",
|
||||
"radiant/gestures/MiniPlayerGestures$ApplyPending.smali",
|
||||
"radiant/gestures/LyricsDrag.smali",
|
||||
"radiant/gestures/LyricsDrag$Guard.smali"
|
||||
"radiant/gestures/miniplayer/MiniPlayerGestures.smali",
|
||||
"radiant/gestures/miniplayer/MiniPlayerGestures$Gesture.smali",
|
||||
"radiant/gestures/miniplayer/MiniPlayerGestures$FeedbackLayer.smali",
|
||||
"radiant/gestures/miniplayer/MiniPlayerGestures$FeedbackResetAnimator.smali",
|
||||
"radiant/gestures/miniplayer/MiniPlayerGestures$RootGesture.smali",
|
||||
"radiant/gestures/miniplayer/MiniPlayerGestures$ApplyPending.smali",
|
||||
"radiant/gestures/lyrics/LyricsDrag.smali",
|
||||
"radiant/gestures/lyrics/LyricsDrag$Guard.smali"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -421,11 +747,11 @@
|
||||
"mini-player-left-right-gesture.patch"
|
||||
],
|
||||
"extensionFiles": [
|
||||
"radiant/gestures/MiniPlayerTrackGestures.smali",
|
||||
"radiant/gestures/MiniPlayerTrackGestures$Gesture.smali",
|
||||
"radiant/gestures/MiniPlayerTrackGestures$OffsetLayer.smali",
|
||||
"radiant/gestures/MiniPlayerTrackGestures$ResetAnimator.smali",
|
||||
"radiant/gestures/MiniPlayerTrackGestures$TextDraw.smali",
|
||||
"radiant/gestures/miniplayer/MiniPlayerTrackGestures.smali",
|
||||
"radiant/gestures/miniplayer/MiniPlayerTrackGestures$Gesture.smali",
|
||||
"radiant/gestures/miniplayer/MiniPlayerTrackGestures$OffsetLayer.smali",
|
||||
"radiant/gestures/miniplayer/MiniPlayerTrackGestures$ResetAnimator.smali",
|
||||
"radiant/gestures/miniplayer/MiniPlayerTrackGestures$TextDraw.smali",
|
||||
"com/tidal/android/feature/appscaffold/ui/r$c.smali"
|
||||
]
|
||||
}
|
||||
@@ -486,6 +812,30 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "PebbleIntegration",
|
||||
"order": 91,
|
||||
"category": "integration",
|
||||
"fileNames": [
|
||||
"integration-pebble-playback.patch",
|
||||
"integration-pebble-lyrics.patch"
|
||||
],
|
||||
"extensionFiles": [
|
||||
"radiant/PebbleBridge.smali",
|
||||
"radiant/PebbleBridge$1.smali",
|
||||
"radiant/PebbleBridge$2.smali"
|
||||
],
|
||||
"title": "Pebble Watch",
|
||||
"description": "Shows synced lyrics on your Pebble Time 2 when listening, Everything is configured and managed in the Pebble App",
|
||||
"default": false,
|
||||
"requires": [
|
||||
"LyricsRlApi"
|
||||
],
|
||||
"companionApp": {
|
||||
"storeId": "02b779dcf9084fecb0375df1",
|
||||
"storeSource": "https://appstore-api.repebble.com/api"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "DebugMenuUnlock",
|
||||
"order": 100,
|
||||
|
||||
+14
-2
@@ -39,11 +39,15 @@ class RadiantLyricsGithubService(
|
||||
/**
|
||||
* Fetches manager self-update releases.
|
||||
*/
|
||||
suspend fun getManagerReleases(): ApiResponse<List<GithubRelease>> =
|
||||
suspend fun getManagerReleases(force: Boolean = false): ApiResponse<List<GithubRelease>> =
|
||||
http.request {
|
||||
url("https://api.github.com/repos/${BuildConfig.PATCHES_REPO_OWNER}/${BuildConfig.PATCHES_REPO_NAME}/releases")
|
||||
if (force) {
|
||||
header(HttpHeaders.CacheControl, "no-cache")
|
||||
} else {
|
||||
header(HttpHeaders.CacheControl, "public, max-age=60, s-maxage=60")
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the contributors list from GitHub for the repo.
|
||||
@@ -66,11 +70,19 @@ class RadiantLyricsGithubService(
|
||||
/**
|
||||
* Fetches a page of commits (paginated). Used by the Home screen's commit list.
|
||||
*/
|
||||
suspend fun getCommits(page: Int, perPage: Int = 30): ApiResponse<List<com.meowarex.rlmobile.network.models.GithubCommit>> =
|
||||
suspend fun getCommits(
|
||||
page: Int,
|
||||
perPage: Int = 30,
|
||||
force: Boolean = false,
|
||||
): ApiResponse<List<com.meowarex.rlmobile.network.models.GithubCommit>> =
|
||||
http.request {
|
||||
url("https://api.github.com/repos/${BuildConfig.PATCHES_REPO_OWNER}/${BuildConfig.PATCHES_REPO_NAME}/commits?per_page=$perPage&page=${page + 1}")
|
||||
if (force) {
|
||||
header(HttpHeaders.CacheControl, "no-cache")
|
||||
} else {
|
||||
header(HttpHeaders.CacheControl, "public, max-age=120, s-maxage=120")
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val REPO_OWNER = BuildConfig.PATCHES_REPO_OWNER
|
||||
|
||||
+4
-1
@@ -7,6 +7,8 @@ import com.meowarex.rlmobile.network.services.RadiantLyricsGithubService
|
||||
|
||||
class CommitsPagingSource(
|
||||
private val github: RadiantLyricsGithubService,
|
||||
/** Bypasses the http response cache */
|
||||
private val force: Boolean = false,
|
||||
) : PagingSource<Int, GithubCommit>() {
|
||||
private val seenShas = mutableSetOf<String>()
|
||||
private val seenTitles = mutableSetOf<String>()
|
||||
@@ -19,7 +21,8 @@ class CommitsPagingSource(
|
||||
|
||||
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, GithubCommit> {
|
||||
val page = params.key ?: 0
|
||||
return when (val r = github.getCommits(page)) {
|
||||
// Only the first page skips the cache
|
||||
return when (val r = github.getCommits(page, force = force && page == 0)) {
|
||||
is ApiResponse.Success -> LoadResult.Page(
|
||||
data = r.data.filter { commit ->
|
||||
val title = commit.commit.message.lineSequence().first().trim()
|
||||
|
||||
+4
@@ -29,6 +29,9 @@ class PatchManifestStep(private val options: PatchOptions) : Step() {
|
||||
val wazeDefault = container.getStep<SmaliPatchStep>().specs
|
||||
.firstOrNull { it.id == "WazeIntegration" }?.defaultEnabled ?: false
|
||||
val enableWazeIntegration = options.patchStates["WazeIntegration"] ?: wazeDefault
|
||||
val pebbleDefault = container.getStep<SmaliPatchStep>().specs
|
||||
.firstOrNull { it.id == "PebbleIntegration" }?.defaultEnabled ?: false
|
||||
val enablePebbleIntegration = options.patchStates["PebbleIntegration"] ?: pebbleDefault
|
||||
|
||||
val patchedManifest = ManifestPatcher.patchManifest(
|
||||
manifestBytes = manifest,
|
||||
@@ -36,6 +39,7 @@ class PatchManifestStep(private val options: PatchOptions) : Step() {
|
||||
appName = options.appName,
|
||||
debuggable = options.debuggable,
|
||||
enableWazeIntegration = enableWazeIntegration,
|
||||
enablePebbleIntegration = enablePebbleIntegration,
|
||||
)
|
||||
|
||||
container.log("Repacking apk with patched manifest")
|
||||
|
||||
+2
-1
@@ -369,7 +369,8 @@ class SmaliPatchStep(
|
||||
if (matchesAt(target, sourceLines, hint)) return hint
|
||||
|
||||
// Walk outward from the hint, alternating below/above, until finds a unique match.
|
||||
val maxRadius = target.size
|
||||
// Also reach hints past the end of the file
|
||||
val maxRadius = maxOf(target.size, hint)
|
||||
for (offset in 1..maxRadius) {
|
||||
val below = hint + offset
|
||||
if (below + sourceLines.size <= target.size && matchesAt(target, sourceLines, below)) {
|
||||
|
||||
+16
-1
@@ -5,6 +5,7 @@ import android.content.pm.PackageManager.NameNotFoundException
|
||||
import com.meowarex.rlmobile.R
|
||||
import com.meowarex.rlmobile.installers.InstallerResult
|
||||
import com.meowarex.rlmobile.manager.InstallerManager
|
||||
import com.meowarex.rlmobile.manager.PathManager
|
||||
import com.meowarex.rlmobile.patcher.StepRunner
|
||||
import com.meowarex.rlmobile.patcher.steps.StepGroup
|
||||
import com.meowarex.rlmobile.patcher.steps.base.Step
|
||||
@@ -21,6 +22,7 @@ import org.koin.core.component.inject
|
||||
class DowngradeCheckStep(private val options: PatchOptions) : Step(), KoinComponent {
|
||||
private val context: Application by inject()
|
||||
private val installers: InstallerManager by inject()
|
||||
private val paths: PathManager by inject()
|
||||
|
||||
override val group = StepGroup.Prepare
|
||||
override val localizedName = R.string.patch_step_downgrade_check
|
||||
@@ -38,7 +40,9 @@ class DowngradeCheckStep(private val options: PatchOptions) : Step(), KoinCompon
|
||||
}
|
||||
container.log("Version of installed TIDAL app: $currentVersion")
|
||||
|
||||
val targetVersion = container
|
||||
// Custom APK can be newer than data.json
|
||||
val targetVersion = customApkVersionCode(container)
|
||||
?: container
|
||||
.getStep<FetchInfoStep>()
|
||||
.data.tidalVersionCode
|
||||
|
||||
@@ -59,4 +63,15 @@ class DowngradeCheckStep(private val options: PatchOptions) : Step(), KoinCompon
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun customApkVersionCode(container: StepRunner): Int? {
|
||||
val file = options.customTidalApk?.getFile(paths)?.takeIf { it.exists() } ?: return null
|
||||
return try {
|
||||
@Suppress("DEPRECATION")
|
||||
context.packageManager.getPackageArchiveInfo(file.absolutePath, 0)?.versionCode
|
||||
} catch (t: Throwable) {
|
||||
container.log("Failed to read custom TIDAL APK version: ${t.message}")
|
||||
null
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -21,6 +21,8 @@ object ManifestPatcher {
|
||||
private const val WAZE_PACKAGE = "com.waze"
|
||||
private const val WAZE_INIT_RECEIVER = "radiant.WazeInitReceiver"
|
||||
private const val WAZE_ACTION_INIT = "com.waze.sdk.audio.ACTION_INIT"
|
||||
// Pebble bridge binds to the Manager
|
||||
private const val MANAGER_PACKAGE = "com.meowarex.rlmobile"
|
||||
|
||||
fun patchManifest(
|
||||
manifestBytes: ByteArray,
|
||||
@@ -28,6 +30,7 @@ object ManifestPatcher {
|
||||
appName: String,
|
||||
debuggable: Boolean,
|
||||
enableWazeIntegration: Boolean,
|
||||
enablePebbleIntegration: Boolean,
|
||||
): ByteArray {
|
||||
// Extract original package name to rewrite every reference to it
|
||||
// (permissions, provider authorities) to the new packageName.
|
||||
@@ -90,11 +93,12 @@ object ManifestPatcher {
|
||||
return when (name) {
|
||||
"queries" -> object : NodeVisitor(nv) {
|
||||
private var hasWazePackage = false
|
||||
private var hasManagerPackage = false
|
||||
|
||||
override fun child(ns: String?, name: String): NodeVisitor {
|
||||
val visitor = super.child(ns, name)
|
||||
|
||||
return if (enableWazeIntegration && name == "package") {
|
||||
return if ((enableWazeIntegration || enablePebbleIntegration) && name == "package") {
|
||||
object : NodeVisitor(visitor) {
|
||||
override fun attr(
|
||||
ns: String?,
|
||||
@@ -106,6 +110,9 @@ object ManifestPatcher {
|
||||
if (name == "name" && value == WAZE_PACKAGE) {
|
||||
hasWazePackage = true
|
||||
}
|
||||
if (name == "name" && value == MANAGER_PACKAGE) {
|
||||
hasManagerPackage = true
|
||||
}
|
||||
super.attr(ns, name, resourceId, type, value)
|
||||
}
|
||||
}
|
||||
@@ -127,6 +134,18 @@ object ManifestPatcher {
|
||||
end()
|
||||
}
|
||||
}
|
||||
if (enablePebbleIntegration && !hasManagerPackage) {
|
||||
super.child(null, "package").apply {
|
||||
attr(
|
||||
ANDROID_NAMESPACE,
|
||||
"name",
|
||||
android.R.attr.name,
|
||||
TYPE_STRING,
|
||||
MANAGER_PACKAGE,
|
||||
)
|
||||
end()
|
||||
}
|
||||
}
|
||||
super.end()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,483 @@
|
||||
package com.meowarex.rlmobile.pebble
|
||||
|
||||
import android.app.Service
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.media.MediaMetadata
|
||||
import android.media.session.MediaController
|
||||
import android.media.session.MediaSession
|
||||
import android.media.session.PlaybackState
|
||||
import android.os.Build
|
||||
import android.os.Handler
|
||||
import android.os.IBinder
|
||||
import android.os.Looper
|
||||
import android.os.Message
|
||||
import android.os.Messenger
|
||||
import android.os.SystemClock
|
||||
import android.util.Log
|
||||
import androidx.core.os.BundleCompat
|
||||
import com.meowarex.rlmobile.BuildConfig
|
||||
import io.rebble.pebblekit2.client.DefaultPebbleSender
|
||||
import io.rebble.pebblekit2.common.model.PebbleDictionary
|
||||
import io.rebble.pebblekit2.common.model.TransmissionResult
|
||||
import kotlinx.coroutines.MainScope
|
||||
import kotlinx.coroutines.cancel
|
||||
import kotlinx.coroutines.launch
|
||||
import java.util.zip.CRC32
|
||||
import kotlin.math.abs
|
||||
|
||||
// Relays patched TIDAL playback and lyrics to the watch
|
||||
class PebbleRelayService : Service() {
|
||||
private val main = Handler(Looper.getMainLooper())
|
||||
private val messenger = Messenger(Handler(Looper.getMainLooper()) { handleBridgeMessage(it); true })
|
||||
private val scope = MainScope()
|
||||
private val senderLazy = lazy { DefaultPebbleSender(this) }
|
||||
private val sender by senderLazy
|
||||
|
||||
// Reported by the watchapp
|
||||
private val prefs by lazy { getSharedPreferences("pebble_relay", MODE_PRIVATE) }
|
||||
private var autoOpen: Boolean
|
||||
get() = prefs.getBoolean(PREF_AUTO_OPEN, true)
|
||||
set(value) = prefs.edit().putBoolean(PREF_AUTO_OPEN, value).apply()
|
||||
private var tidalPackage: String? = null
|
||||
private var controller: MediaController? = null
|
||||
|
||||
// Track
|
||||
private var mediaId: String? = null
|
||||
private var trackId = 0L
|
||||
private var title = ""
|
||||
private var artist = ""
|
||||
private var durationMs = 0L
|
||||
private var status = WatchProtocol.STATUS_IDLE
|
||||
private var lines: List<WatchProtocol.Line> = emptyList()
|
||||
private var openedFor: Long = -1
|
||||
|
||||
// May arrive before the metadata
|
||||
private var lyrics: LyricsPayload? = null
|
||||
|
||||
// Playback
|
||||
private var playing = false
|
||||
private var sample: PositionSample? = null
|
||||
|
||||
// Watch
|
||||
private var watchReady = true
|
||||
private var watchConfirmed = false
|
||||
private var inboxSize = 1024
|
||||
private val queue = ArrayDeque<Outgoing>()
|
||||
private var inFlight: Outgoing? = null
|
||||
|
||||
// Last clock sent to the watch
|
||||
private var sentPosition = -1L
|
||||
private var sentTime = 0L
|
||||
private var sentPlaying = false
|
||||
|
||||
private class PositionSample(val mediaId: String?, val position: Long, val time: Long, val playing: Boolean)
|
||||
private class LyricsPayload(val key: String, val title: String?, val body: String?, val failed: Boolean)
|
||||
|
||||
private class Outgoing(val kind: Int, val trackId: Long, val build: () -> PebbleDictionary) {
|
||||
var attempts = 0
|
||||
}
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
current = this
|
||||
if (PebbleWatchListenerService.watchappOpen) {
|
||||
watchConfirmed = true
|
||||
watchReady = true
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBind(intent: Intent?): IBinder = messenger.binder
|
||||
|
||||
override fun onUnbind(intent: Intent?): Boolean {
|
||||
// TIDAL stopped
|
||||
releaseController()
|
||||
resetTrack()
|
||||
if (autoOpen) {
|
||||
closeWatchApp()
|
||||
} else {
|
||||
enqueue(Outgoing(WatchProtocol.CMD_STATUS, ANY_TRACK) { WatchProtocol.status(0, WatchProtocol.STATUS_IDLE) })
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
if (current === this) current = null
|
||||
releaseController()
|
||||
main.removeCallbacksAndMessages(null)
|
||||
scope.cancel()
|
||||
if (senderLazy.isInitialized()) sender.close()
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
private fun handleBridgeMessage(msg: Message) {
|
||||
val data = msg.data ?: return
|
||||
data.classLoader = MediaSession.Token::class.java.classLoader
|
||||
if (msg.what != MSG_SESSION && controller == null) return
|
||||
|
||||
when (msg.what) {
|
||||
MSG_SESSION -> {
|
||||
val pkg = data.getString("package") ?: return
|
||||
if (!isTrustedTidal(pkg, msg)) {
|
||||
Log.w(BuildConfig.TAG, "Pebble relay: rejected session from $pkg")
|
||||
return
|
||||
}
|
||||
val token = BundleCompat.getParcelable(data, "token", MediaSession.Token::class.java) ?: return
|
||||
attach(pkg, token)
|
||||
}
|
||||
|
||||
MSG_POSITION -> {
|
||||
val next = PositionSample(
|
||||
mediaId = data.getString("mediaId"),
|
||||
position = data.getLong("position"),
|
||||
time = data.getLong("elapsedRealtime"),
|
||||
playing = data.getBoolean("playing"),
|
||||
)
|
||||
if (next.mediaId != null && next.mediaId != mediaId) return
|
||||
sample = next
|
||||
playing = next.playing
|
||||
syncWatchClock()
|
||||
}
|
||||
|
||||
MSG_LYRICS -> {
|
||||
val key = data.getString("key") ?: return
|
||||
lyrics = LyricsPayload(key, data.getString("title"), data.getString("body"), data.getBoolean("failed"))
|
||||
applyLyrics()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Patched TIDAL only
|
||||
private fun isTrustedTidal(pkg: String, msg: Message): Boolean = try {
|
||||
val info = packageManager.getApplicationInfo(pkg, PackageManager.GET_META_DATA)
|
||||
val patched = info.metaData?.containsKey("isRadiantLyrics") == true
|
||||
val uidOk = Build.VERSION.SDK_INT < Build.VERSION_CODES.Q || msg.sendingUid == -1 || msg.sendingUid == info.uid
|
||||
patched && uidOk
|
||||
} catch (_: PackageManager.NameNotFoundException) {
|
||||
false
|
||||
}
|
||||
|
||||
private fun attach(pkg: String, token: MediaSession.Token) {
|
||||
if (controller?.sessionToken == token && pkg == tidalPackage) return
|
||||
releaseController()
|
||||
tidalPackage = pkg
|
||||
controller = MediaController(this, token).also {
|
||||
it.registerCallback(controllerCallback, main)
|
||||
onMetadata(it.metadata)
|
||||
onPlaybackState(it.playbackState)
|
||||
}
|
||||
}
|
||||
|
||||
private fun releaseController() {
|
||||
controller?.unregisterCallback(controllerCallback)
|
||||
controller = null
|
||||
}
|
||||
|
||||
private val controllerCallback = object : MediaController.Callback() {
|
||||
override fun onMetadataChanged(metadata: MediaMetadata?) = onMetadata(metadata)
|
||||
override fun onPlaybackStateChanged(state: PlaybackState?) = onPlaybackState(state)
|
||||
override fun onSessionDestroyed() {
|
||||
releaseController()
|
||||
}
|
||||
}
|
||||
|
||||
private fun resetTrack() {
|
||||
main.removeCallbacks(lyricsTimeout)
|
||||
mediaId = null
|
||||
trackId = 0
|
||||
title = ""
|
||||
artist = ""
|
||||
durationMs = 0
|
||||
lines = emptyList()
|
||||
status = WatchProtocol.STATUS_IDLE
|
||||
playing = false
|
||||
sample = null
|
||||
sentPosition = -1
|
||||
}
|
||||
|
||||
private fun onMetadata(metadata: MediaMetadata?) {
|
||||
metadata ?: return
|
||||
val newTitle = metadata.getString(MediaMetadata.METADATA_KEY_TITLE).orEmpty()
|
||||
val newArtist = metadata.getString(MediaMetadata.METADATA_KEY_ARTIST)
|
||||
?: metadata.getString(MediaMetadata.METADATA_KEY_ALBUM_ARTIST).orEmpty()
|
||||
val newDuration = metadata.getLong(MediaMetadata.METADATA_KEY_DURATION)
|
||||
val id = metadata.getString(MediaMetadata.METADATA_KEY_MEDIA_ID) ?: "$newTitle\u0000$newArtist"
|
||||
if (newTitle.isBlank()) return
|
||||
|
||||
if (id == mediaId) {
|
||||
if (newDuration > 0 && newDuration != durationMs) {
|
||||
durationMs = newDuration
|
||||
sendTrack()
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
mediaId = id
|
||||
trackId = CRC32().run { update(id.toByteArray()); value }.takeIf { it != 0L } ?: 1L
|
||||
title = newTitle
|
||||
artist = newArtist
|
||||
durationMs = newDuration
|
||||
lines = emptyList()
|
||||
status = WatchProtocol.STATUS_LOADING
|
||||
sample = null
|
||||
sentPosition = -1
|
||||
watchReady = true
|
||||
queue.removeAll { it.trackId != ANY_TRACK }
|
||||
|
||||
sendTrack()
|
||||
sendState()
|
||||
if (!applyLyrics()) {
|
||||
main.removeCallbacks(lyricsTimeout)
|
||||
main.postDelayed(lyricsTimeout, LYRICS_TIMEOUT_MS)
|
||||
}
|
||||
}
|
||||
|
||||
// Apply lyrics if they match the track
|
||||
private fun applyLyrics(): Boolean {
|
||||
val payload = lyrics ?: return false
|
||||
if (trackId == 0L) return false
|
||||
val matches = payload.key == mediaId || (payload.title != null && payload.title.equals(title, ignoreCase = true))
|
||||
if (!matches) return false
|
||||
|
||||
main.removeCallbacks(lyricsTimeout)
|
||||
lines = payload.body?.let {
|
||||
runCatching { WatchProtocol.shape(it) }
|
||||
.onFailure { e -> Log.w(BuildConfig.TAG, "Pebble lyrics parse failed", e) }
|
||||
.getOrNull()
|
||||
}.orEmpty()
|
||||
status = when {
|
||||
payload.failed -> WatchProtocol.STATUS_ERROR
|
||||
lines.isEmpty() -> WatchProtocol.STATUS_NO_LYRICS
|
||||
else -> WatchProtocol.STATUS_READY
|
||||
}
|
||||
sendTrack()
|
||||
sendLines()
|
||||
sendState()
|
||||
updateWatchApp()
|
||||
return true
|
||||
}
|
||||
|
||||
// Open with timed lyrics, close without
|
||||
private fun updateWatchApp() {
|
||||
if (!autoOpen || trackId == 0L) return
|
||||
when (status) {
|
||||
WatchProtocol.STATUS_READY -> if (openedFor != trackId) {
|
||||
// Once per track so manual closes stick
|
||||
openedFor = trackId
|
||||
if (!watchConfirmed) scope.launch { sender.startAppOnTheWatch(WatchProtocol.APP_UUID) }
|
||||
}
|
||||
|
||||
WatchProtocol.STATUS_NO_LYRICS, WatchProtocol.STATUS_ERROR -> closeWatchApp()
|
||||
}
|
||||
}
|
||||
|
||||
private fun closeWatchApp() {
|
||||
if (!watchConfirmed) return
|
||||
scope.launch { sender.stopAppOnTheWatch(WatchProtocol.APP_UUID) }
|
||||
watchConfirmed = false
|
||||
watchReady = false
|
||||
queue.clear()
|
||||
}
|
||||
|
||||
private val lyricsTimeout = Runnable {
|
||||
if (status == WatchProtocol.STATUS_LOADING && trackId != 0L) {
|
||||
// Lyrics worker never reported
|
||||
status = WatchProtocol.STATUS_ERROR
|
||||
sendTrack()
|
||||
updateWatchApp()
|
||||
}
|
||||
}
|
||||
|
||||
private fun onPlaybackState(state: PlaybackState?) {
|
||||
state ?: return
|
||||
val nowPlaying = state.state == PlaybackState.STATE_PLAYING
|
||||
if (nowPlaying == playing) return
|
||||
playing = nowPlaying
|
||||
syncWatchClock()
|
||||
}
|
||||
|
||||
// Latest position and phone time, not extrapolated
|
||||
private fun reference(): Pair<Long, Long> {
|
||||
val now = SystemClock.elapsedRealtime()
|
||||
val s = sample
|
||||
if (s != null && (s.mediaId == null || s.mediaId == mediaId) && (!playing || now - s.time < SAMPLE_STALE_MS)) {
|
||||
return s.position to s.time
|
||||
}
|
||||
// Casting has no player readings
|
||||
val state = controller?.playbackState ?: return 0L to now
|
||||
return state.position.coerceAtLeast(0) to (state.lastPositionUpdateTime.takeIf { it > 0 } ?: now)
|
||||
}
|
||||
|
||||
// Resend state only on drift
|
||||
private fun syncWatchClock() {
|
||||
if (trackId == 0L) return
|
||||
val (position, time) = reference()
|
||||
val believed = if (sentPlaying) sentPosition + (time - sentTime) else sentPosition
|
||||
if (sentPosition < 0 || sentPlaying != playing || abs(believed - position) > DRIFT_TOLERANCE_MS) {
|
||||
sendState()
|
||||
}
|
||||
}
|
||||
|
||||
private fun sendTrack() {
|
||||
if (trackId == 0L) return
|
||||
val id = trackId
|
||||
queue.removeAll { it.kind == WatchProtocol.CMD_TRACK }
|
||||
enqueue(Outgoing(WatchProtocol.CMD_TRACK, id) {
|
||||
WatchProtocol.track(
|
||||
trackId = id,
|
||||
title = title,
|
||||
artist = artist,
|
||||
durationMs = durationMs,
|
||||
status = status,
|
||||
lineCount = lines.size,
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
private fun sendLines() {
|
||||
if (lines.isEmpty()) return
|
||||
val id = trackId
|
||||
queue.removeAll { it.kind == WatchProtocol.CMD_LINES }
|
||||
val budget = (inboxSize - 64).coerceIn(256, 2000)
|
||||
for ((first, blob) in WatchProtocol.chunks(lines, budget)) {
|
||||
enqueue(Outgoing(WatchProtocol.CMD_LINES, id) { WatchProtocol.lines(id, first, blob) })
|
||||
}
|
||||
}
|
||||
|
||||
private fun sendState() {
|
||||
if (trackId == 0L) return
|
||||
queue.removeAll { it.kind == WatchProtocol.CMD_STATE }
|
||||
val id = trackId
|
||||
// Built at send time for freshness
|
||||
enqueue(Outgoing(WatchProtocol.CMD_STATE, id) {
|
||||
val (position, time) = reference()
|
||||
sentPosition = position
|
||||
sentTime = time
|
||||
sentPlaying = playing
|
||||
WatchProtocol.state(id, playing, position, time)
|
||||
})
|
||||
}
|
||||
|
||||
private fun enqueue(item: Outgoing, first: Boolean = false) {
|
||||
if (first) queue.addFirst(item) else queue.addLast(item)
|
||||
pump()
|
||||
}
|
||||
|
||||
private fun pump() {
|
||||
if (inFlight != null) return
|
||||
if (!watchReady) {
|
||||
queue.clear()
|
||||
return
|
||||
}
|
||||
// Drop stale tracks
|
||||
while (queue.firstOrNull()?.let { it.trackId != ANY_TRACK && it.trackId != trackId } == true) {
|
||||
queue.removeFirst()
|
||||
}
|
||||
val item = queue.removeFirstOrNull() ?: return
|
||||
inFlight = item
|
||||
item.attempts++
|
||||
scope.launch {
|
||||
val results = runCatching { sender.sendDataToPebble(WatchProtocol.APP_UUID, item.build()) }
|
||||
.onFailure { Log.w(BuildConfig.TAG, "Pebble send failed", it) }
|
||||
.getOrNull()
|
||||
onSent(item, results?.values.orEmpty())
|
||||
}
|
||||
}
|
||||
|
||||
private fun onSent(item: Outgoing, results: Collection<TransmissionResult>) {
|
||||
inFlight = null
|
||||
when {
|
||||
results.any { it == TransmissionResult.Success } -> {
|
||||
watchConfirmed = true
|
||||
pump()
|
||||
}
|
||||
|
||||
results.any { it == TransmissionResult.FailedWatchNacked || it == TransmissionResult.FailedTimeout } -> {
|
||||
if (item.attempts < 3) {
|
||||
queue.addFirst(item)
|
||||
} else if (item.kind == WatchProtocol.CMD_STATE) {
|
||||
sentPosition = -1
|
||||
}
|
||||
main.postDelayed({ pump() }, 150)
|
||||
}
|
||||
|
||||
else -> {
|
||||
// Watchapp not open, wait for it
|
||||
if (item.kind == WatchProtocol.CMD_STATE) sentPosition = -1
|
||||
watchReady = false
|
||||
watchConfirmed = false
|
||||
queue.clear()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun onWatchappOpened() {
|
||||
watchConfirmed = true
|
||||
watchReady = true
|
||||
}
|
||||
|
||||
fun onWatchappClosed() {
|
||||
watchConfirmed = false
|
||||
watchReady = false
|
||||
queue.clear()
|
||||
}
|
||||
|
||||
fun onWatchMessage(values: Map<Int, Long>, receivedAt: Long) {
|
||||
watchConfirmed = true
|
||||
watchReady = true
|
||||
when (values[WatchProtocol.KEY_CMD]?.toInt()) {
|
||||
WatchProtocol.CMD_SYNC_REQ -> {
|
||||
val watchTime = values[WatchProtocol.KEY_WATCH_TIME] ?: return
|
||||
// Front of queue, stamped at send
|
||||
enqueue(Outgoing(WatchProtocol.CMD_SYNC, ANY_TRACK) {
|
||||
WatchProtocol.sync(watchTime, receivedAt, SystemClock.elapsedRealtime())
|
||||
}, first = true)
|
||||
}
|
||||
|
||||
WatchProtocol.CMD_SETTINGS -> {
|
||||
values[WatchProtocol.KEY_SET_AUTO_OPEN]?.let { autoOpen = it != 0L }
|
||||
}
|
||||
|
||||
WatchProtocol.CMD_HELLO -> {
|
||||
values[WatchProtocol.KEY_SET_AUTO_OPEN]?.let { autoOpen = it != 0L }
|
||||
values[WatchProtocol.KEY_INBOX_SIZE]?.let { inboxSize = it.toInt().coerceIn(256, 8192) }
|
||||
queue.removeAll { it.kind != WatchProtocol.CMD_SYNC }
|
||||
sentPosition = -1
|
||||
if (trackId != 0L) {
|
||||
sendTrack()
|
||||
sendLines()
|
||||
sendState()
|
||||
} else {
|
||||
enqueue(Outgoing(WatchProtocol.CMD_STATUS, ANY_TRACK) {
|
||||
WatchProtocol.status(0, WatchProtocol.STATUS_IDLE)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
WatchProtocol.CMD_PLAY_PAUSE -> controller?.transportControls?.let {
|
||||
if (playing) it.pause() else it.play()
|
||||
}
|
||||
|
||||
WatchProtocol.CMD_NEXT -> controller?.transportControls?.skipToNext()
|
||||
WatchProtocol.CMD_PREV -> controller?.transportControls?.skipToPrevious()
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
// Keep in sync with radiant.PebbleBridge
|
||||
const val MSG_SESSION = 1
|
||||
const val MSG_POSITION = 2
|
||||
const val MSG_LYRICS = 3
|
||||
|
||||
// Used by PebbleWatchListenerService
|
||||
@Volatile
|
||||
var current: PebbleRelayService? = null
|
||||
private set
|
||||
|
||||
private const val ANY_TRACK = -1L
|
||||
private const val PREF_AUTO_OPEN = "auto_open"
|
||||
private const val DRIFT_TOLERANCE_MS = 10L
|
||||
private const val SAMPLE_STALE_MS = 8_000L
|
||||
private const val LYRICS_TIMEOUT_MS = 90_000L
|
||||
}
|
||||
}
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
package com.meowarex.rlmobile.pebble
|
||||
|
||||
import android.os.SystemClock
|
||||
import io.rebble.pebblekit2.client.BasePebbleListenerService
|
||||
import io.rebble.pebblekit2.common.model.PebbleDictionary
|
||||
import io.rebble.pebblekit2.common.model.ReceiveResult
|
||||
import io.rebble.pebblekit2.common.model.WatchIdentifier
|
||||
import java.util.UUID
|
||||
|
||||
// Forwards watch events to the relay
|
||||
class PebbleWatchListenerService : BasePebbleListenerService() {
|
||||
override suspend fun onMessageReceived(
|
||||
watchappUUID: UUID,
|
||||
data: PebbleDictionary,
|
||||
watch: WatchIdentifier,
|
||||
): ReceiveResult {
|
||||
val receivedAt = SystemClock.elapsedRealtime()
|
||||
if (watchappUUID != WatchProtocol.APP_UUID) return ReceiveResult.Nack
|
||||
PebbleRelayService.current?.onWatchMessage(WatchProtocol.ints(data), receivedAt)
|
||||
return ReceiveResult.Ack
|
||||
}
|
||||
|
||||
override fun onAppOpened(watchappUUID: UUID, watch: WatchIdentifier) {
|
||||
if (watchappUUID != WatchProtocol.APP_UUID) return
|
||||
watchappOpen = true
|
||||
PebbleRelayService.current?.onWatchappOpened()
|
||||
}
|
||||
|
||||
override fun onAppClosed(watchappUUID: UUID, watch: WatchIdentifier) {
|
||||
if (watchappUUID != WatchProtocol.APP_UUID) return
|
||||
watchappOpen = false
|
||||
PebbleRelayService.current?.onWatchappClosed()
|
||||
}
|
||||
|
||||
companion object {
|
||||
@Volatile
|
||||
var watchappOpen = false
|
||||
private set
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
package com.meowarex.rlmobile.pebble
|
||||
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import com.meowarex.rlmobile.R
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.CompanionAppSpec
|
||||
import com.meowarex.rlmobile.util.showToast
|
||||
import io.rebble.pebblekit2.client.DefaultPebbleSender
|
||||
import io.rebble.pebblekit2.common.model.TimelineResult
|
||||
|
||||
// Watchapp install state and store links
|
||||
object PebbleWatchapp {
|
||||
private const val PROBE_PIN_ID = "rl-install-probe"
|
||||
private const val STORE_WEB = "https://apps.repebble.com/"
|
||||
private const val APPS_TAB = "pebble://navbar/index"
|
||||
|
||||
enum class InstallState { Installed, NotInstalled, Unknown }
|
||||
|
||||
// Deleting a missing pin reveals install state
|
||||
suspend fun installState(context: Context): InstallState = runCatching {
|
||||
DefaultPebbleSender(context.applicationContext).use { sender ->
|
||||
when (sender.deleteTimelinePin(WatchProtocol.APP_UUID, PROBE_PIN_ID)) {
|
||||
TimelineResult.FailedUnknownPin, TimelineResult.Success -> InstallState.Installed
|
||||
TimelineResult.FailedNoPermissions -> InstallState.NotInstalled
|
||||
else -> InstallState.Unknown
|
||||
}
|
||||
}
|
||||
}.getOrDefault(InstallState.Unknown)
|
||||
|
||||
fun canInstall(app: CompanionAppSpec): Boolean = !app.storeId.isNullOrBlank()
|
||||
|
||||
fun install(context: Context, app: CompanionAppSpec) = openStorePage(context, app)
|
||||
|
||||
// Apps tab, My Apps holds the settings
|
||||
fun openSettings(context: Context) {
|
||||
if (!start(context, Intent(Intent.ACTION_VIEW, Uri.parse(APPS_TAB)))) {
|
||||
context.showToast(R.string.pebble_app_missing)
|
||||
}
|
||||
}
|
||||
|
||||
// Pebble app store page, else the web listing
|
||||
private fun openStorePage(context: Context, app: CompanionAppSpec) {
|
||||
val storeId = app.storeId?.takeIf { it.isNotBlank() } ?: return
|
||||
val deepLink = Uri.Builder().scheme("pebble").authority("appstore").appendPath(storeId)
|
||||
.apply { app.storeSource?.let { appendQueryParameter("source", it) } }
|
||||
.build()
|
||||
if (start(context, Intent(Intent.ACTION_VIEW, deepLink))) return
|
||||
if (!start(context, Intent(Intent.ACTION_VIEW, Uri.parse(STORE_WEB + storeId)))) {
|
||||
context.showToast(R.string.pebble_app_missing)
|
||||
}
|
||||
}
|
||||
|
||||
private fun start(context: Context, intent: Intent): Boolean = try {
|
||||
context.startActivity(intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK))
|
||||
true
|
||||
} catch (_: ActivityNotFoundException) {
|
||||
false
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,265 @@
|
||||
package com.meowarex.rlmobile.pebble
|
||||
|
||||
import io.rebble.pebblekit2.common.model.PebbleDictionary
|
||||
import io.rebble.pebblekit2.common.model.PebbleDictionaryItem
|
||||
import org.json.JSONArray
|
||||
import org.json.JSONObject
|
||||
import java.io.ByteArrayOutputStream
|
||||
import java.util.UUID
|
||||
import kotlin.math.roundToLong
|
||||
|
||||
// Mirrors rl-pebble main.c and emu_driver.py
|
||||
object WatchProtocol {
|
||||
val APP_UUID: UUID = UUID.fromString("79d7fe6a-b970-483a-b096-16da10af0433")
|
||||
|
||||
// package.json messageKeys order
|
||||
const val KEY_CMD = 10000
|
||||
const val KEY_TRACK_ID = 10001
|
||||
const val KEY_TITLE = 10002
|
||||
const val KEY_ARTIST = 10003
|
||||
const val KEY_DURATION = 10004
|
||||
const val KEY_STATUS = 10005
|
||||
const val KEY_LINE_COUNT = 10006
|
||||
const val KEY_CHUNK_INDEX = 10007
|
||||
const val KEY_CHUNK = 10008
|
||||
const val KEY_PLAYING = 10009
|
||||
const val KEY_POSITION = 10010
|
||||
const val KEY_INBOX_SIZE = 10011
|
||||
const val KEY_PHONE_TIME = 10012
|
||||
const val KEY_WATCH_TIME = 10013
|
||||
const val KEY_PHONE_TIME_2 = 10014
|
||||
const val KEY_SET_AUTO_OPEN = 10021
|
||||
|
||||
const val CMD_TRACK = 1
|
||||
const val CMD_LINES = 2
|
||||
const val CMD_STATE = 3
|
||||
const val CMD_STATUS = 4
|
||||
const val CMD_SYNC = 5
|
||||
const val CMD_HELLO = 20
|
||||
const val CMD_PLAY_PAUSE = 21
|
||||
const val CMD_NEXT = 22
|
||||
const val CMD_PREV = 23
|
||||
const val CMD_SYNC_REQ = 24
|
||||
const val CMD_SETTINGS = 25
|
||||
|
||||
const val STATUS_IDLE = 0
|
||||
const val STATUS_LOADING = 1
|
||||
const val STATUS_READY = 2
|
||||
const val STATUS_NO_LYRICS = 3
|
||||
const val STATUS_ERROR = 4
|
||||
|
||||
private const val SEG_BG = 1 shl 0
|
||||
private const val SEG_SPACE = 1 shl 1
|
||||
private const val LINE_RIGHT = 1 shl 0
|
||||
|
||||
private val WHITESPACE = Regex("\\s+")
|
||||
private const val HOLD_FOREVER = Int.MAX_VALUE.toLong()
|
||||
private const val LINE_ONLY_MS = 800L
|
||||
private const val MAX_SEGMENTS = 120
|
||||
|
||||
class Segment(val time: Long, val duration: Long, val flags: Int, val text: String)
|
||||
|
||||
// end is when the line stops being lit
|
||||
class Line(val start: Long, val end: Long, val segments: List<Segment>, val right: Boolean)
|
||||
|
||||
// Syllable level lines, lit until the next lead line.
|
||||
fun shape(body: String): List<Line> {
|
||||
val root = JSONObject(body)
|
||||
val data = root.optJSONArray("data") ?: return emptyList()
|
||||
val sides = singerSides(root, data)
|
||||
|
||||
class Raw(val start: Long, val end: Long, val allBackground: Boolean, val segments: List<Segment>, val right: Boolean)
|
||||
|
||||
val raws = ArrayList<Raw>(data.length())
|
||||
for (i in 0 until data.length()) {
|
||||
val item = data.optJSONObject(i) ?: continue
|
||||
val syllabus = item.optJSONArray("syllabus")?.takeIf { it.length() > 0 }
|
||||
|
||||
val segments = ArrayList<Segment>()
|
||||
val start: Long
|
||||
val end: Long
|
||||
var allBackground = false
|
||||
if (syllabus != null) {
|
||||
val first = syllabus.optJSONObject(0)
|
||||
val last = syllabus.optJSONObject(syllabus.length() - 1)
|
||||
start = first?.optLong("time") ?: 0
|
||||
end = (last?.optLong("time") ?: 0) + (last?.optLong("duration") ?: 0)
|
||||
allBackground = (0 until syllabus.length()).all {
|
||||
syllabus.optJSONObject(it)?.optBoolean("isBackground") == true
|
||||
}
|
||||
for (j in 0 until syllabus.length()) {
|
||||
val syllable = syllabus.optJSONObject(j) ?: continue
|
||||
val raw = text(syllable)
|
||||
val trimmed = raw.trim()
|
||||
if (trimmed.isEmpty()) continue
|
||||
var flags = if (syllable.optBoolean("isBackground")) SEG_BG else 0
|
||||
if (raw != raw.trimEnd()) flags = flags or SEG_SPACE
|
||||
segments += Segment(syllable.optLong("time"), syllable.optLong("duration"), flags, trimmed)
|
||||
}
|
||||
} else {
|
||||
// Line timed only, one segment per word
|
||||
start = (item.optDouble("startTime", 0.0) * 1000).roundToLong()
|
||||
end = start + LINE_ONLY_MS
|
||||
val words = text(item).split(WHITESPACE).filter { it.isNotEmpty() }
|
||||
words.forEachIndexed { index, word ->
|
||||
segments += Segment(start, 0, if (index < words.lastIndex) SEG_SPACE else 0, word)
|
||||
}
|
||||
}
|
||||
if (segments.isEmpty()) continue
|
||||
raws += Raw(start, end, allBackground, segments.take(MAX_SEGMENTS), sides?.get(i) == 1)
|
||||
}
|
||||
|
||||
return raws.mapIndexed { index, raw ->
|
||||
val nextLead = (index + 1 until raws.size).firstOrNull { !raws[it].allBackground }?.let { raws[it].start }
|
||||
Line(raw.start, (nextLead ?: HOLD_FOREVER).coerceAtLeast(raw.end), raw.segments, raw.right)
|
||||
}
|
||||
}
|
||||
|
||||
// RL Mobile duet sides, null for one side.
|
||||
private fun singerSides(root: JSONObject, data: JSONArray): IntArray? {
|
||||
val agents = root.optJSONObject("metadata")?.optJSONObject("agents")
|
||||
fun singerOf(i: Int) = data.optJSONObject(i)?.optJSONObject("element")?.optString("singer")?.takeIf { it.isNotEmpty() }
|
||||
fun typeOf(singer: String): String = agents?.optJSONObject(singer)?.optString("type", "person")
|
||||
?: when (singer) {
|
||||
"v1000" -> "group"
|
||||
"v2000" -> "other"
|
||||
else -> "person"
|
||||
}
|
||||
|
||||
// Groups left, second person right
|
||||
val sideOf = HashMap<String, Int>()
|
||||
var persons = 0
|
||||
for (i in 0 until data.length()) {
|
||||
val singer = singerOf(i) ?: continue
|
||||
if (singer in sideOf) continue
|
||||
sideOf[singer] = if (typeOf(singer) != "person") 0 else if (++persons == 2) 1 else 0
|
||||
}
|
||||
|
||||
val sides = IntArray(data.length()) { i -> singerOf(i)?.let { sideOf[it] ?: 0 } ?: -1 }
|
||||
val sided = sides.count { it >= 0 }
|
||||
val right = sides.count { it == 1 }
|
||||
// Nearly all right, swap
|
||||
if (sided > 0 && right * 100 / sided >= 85) {
|
||||
for (i in sides.indices) if (sides[i] >= 0) sides[i] = 1 - sides[i]
|
||||
}
|
||||
return if (sides.any { it == 0 } && sides.any { it == 1 }) sides else null
|
||||
}
|
||||
|
||||
private fun text(obj: JSONObject): String =
|
||||
obj.optString("romanized").takeIf { it.isNotBlank() } ?: obj.optString("text")
|
||||
|
||||
private fun encodeLine(line: Line): ByteArray {
|
||||
val out = ByteArrayOutputStream()
|
||||
out.u32(line.start)
|
||||
out.u32(line.end)
|
||||
out.write(line.segments.size)
|
||||
out.write(if (line.right) LINE_RIGHT else 0)
|
||||
for (segment in line.segments) {
|
||||
val text = utf8Truncate(segment.text, 255)
|
||||
out.u16((segment.time - line.start).coerceIn(0, 65535))
|
||||
out.u16(segment.duration.coerceIn(0, 65535))
|
||||
out.write(segment.flags)
|
||||
out.write(text.size)
|
||||
out.write(text)
|
||||
}
|
||||
return out.toByteArray()
|
||||
}
|
||||
|
||||
// Whole lines per chunk, keyed by first index.
|
||||
fun chunks(lines: List<Line>, budget: Int): List<Pair<Int, ByteArray>> {
|
||||
val result = ArrayList<Pair<Int, ByteArray>>()
|
||||
val buf = ByteArrayOutputStream()
|
||||
var first = 0
|
||||
lines.forEachIndexed { index, line ->
|
||||
val encoded = encodeLine(line)
|
||||
if (buf.size() > 0 && buf.size() + encoded.size > budget) {
|
||||
result += first to buf.toByteArray()
|
||||
buf.reset()
|
||||
first = index
|
||||
}
|
||||
buf.write(encoded)
|
||||
}
|
||||
if (buf.size() > 0) result += first to buf.toByteArray()
|
||||
return result
|
||||
}
|
||||
|
||||
fun track(trackId: Long, title: String, artist: String, durationMs: Long, status: Int, lineCount: Int): PebbleDictionary =
|
||||
mapOf(
|
||||
key(KEY_CMD) to PebbleDictionaryItem.UInt8(CMD_TRACK),
|
||||
key(KEY_TRACK_ID) to PebbleDictionaryItem.UInt32(trackId),
|
||||
key(KEY_TITLE) to PebbleDictionaryItem.Text(String(utf8Truncate(title, 60))),
|
||||
key(KEY_ARTIST) to PebbleDictionaryItem.Text(String(utf8Truncate(artist, 60))),
|
||||
key(KEY_DURATION) to PebbleDictionaryItem.UInt32(durationMs.coerceIn(0, 0xFFFFFFFFL)),
|
||||
key(KEY_STATUS) to PebbleDictionaryItem.UInt8(status),
|
||||
key(KEY_LINE_COUNT) to PebbleDictionaryItem.UInt16(lineCount),
|
||||
)
|
||||
|
||||
fun lines(trackId: Long, firstIndex: Int, blob: ByteArray): PebbleDictionary = mapOf(
|
||||
key(KEY_CMD) to PebbleDictionaryItem.UInt8(CMD_LINES),
|
||||
key(KEY_TRACK_ID) to PebbleDictionaryItem.UInt32(trackId),
|
||||
key(KEY_CHUNK_INDEX) to PebbleDictionaryItem.UInt16(firstIndex),
|
||||
key(KEY_CHUNK) to PebbleDictionaryItem.Bytes(blob),
|
||||
)
|
||||
|
||||
// Position at a phone elapsedRealtime.
|
||||
fun state(trackId: Long, playing: Boolean, positionMs: Long, phoneTimeMs: Long): PebbleDictionary = mapOf(
|
||||
key(KEY_CMD) to PebbleDictionaryItem.UInt8(CMD_STATE),
|
||||
key(KEY_TRACK_ID) to PebbleDictionaryItem.UInt32(trackId),
|
||||
key(KEY_PLAYING) to PebbleDictionaryItem.UInt8(if (playing) 1 else 0),
|
||||
key(KEY_POSITION) to PebbleDictionaryItem.Int32(positionMs.coerceIn(0, Int.MAX_VALUE.toLong()).toInt()),
|
||||
key(KEY_PHONE_TIME) to PebbleDictionaryItem.UInt32(phoneTimeMs and 0xFFFFFFFFL),
|
||||
)
|
||||
|
||||
fun sync(watchTime: Long, receivedAt: Long, sentAt: Long): PebbleDictionary = mapOf(
|
||||
key(KEY_CMD) to PebbleDictionaryItem.UInt8(CMD_SYNC),
|
||||
key(KEY_WATCH_TIME) to PebbleDictionaryItem.UInt32(watchTime and 0xFFFFFFFFL),
|
||||
key(KEY_PHONE_TIME) to PebbleDictionaryItem.UInt32(receivedAt and 0xFFFFFFFFL),
|
||||
key(KEY_PHONE_TIME_2) to PebbleDictionaryItem.UInt32(sentAt and 0xFFFFFFFFL),
|
||||
)
|
||||
|
||||
fun status(trackId: Long, status: Int): PebbleDictionary = mapOf(
|
||||
key(KEY_CMD) to PebbleDictionaryItem.UInt8(CMD_STATUS),
|
||||
key(KEY_TRACK_ID) to PebbleDictionaryItem.UInt32(trackId),
|
||||
key(KEY_STATUS) to PebbleDictionaryItem.UInt8(status),
|
||||
)
|
||||
|
||||
// Integer tuples from the watch.
|
||||
fun ints(data: PebbleDictionary): Map<Int, Long> = buildMap {
|
||||
for ((k, item) in data) {
|
||||
val value = when (item) {
|
||||
is PebbleDictionaryItem.UInt32 -> item.value.toLong()
|
||||
is PebbleDictionaryItem.Int32 -> item.value.toLong()
|
||||
is PebbleDictionaryItem.UInt16 -> item.value.toLong()
|
||||
is PebbleDictionaryItem.Int16 -> item.value.toLong()
|
||||
is PebbleDictionaryItem.UInt8 -> item.value.toLong()
|
||||
is PebbleDictionaryItem.Int8 -> item.value.toLong()
|
||||
else -> continue
|
||||
}
|
||||
put(k.toInt(), value)
|
||||
}
|
||||
}
|
||||
|
||||
private fun key(key: Int) = key.toUInt()
|
||||
|
||||
private fun utf8Truncate(text: String, limit: Int): ByteArray {
|
||||
val raw = text.toByteArray(Charsets.UTF_8)
|
||||
if (raw.size <= limit) return raw
|
||||
var end = limit
|
||||
// Don't split a code point
|
||||
while (end > 0 && (raw[end].toInt() and 0xC0) == 0x80) end--
|
||||
return raw.copyOf(end)
|
||||
}
|
||||
|
||||
private fun ByteArrayOutputStream.u16(value: Long) {
|
||||
write((value and 0xFF).toInt())
|
||||
write(((value shr 8) and 0xFF).toInt())
|
||||
}
|
||||
|
||||
private fun ByteArrayOutputStream.u32(value: Long) {
|
||||
val v = value.coerceIn(0, 0xFFFFFFFFL)
|
||||
write((v and 0xFF).toInt())
|
||||
write(((v shr 8) and 0xFF).toInt())
|
||||
write(((v shr 16) and 0xFF).toInt())
|
||||
write(((v shr 24) and 0xFF).toInt())
|
||||
}
|
||||
}
|
||||
+182
-77
@@ -3,26 +3,49 @@ package com.meowarex.rlmobile.ui.components.radiant
|
||||
import androidx.compose.animation.animateColorAsState
|
||||
import androidx.compose.animation.core.animateDpAsState
|
||||
import androidx.compose.animation.core.animateFloatAsState
|
||||
import androidx.compose.animation.core.FastOutSlowInEasing
|
||||
import androidx.compose.animation.core.MutableTransitionState
|
||||
import androidx.compose.animation.core.animateFloat
|
||||
import androidx.compose.animation.core.rememberTransition
|
||||
import androidx.compose.animation.core.tween
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.border
|
||||
import androidx.compose.foundation.BorderStroke
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||
import androidx.compose.foundation.interaction.collectIsFocusedAsState
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.foundation.text.BasicTextField
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material3.*
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.alpha
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.draw.rotate
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.graphicsLayer
|
||||
import androidx.compose.ui.layout.onSizeChanged
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.semantics.Role
|
||||
import androidx.compose.ui.semantics.role
|
||||
import androidx.compose.ui.semantics.selected
|
||||
import androidx.compose.ui.semantics.semantics
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.DpOffset
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.Popup
|
||||
import androidx.compose.ui.window.PopupProperties
|
||||
import com.meowarex.rlmobile.R
|
||||
import com.meowarex.rlmobile.ui.theme.*
|
||||
|
||||
/**
|
||||
@@ -114,7 +137,152 @@ fun RadiantTextField(
|
||||
}
|
||||
|
||||
/**
|
||||
* Slider with a gradient and glow.
|
||||
* Dropdown
|
||||
*/
|
||||
@Composable
|
||||
fun RadiantDropdown(
|
||||
options: List<String>,
|
||||
selectedIndex: Int,
|
||||
onSelect: (Int) -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
enabled: Boolean = true,
|
||||
disabledIndices: Set<Int> = emptySet(),
|
||||
) {
|
||||
var expanded by rememberSaveable { mutableStateOf(false) }
|
||||
val visibilityState = remember { MutableTransitionState(false) }
|
||||
visibilityState.targetState = expanded
|
||||
val transition = rememberTransition(visibilityState, label = "Dropdown")
|
||||
val progress by transition.animateFloat(
|
||||
transitionSpec = { tween(durationMillis = 160, easing = FastOutSlowInEasing) },
|
||||
label = "DropdownProgress",
|
||||
) {
|
||||
if (it) 1f else 0f
|
||||
}
|
||||
val scheme = MaterialTheme.colorScheme
|
||||
val selectedLabel = options.getOrNull(selectedIndex).orEmpty()
|
||||
val shape = if (radiantStyle.native) MaterialTheme.shapes.extraSmall else RoundedCornerShape(16.dp)
|
||||
var anchorWidthPx by remember { mutableIntStateOf(0) }
|
||||
val anchorWidth = with(LocalDensity.current) { anchorWidthPx.toDp() }
|
||||
val positionProvider = MenuDefaults.rememberDropdownMenuPopupPositionProvider(
|
||||
dropdownMenuAnchorPosition = MenuAnchorPosition.Below,
|
||||
offset = DpOffset(0.dp, 6.dp),
|
||||
)
|
||||
Box(modifier = modifier.fillMaxWidth()) {
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
horizontalArrangement = Arrangement.spacedBy(12.dp),
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.onSizeChanged { anchorWidthPx = it.width }
|
||||
.background(scheme.surfaceContainerLowest.copy(alpha = 0.8f), shape)
|
||||
.then(
|
||||
if (radiantStyle.native) Modifier.border(1.dp, scheme.outline, shape)
|
||||
else Modifier.border(
|
||||
RadiantDesign.Hairline,
|
||||
hairlineBrush(scheme.onSurface, RadiantDesign.BORDER_ALPHA * 1.5f),
|
||||
shape,
|
||||
)
|
||||
)
|
||||
.clip(shape)
|
||||
.clickable(enabled = enabled, role = Role.Button) { expanded = !expanded }
|
||||
.alpha(if (enabled) 1f else 0.45f)
|
||||
.heightIn(min = 52.dp)
|
||||
.padding(horizontal = 16.dp, vertical = 10.dp),
|
||||
) {
|
||||
Text(
|
||||
text = selectedLabel,
|
||||
style = MaterialTheme.typography.bodyLarge,
|
||||
color = scheme.onSurface,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
modifier = Modifier.weight(1f),
|
||||
)
|
||||
Icon(
|
||||
painter = painterResource(R.drawable.ic_arrow_down_small),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.rotate(180f * progress),
|
||||
)
|
||||
}
|
||||
|
||||
if (
|
||||
anchorWidthPx > 0 &&
|
||||
(visibilityState.currentState || visibilityState.targetState || transition.isRunning)
|
||||
) {
|
||||
Popup(
|
||||
popupPositionProvider = positionProvider,
|
||||
onDismissRequest = { expanded = false },
|
||||
properties = PopupProperties(focusable = true),
|
||||
) {
|
||||
Surface(
|
||||
modifier = Modifier
|
||||
.width(anchorWidth)
|
||||
.graphicsLayer {
|
||||
alpha = progress
|
||||
scaleX = 0.92f + 0.08f * progress
|
||||
scaleY = 0.92f + 0.08f * progress
|
||||
transformOrigin = positionProvider.transformOrigin
|
||||
},
|
||||
shape = shape,
|
||||
color = scheme.surfaceContainer,
|
||||
tonalElevation = 0.dp,
|
||||
shadowElevation = 8.dp,
|
||||
border = BorderStroke(
|
||||
RadiantDesign.Hairline,
|
||||
scheme.onSurface.copy(alpha = RadiantDesign.BORDER_ALPHA * 2f),
|
||||
),
|
||||
) {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.heightIn(max = 320.dp)
|
||||
.verticalScroll(rememberScrollState())
|
||||
.padding(vertical = 6.dp),
|
||||
) {
|
||||
options.forEachIndexed { index, option ->
|
||||
val selected = index == selectedIndex
|
||||
val itemEnabled = enabled && index !in disabledIndices
|
||||
DropdownMenuItem(
|
||||
text = {
|
||||
Text(
|
||||
text = option,
|
||||
style = MaterialTheme.typography.bodyLarge,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
)
|
||||
},
|
||||
trailingIcon = {
|
||||
RadiantRadio(
|
||||
selected = selected,
|
||||
onClick = null,
|
||||
enabled = itemEnabled,
|
||||
)
|
||||
},
|
||||
enabled = itemEnabled,
|
||||
onClick = {
|
||||
onSelect(index)
|
||||
expanded = false
|
||||
},
|
||||
modifier = Modifier
|
||||
.padding(horizontal = 6.dp, vertical = 2.dp)
|
||||
.clip(RoundedCornerShape(12.dp))
|
||||
.semantics {
|
||||
this.selected = selected
|
||||
role = Role.RadioButton
|
||||
}
|
||||
.then(
|
||||
if (selected) Modifier.background(scheme.primary.copy(alpha = 0.1f))
|
||||
else Modifier
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Slider. (i prefer the old on tbh so i reverted it back <3)
|
||||
*/
|
||||
@Composable
|
||||
fun RadiantSlider(
|
||||
@@ -124,12 +292,10 @@ fun RadiantSlider(
|
||||
valueRange: ClosedFloatingPointRange<Float> = 0f..1f,
|
||||
steps: Int = 0,
|
||||
enabled: Boolean = true,
|
||||
showStopIndicator: Boolean = true,
|
||||
onValueChangeFinished: (() -> Unit)? = null,
|
||||
) {
|
||||
val scheme = MaterialTheme.colorScheme
|
||||
val interaction = remember(::MutableInteractionSource)
|
||||
|
||||
if (radiantStyle.native) {
|
||||
if (showStopIndicator) {
|
||||
Slider(
|
||||
value = value,
|
||||
onValueChange = onValueChange,
|
||||
@@ -139,9 +305,7 @@ fun RadiantSlider(
|
||||
enabled = enabled,
|
||||
modifier = modifier,
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
} else {
|
||||
Slider(
|
||||
value = value,
|
||||
onValueChange = onValueChange,
|
||||
@@ -149,41 +313,10 @@ fun RadiantSlider(
|
||||
valueRange = valueRange,
|
||||
steps = steps,
|
||||
enabled = enabled,
|
||||
interactionSource = interaction,
|
||||
modifier = modifier,
|
||||
track = { state ->
|
||||
val fraction = if (valueRange.endInclusive > valueRange.start) {
|
||||
((state.value - valueRange.start) / (valueRange.endInclusive - valueRange.start))
|
||||
.coerceIn(0f, 1f)
|
||||
} else 0f
|
||||
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.height(6.dp)
|
||||
.clip(CircleShape)
|
||||
.background(scheme.surfaceContainerHighest),
|
||||
) {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth(fraction)
|
||||
.fillMaxHeight()
|
||||
.clip(CircleShape)
|
||||
.background(accentBrush),
|
||||
track = { SliderDefaults.Track(sliderState = it, drawStopIndicator = null) },
|
||||
)
|
||||
}
|
||||
},
|
||||
thumb = {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.glow(scheme.primary, 10.dp, CircleShape, alpha = 0.6f)
|
||||
.size(20.dp)
|
||||
.clip(CircleShape)
|
||||
.background(scheme.onPrimary, CircleShape)
|
||||
.border(3.dp, scheme.primary, CircleShape),
|
||||
)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -196,6 +329,7 @@ fun RadiantSegmented(
|
||||
onSelect: (Int) -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
enabled: Boolean = true,
|
||||
disabledIndices: Set<Int> = emptySet(),
|
||||
) {
|
||||
if (radiantStyle.native) {
|
||||
SingleChoiceSegmentedButtonRow(modifier = modifier.fillMaxWidth()) {
|
||||
@@ -203,7 +337,7 @@ fun RadiantSegmented(
|
||||
SegmentedButton(
|
||||
selected = index == selectedIndex,
|
||||
onClick = { onSelect(index) },
|
||||
enabled = enabled,
|
||||
enabled = enabled && index !in disabledIndices,
|
||||
shape = SegmentedButtonDefaults.itemShape(index = index, count = options.size),
|
||||
icon = {},
|
||||
label = { Text(text = label, maxLines = 1) },
|
||||
@@ -231,6 +365,7 @@ fun RadiantSegmented(
|
||||
) {
|
||||
options.forEachIndexed { index, label ->
|
||||
val selected = index == selectedIndex
|
||||
val segmentEnabled = enabled && index !in disabledIndices
|
||||
val pillShape = RoundedCornerShape(13.dp)
|
||||
val alpha by animateFloatAsState(
|
||||
targetValue = if (selected) 1f else 0f,
|
||||
@@ -253,7 +388,7 @@ fun RadiantSegmented(
|
||||
} else Modifier
|
||||
)
|
||||
.clickable(
|
||||
enabled = enabled,
|
||||
enabled = segmentEnabled,
|
||||
role = Role.RadioButton,
|
||||
onClick = { onSelect(index) },
|
||||
),
|
||||
@@ -261,7 +396,11 @@ fun RadiantSegmented(
|
||||
Text(
|
||||
text = label,
|
||||
style = MaterialTheme.typography.labelLarge,
|
||||
color = if (selected) scheme.onPrimary else scheme.onSurfaceVariant,
|
||||
color = when {
|
||||
selected -> scheme.onPrimary
|
||||
segmentEnabled -> scheme.onSurfaceVariant
|
||||
else -> scheme.onSurface.copy(alpha = 0.38f)
|
||||
},
|
||||
maxLines = 1,
|
||||
)
|
||||
}
|
||||
@@ -270,37 +409,3 @@ fun RadiantSegmented(
|
||||
}
|
||||
|
||||
/** something.. */
|
||||
@Composable
|
||||
fun RadiantLabeledSlider(
|
||||
label: String,
|
||||
value: Float,
|
||||
onValueChange: (Float) -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
valueRange: ClosedFloatingPointRange<Float> = 0f..1f,
|
||||
steps: Int = 0,
|
||||
trailingText: String? = null,
|
||||
) {
|
||||
Column(modifier = modifier.fillMaxWidth()) {
|
||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||
Text(
|
||||
text = label,
|
||||
style = MaterialTheme.typography.labelLarge,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
modifier = Modifier.weight(1f),
|
||||
)
|
||||
if (trailingText != null) {
|
||||
Text(
|
||||
text = trailingText,
|
||||
style = MaterialTheme.typography.labelLarge,
|
||||
color = MaterialTheme.colorScheme.primary,
|
||||
)
|
||||
}
|
||||
}
|
||||
RadiantSlider(
|
||||
value = value,
|
||||
onValueChange = onValueChange,
|
||||
valueRange = valueRange,
|
||||
steps = steps,
|
||||
)
|
||||
}
|
||||
}
|
||||
+13
-1
@@ -15,6 +15,7 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.asImageBitmap
|
||||
import androidx.compose.ui.graphics.graphicsLayer
|
||||
import androidx.compose.ui.graphics.painter.BitmapPainter
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
@@ -57,6 +58,8 @@ class HomeScreen : Screen, Parcelable {
|
||||
val activity = LocalContext.current as ComponentActivity
|
||||
val updater = koinViewModel<UpdaterViewModel>(viewModelStoreOwner = activity)
|
||||
val managerUpdateAvailable = updater.targetVersion != null
|
||||
val refreshing = model.refreshing
|
||||
val refreshAngle = rememberRefreshAngle()
|
||||
|
||||
LifecycleResumeEffect(Unit) {
|
||||
model.refresh(delay = true)
|
||||
@@ -68,10 +71,19 @@ class HomeScreen : Screen, Parcelable {
|
||||
TopAppBar(
|
||||
title = { Text(stringResource(R.string.navigation_home)) },
|
||||
actions = {
|
||||
IconButton(onClick = { model.refresh() }) {
|
||||
IconButton(
|
||||
onClick = {
|
||||
model.refresh(force = true)
|
||||
updater.checkForUpdates(force = true)
|
||||
},
|
||||
enabled = !refreshing,
|
||||
) {
|
||||
Icon(
|
||||
painterResource(R.drawable.ic_refresh),
|
||||
contentDescription = stringResource(R.string.navigation_refresh),
|
||||
modifier = Modifier.graphicsLayer {
|
||||
rotationZ = if (refreshing) refreshAngle() else 0f
|
||||
},
|
||||
)
|
||||
}
|
||||
if (managerUpdateAvailable) {
|
||||
|
||||
+67
-39
@@ -33,10 +33,13 @@ import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.meowarex.rlmobile.R
|
||||
import com.meowarex.rlmobile.ui.components.radiant.RadiantDropdown
|
||||
import com.meowarex.rlmobile.ui.legacy.components.ResetToDefaultButton
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.OptionLock
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.OptionSpec
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.PatchOptionState
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.hiddenForVariant
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.isInline
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.optionLock
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.PatchSpec
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -102,13 +105,15 @@ fun PatchAdvancedOptionsSheet(
|
||||
|
||||
val parentKeys = patch.advancedOptions
|
||||
.filterIsInstance<OptionSpec.Toggle>()
|
||||
.filter { !it.inline }
|
||||
.filter { !it.isInline }
|
||||
.map { it.key }
|
||||
.toSet()
|
||||
val sheetOptions = patch.advancedOptions.filter { option ->
|
||||
when {
|
||||
option is OptionSpec.Toggle && option.inline -> false
|
||||
option.isInline -> false
|
||||
option is OptionSpec.Toggle && option.requiresOption in parentKeys -> false
|
||||
// Options belonging to another variant are hidden, not greyed out.
|
||||
option.hiddenForVariant(selectedVariant) -> false
|
||||
else -> true
|
||||
}
|
||||
}
|
||||
@@ -118,7 +123,7 @@ fun PatchAdvancedOptionsSheet(
|
||||
is OptionSpec.Toggle -> {
|
||||
val toggleOn = state.toggle(patch, option)
|
||||
val gatedChoices = patch.advancedOptions.filterIsInstance<OptionSpec.Choice>()
|
||||
.filter { it.requiresOption == option.key }
|
||||
.filter { it.requiresOption == option.key && !it.isInline }
|
||||
val gatedToggles = patch.advancedOptions.filterIsInstance<OptionSpec.Toggle>()
|
||||
.filter { it.requiresOption == option.key && !it.inline }
|
||||
val hasSubOptions = gatedChoices.isNotEmpty() || gatedToggles.isNotEmpty()
|
||||
@@ -161,8 +166,14 @@ fun PatchAdvancedOptionsSheet(
|
||||
key(choice.key) {
|
||||
ChoiceOptionRow(
|
||||
title = choice.title,
|
||||
description = choice.description,
|
||||
entries = choice.entries,
|
||||
selectedIndex = state.choice(patch, choice),
|
||||
forceDropdown = choice.forceDropdown,
|
||||
disabledIndices = patch.conflictingChoices(choice)
|
||||
.map { state.choice(patch, it) }
|
||||
.filter { it != 0 }
|
||||
.toSet(),
|
||||
onSelect = { state.setChoice(patch, choice, it) },
|
||||
)
|
||||
}
|
||||
@@ -200,8 +211,14 @@ fun PatchAdvancedOptionsSheet(
|
||||
if (option.requiresOption == null) {
|
||||
ChoiceOptionRow(
|
||||
title = option.title,
|
||||
description = option.description,
|
||||
entries = option.entries,
|
||||
selectedIndex = state.choice(patch, option),
|
||||
forceDropdown = option.forceDropdown,
|
||||
disabledIndices = patch.conflictingChoices(option)
|
||||
.map { state.choice(patch, it) }
|
||||
.filter { it != 0 }
|
||||
.toSet(),
|
||||
onSelect = { state.setChoice(patch, option, it) },
|
||||
)
|
||||
}
|
||||
@@ -209,6 +226,7 @@ fun PatchAdvancedOptionsSheet(
|
||||
is OptionSpec.Color -> ColorOptionRow(
|
||||
title = option.title,
|
||||
color = state.color(patch, option),
|
||||
defaultColor = option.default,
|
||||
onColorChange = { state.setColor(patch, option, it) },
|
||||
)
|
||||
}
|
||||
@@ -373,57 +391,41 @@ private fun snapToNearestStep(
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun ChoiceOptionRow(
|
||||
internal fun ChoiceOptionRow(
|
||||
entries: List<String>,
|
||||
selectedIndex: Int,
|
||||
onSelect: (Int) -> Unit,
|
||||
title: String = "",
|
||||
description: String = "",
|
||||
forceDropdown: Boolean = false,
|
||||
disabledIndices: Set<Int> = emptySet(),
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
Column(
|
||||
modifier = modifier.fillMaxWidth(),
|
||||
verticalArrangement = Arrangement.spacedBy(6.dp),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
horizontalAlignment = Alignment.Start,
|
||||
) {
|
||||
if (title.isNotEmpty()) {
|
||||
Text(
|
||||
text = title,
|
||||
style = MaterialTheme.typography.labelMedium,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
textAlign = TextAlign.Center,
|
||||
style = MaterialTheme.typography.titleSmall,
|
||||
)
|
||||
}
|
||||
if (entries.size > 3) {
|
||||
var expanded by rememberSaveable { mutableStateOf(false) }
|
||||
val selectedLabel = entries.getOrNull(selectedIndex).orEmpty()
|
||||
|
||||
Box(modifier = Modifier.fillMaxWidth()) {
|
||||
OutlinedButton(
|
||||
onClick = { expanded = true },
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
) {
|
||||
if (description.isNotEmpty()) {
|
||||
Text(
|
||||
text = selectedLabel,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
text = description,
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
}
|
||||
DropdownMenu(
|
||||
expanded = expanded,
|
||||
onDismissRequest = { expanded = false },
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
) {
|
||||
entries.forEachIndexed { index, entry ->
|
||||
DropdownMenuItem(
|
||||
text = { Text(entry) },
|
||||
onClick = {
|
||||
onSelect(index)
|
||||
expanded = false
|
||||
},
|
||||
if (forceDropdown || entries.size > 3) {
|
||||
RadiantDropdown(
|
||||
options = entries,
|
||||
selectedIndex = selectedIndex,
|
||||
onSelect = onSelect,
|
||||
disabledIndices = disabledIndices,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
return@Column
|
||||
}
|
||||
SingleChoiceSegmentedButtonRow(modifier = Modifier.fillMaxWidth()) {
|
||||
@@ -431,6 +433,7 @@ private fun ChoiceOptionRow(
|
||||
SegmentedButton(
|
||||
selected = index == selectedIndex,
|
||||
onClick = { onSelect(index) },
|
||||
enabled = index !in disabledIndices,
|
||||
shape = SegmentedButtonDefaults.itemShape(index = index, count = entries.size),
|
||||
icon = {},
|
||||
label = {
|
||||
@@ -452,17 +455,34 @@ private fun ChoiceOptionRow(
|
||||
private fun ColorOptionRow(
|
||||
title: String,
|
||||
color: Int,
|
||||
defaultColor: Int,
|
||||
onColorChange: (Int) -> Unit,
|
||||
) {
|
||||
var showPicker by rememberSaveable { mutableStateOf(false) }
|
||||
val selectedColor = color.withOpaqueAlpha()
|
||||
val materialYouColor = MaterialTheme.colorScheme.primary.toArgb().withOpaqueAlpha()
|
||||
val presets = listOf(
|
||||
val isNeutralPalette = defaultColor.withOpaqueAlpha() == NEUTRAL
|
||||
val presets = if (isNeutralPalette) {
|
||||
listOf(
|
||||
stringResource(R.string.patch_color_neutral),
|
||||
stringResource(R.string.patch_color_green),
|
||||
stringResource(R.string.patch_color_cyan),
|
||||
)
|
||||
} else {
|
||||
listOf(
|
||||
stringResource(R.string.patch_waze_color_waze_default),
|
||||
stringResource(R.string.patch_waze_color_tidal_cyan),
|
||||
stringResource(R.string.patch_waze_color_material_you),
|
||||
)
|
||||
val presetColors = listOf(WAZE_DEFAULT, TIDAL_CYAN, materialYouColor)
|
||||
}
|
||||
val presetColors = if (isNeutralPalette) {
|
||||
listOf(NEUTRAL, GREEN, CYAN)
|
||||
} else {
|
||||
listOf(
|
||||
defaultColor.withOpaqueAlpha(),
|
||||
TIDAL_CYAN,
|
||||
MaterialTheme.colorScheme.primary.toArgb().withOpaqueAlpha(),
|
||||
)
|
||||
}
|
||||
val selectedPreset = presetColors.indexOf(selectedColor)
|
||||
|
||||
Column(
|
||||
@@ -490,6 +510,12 @@ private fun ColorOptionRow(
|
||||
style = MaterialTheme.typography.labelLarge,
|
||||
color = MaterialTheme.colorScheme.primary,
|
||||
)
|
||||
Icon(
|
||||
painter = painterResource(R.drawable.ic_edit),
|
||||
contentDescription = stringResource(R.string.patch_color_edit),
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
modifier = Modifier.size(18.dp),
|
||||
)
|
||||
}
|
||||
SingleChoiceSegmentedButtonRow(modifier = Modifier.fillMaxWidth()) {
|
||||
presets.forEachIndexed { index, label ->
|
||||
@@ -625,7 +651,9 @@ private fun formatSliderValue(option: OptionSpec.Slider, value: Float): String {
|
||||
}
|
||||
|
||||
private const val OPAQUE_ALPHA = -0x1000000
|
||||
private const val WAZE_DEFAULT = -16747037 // #ff0075e3
|
||||
private const val NEUTRAL = -14408663 // #ff242429
|
||||
private const val GREEN = -14749031 // #ff1ef299
|
||||
private const val CYAN = -14748953 // #ff1ef2e7
|
||||
private const val TIDAL_CYAN = -14549268 // #ff21feec
|
||||
|
||||
private fun Int.withOpaqueAlpha(): Int = (this and 0x00FFFFFF) or OPAQUE_ALPHA
|
||||
|
||||
+88
-6
@@ -22,13 +22,18 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.alpha
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.draw.rotate
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.semantics.Role
|
||||
import androidx.compose.ui.text.AnnotatedString
|
||||
import androidx.compose.ui.text.fromHtml
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.compose.LocalLifecycleOwner
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import com.meowarex.rlmobile.R
|
||||
import com.meowarex.rlmobile.pebble.PebbleWatchapp
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.OptionSpec
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.PatchLock
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.PatchOptionState
|
||||
@@ -36,6 +41,8 @@ import com.meowarex.rlmobile.ui.screens.patchopts.PatchOptions
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.PatchSpec
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.effectiveVariants
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.resolveVariantIndex
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.conflictingChoices
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.isInline
|
||||
|
||||
private data class LockInfo(val patch: PatchSpec, val lock: PatchLock)
|
||||
|
||||
@@ -131,11 +138,11 @@ fun PatchSelectionAccordion(
|
||||
val checked = isEnabled(patch)
|
||||
val lock = lockState(patch)
|
||||
|
||||
val inlineToggles = patch.advancedOptions
|
||||
.filterIsInstance<OptionSpec.Toggle>()
|
||||
.filter { it.inline }
|
||||
val hasSheetOptions = patch.advancedOptions.any { it !is OptionSpec.Toggle || !it.inline }
|
||||
val hasSettings = patch.variants.isNotEmpty() || inlineToggles.isNotEmpty() || hasSheetOptions
|
||||
val inlineOptions = patch.advancedOptions.filter { it.isInline }
|
||||
val hasSheetOptions = patch.advancedOptions.any { !it.isInline }
|
||||
val companionApp = patch.companionApp
|
||||
val hasSettings = patch.variants.isNotEmpty() || inlineOptions.isNotEmpty() || hasSheetOptions ||
|
||||
companionApp != null
|
||||
|
||||
// When a patch is enabled and has settings show a carded view of the settings
|
||||
val carded = checked && hasSettings
|
||||
@@ -191,7 +198,9 @@ fun PatchSelectionAccordion(
|
||||
)
|
||||
}
|
||||
|
||||
for (option in inlineToggles) key(option.key) {
|
||||
for (option in inlineOptions) key(option.key) {
|
||||
when (option) {
|
||||
is OptionSpec.Toggle -> {
|
||||
val show = option.requiresVariant == null ||
|
||||
option.requiresVariant == resolvedVariant
|
||||
if (show) {
|
||||
@@ -203,6 +212,29 @@ fun PatchSelectionAccordion(
|
||||
)
|
||||
}
|
||||
}
|
||||
is OptionSpec.Choice -> {
|
||||
val requiredToggle = option.requiresOption?.let { key ->
|
||||
patch.advancedOptions.filterIsInstance<OptionSpec.Toggle>()
|
||||
.firstOrNull { it.key == key }
|
||||
}
|
||||
if (requiredToggle == null || optionState.toggle(patch, requiredToggle)) {
|
||||
ChoiceOptionRow(
|
||||
title = option.title,
|
||||
description = option.description,
|
||||
entries = option.entries,
|
||||
selectedIndex = optionState.choice(patch, option),
|
||||
forceDropdown = option.forceDropdown,
|
||||
disabledIndices = patch.conflictingChoices(option)
|
||||
.map { optionState.choice(patch, it) }
|
||||
.filter { it != 0 }
|
||||
.toSet(),
|
||||
onSelect = { optionState.setChoice(patch, option, it) },
|
||||
)
|
||||
}
|
||||
}
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
if (hasSheetOptions) {
|
||||
Box(
|
||||
@@ -215,6 +247,56 @@ fun PatchSelectionAccordion(
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
if (companionApp != null) {
|
||||
val context = LocalContext.current
|
||||
val lifecycleOwner = LocalLifecycleOwner.current
|
||||
var installState by remember { mutableStateOf(PebbleWatchapp.InstallState.Unknown) }
|
||||
// Recheck on resume
|
||||
LaunchedEffect(lifecycleOwner) {
|
||||
lifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) {
|
||||
installState = PebbleWatchapp.installState(context)
|
||||
}
|
||||
}
|
||||
val installed = installState == PebbleWatchapp.InstallState.Installed
|
||||
Row(
|
||||
horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.CenterHorizontally),
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
) {
|
||||
FilledTonalButton(
|
||||
onClick = { PebbleWatchapp.install(context, companionApp) },
|
||||
enabled = !installed && PebbleWatchapp.canInstall(companionApp),
|
||||
modifier = Modifier.weight(1f),
|
||||
) {
|
||||
Icon(
|
||||
painter = painterResource(if (installed) R.drawable.ic_check_circle else R.drawable.ic_download),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(18.dp),
|
||||
)
|
||||
Spacer(Modifier.width(8.dp))
|
||||
Text(
|
||||
if (installed) {
|
||||
stringResource(R.string.patchopts_companion_installed)
|
||||
} else {
|
||||
companionApp.installTitle.ifBlank { stringResource(R.string.patchopts_companion_install) }
|
||||
}
|
||||
)
|
||||
}
|
||||
FilledTonalButton(
|
||||
onClick = { PebbleWatchapp.openSettings(context) },
|
||||
enabled = installed,
|
||||
modifier = Modifier.weight(1f),
|
||||
) {
|
||||
Icon(
|
||||
painter = painterResource(R.drawable.ic_tune),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(18.dp),
|
||||
)
|
||||
Spacer(Modifier.width(8.dp))
|
||||
Text(companionApp.customizeTitle.ifBlank { stringResource(R.string.patchopts_companion_customize) })
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,9 @@ import com.meowarex.rlmobile.ui.util.TidalVersion
|
||||
import com.meowarex.rlmobile.ui.widgets.managerupdate.VersionDelta
|
||||
import com.meowarex.rlmobile.util.*
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.flatMapLatest
|
||||
import kotlinx.coroutines.flow.update
|
||||
import kotlinx.coroutines.sync.Mutex
|
||||
import kotlinx.coroutines.sync.withLock
|
||||
import kotlinx.serialization.json.Json
|
||||
@@ -53,9 +56,22 @@ class HomeModel(
|
||||
var managerUpdateDeltas by mutableStateOf<List<VersionDelta>?>(null)
|
||||
private set
|
||||
|
||||
val commits = Pager(PagingConfig(pageSize = 30)) {
|
||||
CommitsPagingSource(github)
|
||||
}.flow.cachedIn(screenModelScope)
|
||||
/** Whether a user-initiated refresh is currently in flight */
|
||||
var refreshing by mutableStateOf(false)
|
||||
private set
|
||||
|
||||
// Bumped by every forced refresh, which restarts the pager with a fresh (cache-skipping) source.
|
||||
// Without this the commit list would stay pinned to whatever it loaded on process start.
|
||||
private val commitsGeneration = MutableStateFlow(0)
|
||||
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
val commits = commitsGeneration
|
||||
.flatMapLatest { generation ->
|
||||
Pager(PagingConfig(pageSize = 30)) {
|
||||
CommitsPagingSource(github, force = generation > 0)
|
||||
}.flow
|
||||
}
|
||||
.cachedIn(screenModelScope)
|
||||
|
||||
private val refreshingLock = Mutex()
|
||||
private var remoteDataJson: RLBuildInfo? = null
|
||||
@@ -164,7 +180,10 @@ class HomeModel(
|
||||
)
|
||||
}
|
||||
|
||||
fun refresh(delay: Boolean = false) = screenModelScope.launchIO {
|
||||
/**
|
||||
* @param delay Waits a moment before starting
|
||||
*/
|
||||
fun refresh(delay: Boolean = false, force: Boolean = false) = screenModelScope.launchIO {
|
||||
if (refreshingLock.isLocked) return@launchIO
|
||||
if (delay) {
|
||||
delay(250)
|
||||
@@ -172,13 +191,16 @@ class HomeModel(
|
||||
}
|
||||
|
||||
refreshingLock.withLock {
|
||||
if (force) mainThread { refreshing = true }
|
||||
try {
|
||||
val pkg = fetchInstalled()
|
||||
// Skip the remote fetch entirely when offline
|
||||
val online = application.isOnline()
|
||||
if (online) {
|
||||
val remote = async(Dispatchers.IO) { if (remoteDataJson == null) fetchRemoteData() }
|
||||
remote.await()
|
||||
if (online && (force || remoteDataJson == null)) {
|
||||
fetchRemoteData(force)
|
||||
}
|
||||
// Offline the reload would only replace the visible list with a load error
|
||||
if (force && online) commitsGeneration.update { it + 1 }
|
||||
|
||||
val install = pkg?.toInstallData()
|
||||
val latest = remoteDataJson?.tidalVersionCode
|
||||
@@ -193,6 +215,9 @@ class HomeModel(
|
||||
)
|
||||
maybeCheckManagerUpdate(pkg)
|
||||
}
|
||||
} finally {
|
||||
if (force) mainThread { refreshing = false }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -283,9 +308,9 @@ class HomeModel(
|
||||
paths.hasCachedSmaliPatches(info.data.patchesVersion)
|
||||
}
|
||||
|
||||
private suspend fun fetchRemoteData() {
|
||||
private suspend fun fetchRemoteData(force: Boolean = false) {
|
||||
val release = try {
|
||||
github.getLatestRelease().fold(
|
||||
github.getLatestRelease(force).fold(
|
||||
success = { it },
|
||||
fail = { Log.w(BuildConfig.TAG, "Failed to fetch latest release", it); return },
|
||||
)
|
||||
@@ -299,7 +324,7 @@ class HomeModel(
|
||||
?.browserDownloadUrl
|
||||
?: return
|
||||
|
||||
github.getBuildInfo(dataJsonUrl).fold(
|
||||
github.getBuildInfo(dataJsonUrl, force).fold(
|
||||
success = { remoteDataJson = it },
|
||||
fail = { Log.w(BuildConfig.TAG, "Failed to fetch build info", it) },
|
||||
)
|
||||
|
||||
@@ -3,6 +3,11 @@ package com.meowarex.rlmobile.ui.screens.home
|
||||
import android.os.Parcelable
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.animation.core.LinearEasing
|
||||
import androidx.compose.animation.core.animateFloat
|
||||
import androidx.compose.animation.core.infiniteRepeatable
|
||||
import androidx.compose.animation.core.rememberInfiniteTransition
|
||||
import androidx.compose.animation.core.tween
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.basicMarquee
|
||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||
@@ -14,6 +19,7 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.asImageBitmap
|
||||
import androidx.compose.ui.graphics.graphicsLayer
|
||||
import androidx.compose.ui.graphics.painter.BitmapPainter
|
||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
@@ -70,6 +76,8 @@ class HomeScreen : Screen, Parcelable {
|
||||
val activity = LocalContext.current as ComponentActivity
|
||||
val updater = koinViewModel<UpdaterViewModel>(viewModelStoreOwner = activity)
|
||||
val managerUpdateAvailable = updater.targetVersion != null
|
||||
val refreshing = model.refreshing
|
||||
val refreshAngle = rememberRefreshAngle()
|
||||
|
||||
LifecycleResumeEffect(Unit) {
|
||||
model.refresh(delay = true)
|
||||
@@ -86,7 +94,14 @@ class HomeScreen : Screen, Parcelable {
|
||||
icon = painterResource(R.drawable.ic_refresh),
|
||||
contentDescription = stringResource(R.string.navigation_refresh),
|
||||
subtle = true,
|
||||
onClick = { model.refresh() },
|
||||
enabled = !refreshing,
|
||||
onClick = {
|
||||
model.refresh(force = true)
|
||||
updater.checkForUpdates(force = true)
|
||||
},
|
||||
modifier = Modifier.graphicsLayer {
|
||||
rotationZ = if (refreshing) refreshAngle() else 0f
|
||||
},
|
||||
)
|
||||
if (managerUpdateAvailable) {
|
||||
RadiantIconButton(
|
||||
@@ -364,3 +379,18 @@ private fun HeroContainer(
|
||||
Column(modifier = Modifier.fillMaxWidth(), content = content)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Refresh Spinner thing
|
||||
*/
|
||||
@Composable
|
||||
internal fun rememberRefreshAngle(): () -> Float {
|
||||
val transition = rememberInfiniteTransition(label = "RefreshSpin")
|
||||
val angle by transition.animateFloat(
|
||||
initialValue = 0f,
|
||||
targetValue = 360f,
|
||||
animationSpec = infiniteRepeatable(tween(900, easing = LinearEasing)),
|
||||
label = "RefreshSpinAngle",
|
||||
)
|
||||
return { angle }
|
||||
}
|
||||
+35
-10
@@ -179,7 +179,12 @@ class PatchOptionsModel(
|
||||
|
||||
fun setChoiceValue(spec: PatchSpec, option: OptionSpec.Choice, index: Int) {
|
||||
if (index !in option.entries.indices) return
|
||||
optionInts = optionInts + (keyOf(spec, option) to index)
|
||||
val selectedKey = keyOf(spec, option)
|
||||
optionInts = normalizeChoiceSelections(
|
||||
specs = listOf(spec),
|
||||
values = optionInts + (selectedKey to index),
|
||||
preferredKey = selectedKey,
|
||||
)
|
||||
}
|
||||
|
||||
fun colorValue(spec: PatchSpec, option: OptionSpec.Color): Int =
|
||||
@@ -190,10 +195,9 @@ class PatchOptionsModel(
|
||||
}
|
||||
|
||||
fun isAdvancedModified(spec: PatchSpec): Boolean = spec.advancedOptions.any { option ->
|
||||
if (option.isInline) return@any false
|
||||
when (option) {
|
||||
// inline toggles sit next to the variant picker, not in the sheet, so they
|
||||
// must not light up the sheet's "modified" dot
|
||||
is OptionSpec.Toggle -> !option.inline && toggleValue(spec, option) != option.default
|
||||
is OptionSpec.Toggle -> toggleValue(spec, option) != option.default
|
||||
is OptionSpec.Slider -> sliderValue(spec, option) != option.default
|
||||
is OptionSpec.Choice -> choiceValue(spec, option) != option.defaultIndex
|
||||
is OptionSpec.Color -> colorValue(spec, option) != option.default
|
||||
@@ -201,10 +205,22 @@ class PatchOptionsModel(
|
||||
}
|
||||
|
||||
fun resetAdvanced(spec: PatchSpec) {
|
||||
val prefix = "${spec.id}/"
|
||||
optionBools = optionBools.filterKeys { !it.startsWith(prefix) }
|
||||
optionFloats = optionFloats.filterKeys { !it.startsWith(prefix) }
|
||||
optionInts = optionInts.filterKeys { !it.startsWith(prefix) }
|
||||
val advancedOptions = spec.advancedOptions.filter { !it.isInline }
|
||||
val boolKeys = advancedOptions.filterIsInstance<OptionSpec.Toggle>().map { keyOf(spec, it) }.toSet()
|
||||
val floatKeys = advancedOptions.filterIsInstance<OptionSpec.Slider>().map { keyOf(spec, it) }.toSet()
|
||||
val intKeys = advancedOptions.filter { it is OptionSpec.Choice || it is OptionSpec.Color }
|
||||
.map { keyOf(spec, it) }
|
||||
.toSet()
|
||||
optionBools = optionBools.filterKeys { it !in boolKeys }
|
||||
optionFloats = optionFloats.filterKeys { it !in floatKeys }
|
||||
optionInts = normalizeChoiceSelections(
|
||||
specs = listOf(spec),
|
||||
values = optionInts.filterKeys { it !in intKeys },
|
||||
)
|
||||
}
|
||||
|
||||
private fun normalizeChoiceSelections(specs: List<PatchSpec>) {
|
||||
optionInts = normalizeChoiceSelections(specs, optionInts)
|
||||
}
|
||||
|
||||
val optionState: PatchOptionState = PatchOptionState(
|
||||
@@ -222,7 +238,6 @@ class PatchOptionsModel(
|
||||
|
||||
fun lockState(spec: PatchSpec): PatchLock {
|
||||
if (isBlockedByPackageName(spec)) return PatchLock.RequiresDefaultPackage
|
||||
if (spec.variants.isNotEmpty()) return PatchLock.Free
|
||||
|
||||
val byId = specs.associateBy { it.id }
|
||||
fun closure(seed: PatchSpec, step: (PatchSpec) -> List<PatchSpec>): Set<PatchSpec> =
|
||||
@@ -238,7 +253,14 @@ class PatchOptionsModel(
|
||||
if (other.id == spec.id || !isPatchEnabled(other)) continue
|
||||
|
||||
val requiresClosure = closure(other, requiresOf)
|
||||
if (spec in requiresClosure - other) return PatchLock.LockedOn(other)
|
||||
// A spec with variants is a multi-choice control, so there is no single state to
|
||||
// force it *on* into - hence the exemption here. Forcing it *off* is unambiguous, so
|
||||
// the disables check below still applies to it. Skipping both left LyricsRlApi and
|
||||
// PlayerBackdrop tappable under Legacy UI even though setPatchEnabled had already
|
||||
// switched them off, letting the user turn a patch back on that cannot work.
|
||||
if (spec.variants.isEmpty() && spec in requiresClosure - other) {
|
||||
return PatchLock.LockedOn(other)
|
||||
}
|
||||
|
||||
val disablesClosure = requiresClosure.flatMap { it.disables }
|
||||
.mapNotNull(byId::get)
|
||||
@@ -282,6 +304,7 @@ class PatchOptionsModel(
|
||||
val loaded = if (component == null) builtinSpecs else loadManifestSpecs(component) ?: builtinSpecs
|
||||
mainThread {
|
||||
specs = loaded
|
||||
normalizeChoiceSelections(loaded)
|
||||
validatePatchSelection()
|
||||
specsLoading = false
|
||||
}
|
||||
@@ -351,6 +374,7 @@ class PatchOptionsModel(
|
||||
?: loadCachedReleaseManifestSpecs() ?: builtinSpecs
|
||||
mainThread {
|
||||
specs = loaded
|
||||
normalizeChoiceSelections(loaded)
|
||||
validatePatchSelection()
|
||||
specsLoading = false
|
||||
}
|
||||
@@ -415,6 +439,7 @@ class PatchOptionsModel(
|
||||
}
|
||||
|
||||
init {
|
||||
normalizeChoiceSelections(specs)
|
||||
validatePatchSelection()
|
||||
screenModelScope.launchBlock { fetchPkgNameState() }
|
||||
// Default source is the latest release's manifest; custom selections drive themselves.
|
||||
|
||||
+86
-2
@@ -1,6 +1,7 @@
|
||||
package com.meowarex.rlmobile.ui.screens.patchopts
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Build
|
||||
import androidx.compose.runtime.Immutable
|
||||
import androidx.compose.runtime.Stable
|
||||
import kotlinx.serialization.SerialName
|
||||
@@ -33,6 +34,8 @@ data class PatchSpec(
|
||||
val advancedOptions: List<OptionSpec> = emptyList(),
|
||||
val category: String = CATEGORY_PATCH,
|
||||
val pathLocked: Boolean = false,
|
||||
/** Watchapp shown under an integration. */
|
||||
val companionApp: CompanionAppSpec? = null,
|
||||
) {
|
||||
val isIntegration: Boolean get() = category == CATEGORY_INTEGRATION
|
||||
|
||||
@@ -42,6 +45,17 @@ data class PatchSpec(
|
||||
}
|
||||
}
|
||||
|
||||
@Immutable
|
||||
@Serializable
|
||||
data class CompanionAppSpec(
|
||||
val installTitle: String = "",
|
||||
val customizeTitle: String = "",
|
||||
/** Pebble appstore id. */
|
||||
val storeId: String? = null,
|
||||
/** Appstore feed url. */
|
||||
val storeSource: String? = null,
|
||||
)
|
||||
|
||||
@Immutable
|
||||
@Serializable
|
||||
data class VariantSpec(
|
||||
@@ -49,7 +63,13 @@ data class VariantSpec(
|
||||
val fileNames: List<String> = emptyList(),
|
||||
val extensionFiles: List<String> = emptyList(),
|
||||
val enabled: Boolean = true,
|
||||
)
|
||||
/**
|
||||
* Hidden from the picker on devices below this API level (AGSL needs 33)
|
||||
*/
|
||||
val minSdk: Int = 0,
|
||||
) {
|
||||
val supportedHere: Boolean get() = Build.VERSION.SDK_INT >= minSdk
|
||||
}
|
||||
|
||||
/** A single advanced option. Discriminated by `"type"` in JSON. */
|
||||
@Serializable
|
||||
@@ -101,6 +121,8 @@ sealed interface OptionSpec {
|
||||
val token: String? = null,
|
||||
/** How the chosen value becomes the smali literal that replaces the token. */
|
||||
val encode: SmaliEncode? = null,
|
||||
/** Hidden unless this variant index is the selected one. */
|
||||
val requiresVariant: Int? = null,
|
||||
) : OptionSpec {
|
||||
val valueRange: ClosedFloatingPointRange<Float> get() = min..max
|
||||
}
|
||||
@@ -116,6 +138,10 @@ sealed interface OptionSpec {
|
||||
val defaultIndex: Int = 0,
|
||||
val values: List<String> = emptyList(),
|
||||
val requiresOption: String? = null,
|
||||
val forceDropdown: Boolean = false,
|
||||
/** Render inline in the patch card instead of inside the advanced sheet */
|
||||
val inline: Boolean = false,
|
||||
val distinctFrom: String? = null,
|
||||
val token: String? = null,
|
||||
) : OptionSpec
|
||||
|
||||
@@ -132,6 +158,13 @@ sealed interface OptionSpec {
|
||||
) : OptionSpec
|
||||
}
|
||||
|
||||
val OptionSpec.isInline: Boolean
|
||||
get() = when (this) {
|
||||
is OptionSpec.Toggle -> inline
|
||||
is OptionSpec.Choice -> inline
|
||||
is OptionSpec.Slider, is OptionSpec.Color -> false
|
||||
}
|
||||
|
||||
@Serializable
|
||||
enum class EncodeKind {
|
||||
@SerialName("floatBits")
|
||||
@@ -187,7 +220,9 @@ fun PatchSpec.effectiveVariants(isOptionOn: (OptionSpec.Toggle) -> Boolean): Lis
|
||||
}
|
||||
}
|
||||
return variants.mapIndexedNotNull { index, variant ->
|
||||
if (index in hidden) null
|
||||
// Everything downstream (variantIndex -> resolveVariantIndex) picks from this list, so
|
||||
// dropping an unsupported variant here also keeps the patcher from ever applying it.
|
||||
if (index in hidden || !variant.supportedHere) null
|
||||
else EffectiveVariant(index, relabel[index] ?: variant.title, variant.enabled)
|
||||
}
|
||||
}
|
||||
@@ -206,6 +241,55 @@ fun PatchSpec.resolveVariantIndex(stored: Int, isOptionOn: (OptionSpec.Toggle) -
|
||||
?: visible.first().originalIndex
|
||||
}
|
||||
|
||||
/**
|
||||
* The variant this option belongs to
|
||||
*/
|
||||
val OptionSpec.variantGate: Int?
|
||||
get() = when (this) {
|
||||
is OptionSpec.Toggle -> requiresVariant
|
||||
is OptionSpec.Slider -> requiresVariant
|
||||
is OptionSpec.Choice -> null
|
||||
is OptionSpec.Color -> null
|
||||
}
|
||||
|
||||
fun OptionSpec.hiddenForVariant(selectedVariant: Int): Boolean =
|
||||
variantGate.let { it != null && it != selectedVariant }
|
||||
|
||||
fun PatchSpec.conflictingChoices(option: OptionSpec.Choice): List<OptionSpec.Choice> =
|
||||
advancedOptions.filterIsInstance<OptionSpec.Choice>().filter { other ->
|
||||
other.key != option.key &&
|
||||
(option.distinctFrom == other.key || other.distinctFrom == option.key)
|
||||
}
|
||||
|
||||
internal fun normalizeChoiceSelections(
|
||||
specs: List<PatchSpec>,
|
||||
values: Map<String, Int>,
|
||||
preferredKey: String? = null,
|
||||
): Map<String, Int> {
|
||||
val normalized = values.toMutableMap()
|
||||
for (spec in specs) {
|
||||
val choices = spec.advancedOptions.filterIsInstance<OptionSpec.Choice>()
|
||||
fun fullKey(option: OptionSpec.Choice) = "${spec.id}/${option.key}"
|
||||
fun selected(option: OptionSpec.Choice): Int =
|
||||
(normalized[fullKey(option)] ?: option.defaultIndex)
|
||||
.coerceIn(0, option.entries.lastIndex.coerceAtLeast(0))
|
||||
|
||||
for (leftIndex in choices.indices) {
|
||||
val left = choices[leftIndex]
|
||||
for (rightIndex in leftIndex + 1 until choices.size) {
|
||||
val right = choices[rightIndex]
|
||||
if (left.distinctFrom != right.key && right.distinctFrom != left.key) continue
|
||||
val selected = selected(left)
|
||||
if (selected == 0 || selected != selected(right)) continue
|
||||
|
||||
val loser = if (preferredKey == fullKey(right)) left else right
|
||||
normalized[fullKey(loser)] = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
return if (normalized == values) values else normalized
|
||||
}
|
||||
|
||||
sealed interface OptionLock {
|
||||
data object Free : OptionLock
|
||||
data class NeedsVariant(val title: String) : OptionLock
|
||||
|
||||
+71
-37
@@ -32,6 +32,7 @@ import androidx.compose.ui.unit.dp
|
||||
import com.meowarex.rlmobile.R
|
||||
import com.meowarex.rlmobile.ui.components.radiant.RadiantButton
|
||||
import com.meowarex.rlmobile.ui.components.radiant.RadiantDialog
|
||||
import com.meowarex.rlmobile.ui.components.radiant.RadiantDropdown
|
||||
import com.meowarex.rlmobile.ui.components.radiant.RadiantButtonSize
|
||||
import com.meowarex.rlmobile.ui.components.radiant.RadiantButtonStyle
|
||||
import com.meowarex.rlmobile.ui.components.radiant.RadiantIconButton
|
||||
@@ -43,6 +44,9 @@ import com.meowarex.rlmobile.ui.components.ResetToDefaultButton
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.OptionLock
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.OptionSpec
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.PatchOptionState
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.conflictingChoices
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.hiddenForVariant
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.isInline
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.optionLock
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.PatchSpec
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -108,13 +112,15 @@ fun PatchAdvancedOptionsSheet(
|
||||
|
||||
val parentKeys = patch.advancedOptions
|
||||
.filterIsInstance<OptionSpec.Toggle>()
|
||||
.filter { !it.inline }
|
||||
.filter { !it.isInline }
|
||||
.map { it.key }
|
||||
.toSet()
|
||||
val sheetOptions = patch.advancedOptions.filter { option ->
|
||||
when {
|
||||
option is OptionSpec.Toggle && option.inline -> false
|
||||
option.isInline -> false
|
||||
option is OptionSpec.Toggle && option.requiresOption in parentKeys -> false
|
||||
// Options belonging to another variant are hidden, not greyed out.
|
||||
option.hiddenForVariant(selectedVariant) -> false
|
||||
else -> true
|
||||
}
|
||||
}
|
||||
@@ -124,7 +130,7 @@ fun PatchAdvancedOptionsSheet(
|
||||
is OptionSpec.Toggle -> {
|
||||
val toggleOn = state.toggle(patch, option)
|
||||
val gatedChoices = patch.advancedOptions.filterIsInstance<OptionSpec.Choice>()
|
||||
.filter { it.requiresOption == option.key }
|
||||
.filter { it.requiresOption == option.key && !it.isInline }
|
||||
val gatedToggles = patch.advancedOptions.filterIsInstance<OptionSpec.Toggle>()
|
||||
.filter { it.requiresOption == option.key && !it.inline }
|
||||
val hasSubOptions = gatedChoices.isNotEmpty() || gatedToggles.isNotEmpty()
|
||||
@@ -167,8 +173,14 @@ fun PatchAdvancedOptionsSheet(
|
||||
key(choice.key) {
|
||||
ChoiceOptionRow(
|
||||
title = choice.title,
|
||||
description = choice.description,
|
||||
entries = choice.entries,
|
||||
selectedIndex = state.choice(patch, choice),
|
||||
forceDropdown = choice.forceDropdown,
|
||||
disabledIndices = patch.conflictingChoices(choice)
|
||||
.map { state.choice(patch, it) }
|
||||
.filter { it != 0 }
|
||||
.toSet(),
|
||||
onSelect = { state.setChoice(patch, choice, it) },
|
||||
)
|
||||
}
|
||||
@@ -206,8 +218,14 @@ fun PatchAdvancedOptionsSheet(
|
||||
if (option.requiresOption == null) {
|
||||
ChoiceOptionRow(
|
||||
title = option.title,
|
||||
description = option.description,
|
||||
entries = option.entries,
|
||||
selectedIndex = state.choice(patch, option),
|
||||
forceDropdown = option.forceDropdown,
|
||||
disabledIndices = patch.conflictingChoices(option)
|
||||
.map { state.choice(patch, it) }
|
||||
.filter { it != 0 }
|
||||
.toSet(),
|
||||
onSelect = { state.setChoice(patch, option, it) },
|
||||
)
|
||||
}
|
||||
@@ -215,6 +233,7 @@ fun PatchAdvancedOptionsSheet(
|
||||
is OptionSpec.Color -> ColorOptionRow(
|
||||
title = option.title,
|
||||
color = state.color(patch, option),
|
||||
defaultColor = option.default,
|
||||
onColorChange = { state.setColor(patch, option, it) },
|
||||
)
|
||||
}
|
||||
@@ -354,6 +373,7 @@ private fun SliderOptionRow(
|
||||
value = value,
|
||||
onValueChange = onValueChange,
|
||||
valueRange = valueRange,
|
||||
showStopIndicator = false,
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -372,59 +392,48 @@ private fun snapToNearestStep(
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun ChoiceOptionRow(
|
||||
internal fun ChoiceOptionRow(
|
||||
entries: List<String>,
|
||||
selectedIndex: Int,
|
||||
onSelect: (Int) -> Unit,
|
||||
title: String = "",
|
||||
description: String = "",
|
||||
forceDropdown: Boolean = false,
|
||||
disabledIndices: Set<Int> = emptySet(),
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
Column(
|
||||
modifier = modifier.fillMaxWidth(),
|
||||
verticalArrangement = Arrangement.spacedBy(6.dp),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
horizontalAlignment = Alignment.Start,
|
||||
) {
|
||||
if (title.isNotEmpty()) {
|
||||
Text(
|
||||
text = title,
|
||||
style = MaterialTheme.typography.labelMedium,
|
||||
style = MaterialTheme.typography.titleSmall,
|
||||
)
|
||||
}
|
||||
if (description.isNotEmpty()) {
|
||||
Text(
|
||||
text = description,
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
textAlign = TextAlign.Center,
|
||||
)
|
||||
}
|
||||
if (entries.size > 3) {
|
||||
var expanded by rememberSaveable { mutableStateOf(false) }
|
||||
val selectedLabel = entries.getOrNull(selectedIndex).orEmpty()
|
||||
|
||||
Box(modifier = Modifier.fillMaxWidth()) {
|
||||
RadiantButton(
|
||||
text = selectedLabel,
|
||||
onClick = { expanded = true },
|
||||
style = RadiantButtonStyle.Ghost,
|
||||
fillWidth = true,
|
||||
if (forceDropdown || entries.size > 3) {
|
||||
RadiantDropdown(
|
||||
options = entries,
|
||||
selectedIndex = selectedIndex,
|
||||
onSelect = onSelect,
|
||||
disabledIndices = disabledIndices,
|
||||
)
|
||||
DropdownMenu(
|
||||
expanded = expanded,
|
||||
onDismissRequest = { expanded = false },
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
) {
|
||||
entries.forEachIndexed { index, entry ->
|
||||
DropdownMenuItem(
|
||||
text = { Text(entry) },
|
||||
onClick = {
|
||||
onSelect(index)
|
||||
expanded = false
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
return@Column
|
||||
}
|
||||
RadiantSegmented(
|
||||
options = entries,
|
||||
selectedIndex = selectedIndex,
|
||||
onSelect = onSelect,
|
||||
disabledIndices = disabledIndices,
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -433,17 +442,34 @@ private fun ChoiceOptionRow(
|
||||
private fun ColorOptionRow(
|
||||
title: String,
|
||||
color: Int,
|
||||
defaultColor: Int,
|
||||
onColorChange: (Int) -> Unit,
|
||||
) {
|
||||
var showPicker by rememberSaveable { mutableStateOf(false) }
|
||||
val selectedColor = color.withOpaqueAlpha()
|
||||
val materialYouColor = MaterialTheme.colorScheme.primary.toArgb().withOpaqueAlpha()
|
||||
val presets = listOf(
|
||||
val isNeutralPalette = defaultColor.withOpaqueAlpha() == NEUTRAL
|
||||
val presets = if (isNeutralPalette) {
|
||||
listOf(
|
||||
stringResource(R.string.patch_color_neutral),
|
||||
stringResource(R.string.patch_color_green),
|
||||
stringResource(R.string.patch_color_cyan),
|
||||
)
|
||||
} else {
|
||||
listOf(
|
||||
stringResource(R.string.patch_waze_color_waze_default),
|
||||
stringResource(R.string.patch_waze_color_tidal_cyan),
|
||||
stringResource(R.string.patch_waze_color_material_you),
|
||||
)
|
||||
val presetColors = listOf(WAZE_DEFAULT, TIDAL_CYAN, materialYouColor)
|
||||
}
|
||||
val presetColors = if (isNeutralPalette) {
|
||||
listOf(NEUTRAL, GREEN, CYAN)
|
||||
} else {
|
||||
listOf(
|
||||
defaultColor.withOpaqueAlpha(),
|
||||
TIDAL_CYAN,
|
||||
MaterialTheme.colorScheme.primary.toArgb().withOpaqueAlpha(),
|
||||
)
|
||||
}
|
||||
val selectedPreset = presetColors.indexOf(selectedColor)
|
||||
|
||||
Column(
|
||||
@@ -471,6 +497,12 @@ private fun ColorOptionRow(
|
||||
style = MaterialTheme.typography.labelLarge,
|
||||
color = MaterialTheme.colorScheme.primary,
|
||||
)
|
||||
Icon(
|
||||
painter = painterResource(R.drawable.ic_edit),
|
||||
contentDescription = stringResource(R.string.patch_color_edit),
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
modifier = Modifier.size(18.dp),
|
||||
)
|
||||
}
|
||||
RadiantSegmented(
|
||||
options = presets,
|
||||
@@ -584,7 +616,9 @@ private fun formatSliderValue(option: OptionSpec.Slider, value: Float): String {
|
||||
}
|
||||
|
||||
private const val OPAQUE_ALPHA = -0x1000000
|
||||
private const val WAZE_DEFAULT = -16747037 // #ff0075e3
|
||||
private const val NEUTRAL = -14408663 // #ff242429
|
||||
private const val GREEN = -14749031 // #ff1ef299
|
||||
private const val CYAN = -14748953 // #ff1ef2e7
|
||||
private const val TIDAL_CYAN = -14549268 // #ff21feec
|
||||
|
||||
private fun Int.withOpaqueAlpha(): Int = (this and 0x00FFFFFF) or OPAQUE_ALPHA
|
||||
|
||||
+79
-6
@@ -19,13 +19,18 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.alpha
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.draw.rotate
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.semantics.Role
|
||||
import androidx.compose.ui.text.AnnotatedString
|
||||
import androidx.compose.ui.text.fromHtml
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.compose.LocalLifecycleOwner
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import com.meowarex.rlmobile.R
|
||||
import com.meowarex.rlmobile.pebble.PebbleWatchapp
|
||||
import com.meowarex.rlmobile.ui.components.radiant.RadiantButton
|
||||
import com.meowarex.rlmobile.ui.components.radiant.RadiantButtonSize
|
||||
import com.meowarex.rlmobile.ui.components.radiant.RadiantSwitch
|
||||
@@ -33,6 +38,8 @@ import com.meowarex.rlmobile.ui.components.radiant.RadiantDialog
|
||||
import com.meowarex.rlmobile.ui.theme.radiantSurface
|
||||
import com.meowarex.rlmobile.ui.theme.glassSurface
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.OptionSpec
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.conflictingChoices
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.isInline
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.PatchLock
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.PatchOptionState
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.PatchOptions
|
||||
@@ -134,11 +141,11 @@ fun PatchSelectionAccordion(
|
||||
val checked = isEnabled(patch)
|
||||
val lock = lockState(patch)
|
||||
|
||||
val inlineToggles = patch.advancedOptions
|
||||
.filterIsInstance<OptionSpec.Toggle>()
|
||||
.filter { it.inline }
|
||||
val hasSheetOptions = patch.advancedOptions.any { it !is OptionSpec.Toggle || !it.inline }
|
||||
val hasSettings = patch.variants.isNotEmpty() || inlineToggles.isNotEmpty() || hasSheetOptions
|
||||
val inlineOptions = patch.advancedOptions.filter { it.isInline }
|
||||
val hasSheetOptions = patch.advancedOptions.any { !it.isInline }
|
||||
val companionApp = patch.companionApp
|
||||
val hasSettings = patch.variants.isNotEmpty() || inlineOptions.isNotEmpty() || hasSheetOptions ||
|
||||
companionApp != null
|
||||
|
||||
// When a patch is enabled and has settings show a carded view of the settings
|
||||
val carded = checked && hasSettings
|
||||
@@ -189,7 +196,9 @@ fun PatchSelectionAccordion(
|
||||
)
|
||||
}
|
||||
|
||||
for (option in inlineToggles) key(option.key) {
|
||||
for (option in inlineOptions) key(option.key) {
|
||||
when (option) {
|
||||
is OptionSpec.Toggle -> {
|
||||
val show = option.requiresVariant == null ||
|
||||
option.requiresVariant == resolvedVariant
|
||||
if (show) {
|
||||
@@ -201,6 +210,29 @@ fun PatchSelectionAccordion(
|
||||
)
|
||||
}
|
||||
}
|
||||
is OptionSpec.Choice -> {
|
||||
val requiredToggle = option.requiresOption?.let { key ->
|
||||
patch.advancedOptions.filterIsInstance<OptionSpec.Toggle>()
|
||||
.firstOrNull { it.key == key }
|
||||
}
|
||||
if (requiredToggle == null || optionState.toggle(patch, requiredToggle)) {
|
||||
ChoiceOptionRow(
|
||||
title = option.title,
|
||||
description = option.description,
|
||||
entries = option.entries,
|
||||
selectedIndex = optionState.choice(patch, option),
|
||||
forceDropdown = option.forceDropdown,
|
||||
disabledIndices = patch.conflictingChoices(option)
|
||||
.map { optionState.choice(patch, it) }
|
||||
.filter { it != 0 }
|
||||
.toSet(),
|
||||
onSelect = { optionState.setChoice(patch, option, it) },
|
||||
)
|
||||
}
|
||||
}
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
if (hasSheetOptions) {
|
||||
Box(
|
||||
@@ -213,6 +245,47 @@ fun PatchSelectionAccordion(
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
if (companionApp != null) {
|
||||
val context = LocalContext.current
|
||||
val lifecycleOwner = LocalLifecycleOwner.current
|
||||
var installState by remember { mutableStateOf(PebbleWatchapp.InstallState.Unknown) }
|
||||
// Recheck on resume
|
||||
LaunchedEffect(lifecycleOwner) {
|
||||
lifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) {
|
||||
installState = PebbleWatchapp.installState(context)
|
||||
}
|
||||
}
|
||||
val installed = installState == PebbleWatchapp.InstallState.Installed
|
||||
Row(
|
||||
horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.CenterHorizontally),
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
) {
|
||||
RadiantButton(
|
||||
text = if (installed) {
|
||||
stringResource(R.string.patchopts_companion_installed)
|
||||
} else {
|
||||
companionApp.installTitle.ifBlank { stringResource(R.string.patchopts_companion_install) }
|
||||
},
|
||||
icon = painterResource(if (installed) R.drawable.ic_check_circle else R.drawable.ic_download),
|
||||
onClick = { PebbleWatchapp.install(context, companionApp) },
|
||||
enabled = !installed && PebbleWatchapp.canInstall(companionApp),
|
||||
size = RadiantButtonSize.Small,
|
||||
fillWidth = true,
|
||||
modifier = Modifier.weight(1f),
|
||||
)
|
||||
RadiantButton(
|
||||
text = companionApp.customizeTitle
|
||||
.ifBlank { stringResource(R.string.patchopts_companion_customize) },
|
||||
icon = painterResource(R.drawable.ic_tune),
|
||||
onClick = { PebbleWatchapp.openSettings(context) },
|
||||
enabled = installed,
|
||||
size = RadiantButtonSize.Small,
|
||||
fillWidth = true,
|
||||
modifier = Modifier.weight(1f),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,13 +33,13 @@ private val Rose80 = Color(0xFFFFAFCC)
|
||||
private val Rose90 = Color(0xFFFFD9E4)
|
||||
private val Rose95 = Color(0xFFFFECF1)
|
||||
|
||||
// ── Violet (secondary) ───────────────────────────────────────────────────────
|
||||
private val Violet10 = Color(0xFF25004E)
|
||||
private val Violet20 = Color(0xFF3D177A)
|
||||
private val Violet30 = Color(0xFF553194)
|
||||
private val Violet40 = Color(0xFF6E4BAF)
|
||||
private val Violet80 = Color(0xFFD6BBFF)
|
||||
private val Violet90 = Color(0xFFECDCFF)
|
||||
// ── Dusty rose (secondary) ───────────────────────────────────────────────────
|
||||
private val DustyRose10 = Color(0xFF2B0D18)
|
||||
private val DustyRose20 = Color(0xFF43202B)
|
||||
private val DustyRose30 = Color(0xFF5C3541)
|
||||
private val DustyRose40 = Color(0xFF774C58)
|
||||
private val DustyRose80 = Color(0xFFE4BCC8)
|
||||
private val DustyRose90 = Color(0xFFF5DCE4)
|
||||
|
||||
// ── Aqua (tertiary) ──────────────────────────────────────────────────────────
|
||||
private val Aqua10 = Color(0xFF00201F)
|
||||
@@ -89,10 +89,10 @@ val RadiantDarkColorScheme: ColorScheme = darkColorScheme(
|
||||
onPrimaryContainer = Rose90,
|
||||
inversePrimary = Rose40,
|
||||
|
||||
secondary = Violet80,
|
||||
onSecondary = Violet20,
|
||||
secondaryContainer = Violet30,
|
||||
onSecondaryContainer = Violet90,
|
||||
secondary = DustyRose80,
|
||||
onSecondary = DustyRose20,
|
||||
secondaryContainer = DustyRose30,
|
||||
onSecondaryContainer = DustyRose90,
|
||||
|
||||
tertiary = Aqua80,
|
||||
onTertiary = Aqua20,
|
||||
@@ -134,10 +134,10 @@ val RadiantLightColorScheme: ColorScheme = lightColorScheme(
|
||||
onPrimaryContainer = Rose10,
|
||||
inversePrimary = Rose80,
|
||||
|
||||
secondary = Violet40,
|
||||
secondary = DustyRose40,
|
||||
onSecondary = Neutral100,
|
||||
secondaryContainer = Violet90,
|
||||
onSecondaryContainer = Violet10,
|
||||
secondaryContainer = DustyRose90,
|
||||
onSecondaryContainer = DustyRose10,
|
||||
|
||||
tertiary = Aqua40,
|
||||
onTertiary = Neutral100,
|
||||
|
||||
+22
-8
@@ -37,17 +37,29 @@ class UpdaterViewModel(
|
||||
field = MutableStateFlow(null)
|
||||
val isWorking: StateFlow<Boolean>
|
||||
field = MutableStateFlow(false)
|
||||
val isChecking: StateFlow<Boolean>
|
||||
field = MutableStateFlow(false)
|
||||
|
||||
private var targetApkUrl: String? = null
|
||||
|
||||
init {
|
||||
viewModelScope.launchIO {
|
||||
checkForUpdates()
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-runs the update check
|
||||
*/
|
||||
fun checkForUpdates(force: Boolean = false) = viewModelScope.launchIO {
|
||||
if (!isChecking.compareAndSet(expect = false, update = true))
|
||||
return@launchIO
|
||||
|
||||
try {
|
||||
fetchInfo()
|
||||
fetchInfo(force)
|
||||
} catch (t: Throwable) {
|
||||
Log.e(BuildConfig.TAG, "Failed to check for updates!", t)
|
||||
mainThread { application.showToast(R.string.updater_check_fail) }
|
||||
}
|
||||
} finally {
|
||||
isChecking.value = false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,14 +154,14 @@ class UpdaterViewModel(
|
||||
* then finds the latest release based on the largest semantic version extracted from the tag name (`v1.0.0`),
|
||||
* and populates the state to show to the user.
|
||||
*/
|
||||
private suspend fun fetchInfo() {
|
||||
private suspend fun fetchInfo(force: Boolean = false) {
|
||||
Log.d(BuildConfig.TAG, "Checking for updates...")
|
||||
|
||||
val currentVersion = SemVer.parseOrNull(BuildConfig.VERSION_NAME)
|
||||
?: throw Error("Failed to parse current app version")
|
||||
|
||||
// Fetch releases from GitHub (60s local cache)
|
||||
val releases = github.getManagerReleases().getOrThrow()
|
||||
val releases = github.getManagerReleases(force).getOrThrow()
|
||||
|
||||
// Find the latest release by parsed version
|
||||
val (version, release, apkUrl) = releases
|
||||
@@ -171,12 +183,14 @@ class UpdaterViewModel(
|
||||
return
|
||||
}
|
||||
|
||||
Log.d(BuildConfig.TAG, "Found an update! $targetVersion $targetApkUrl")
|
||||
Log.d(BuildConfig.TAG, "Found an update! $version $apkUrl")
|
||||
val newVersion = version.toString()
|
||||
mainThread {
|
||||
val alreadyKnown = targetVersion == newVersion
|
||||
targetReleaseUrl = release.htmlUrl
|
||||
targetVersion = version.toString()
|
||||
targetVersion = newVersion
|
||||
targetApkUrl = apkUrl
|
||||
showDialog = true
|
||||
if (!alreadyKnown) showDialog = true
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="960"
|
||||
android:viewportHeight="960">
|
||||
<path
|
||||
android:fillColor="#e8eaed"
|
||||
android:pathData="M200,760h57l391,-391l-57,-57l-391,391v57zM160,840q-17,0 -28.5,-11.5T120,800v-97q0,-16 6,-30.5t17,-25.5l505,-504q12,-11 26.5,-17t30.5,-6q16,0 31,6t26,18l55,56q12,11 17.5,26t5.5,30q0,16 -5.5,30.5T817,313L313,817q-11,11 -25.5,17t-30.5,6h-97zM760,256l-56,-56l56,56zM619,341l-28,-29l57,57l-29,-28z" />
|
||||
</vector>
|
||||
@@ -85,6 +85,10 @@
|
||||
<string name="settings_header_installation">Installation</string>
|
||||
<string name="settings_header_appearance">Appearance</string>
|
||||
<string name="settings_header_info">Info</string>
|
||||
<string name="patchopts_companion_install">Install watchapp</string>
|
||||
<string name="patchopts_companion_installed">Installed</string>
|
||||
<string name="patchopts_companion_customize">Customize</string>
|
||||
<string name="pebble_app_missing">Couldn\'t open the Pebble app. Is it installed?</string>
|
||||
<string name="setting_theme">Theme</string>
|
||||
<string name="setting_ui_style">UI style</string>
|
||||
<string name="setting_ui_style_desc">Want the old UI back?</string>
|
||||
@@ -305,12 +309,16 @@
|
||||
<string name="patch_waze_browse_root_title">Media Menu</string>
|
||||
<string name="patch_waze_accent_color_title">Accent Color</string>
|
||||
<string name="patch_waze_color_waze_default">Waze Default</string>
|
||||
<string name="patch_color_neutral">Neutral</string>
|
||||
<string name="patch_color_green">Green</string>
|
||||
<string name="patch_color_cyan">Cyan</string>
|
||||
<string name="patch_waze_color_tidal_cyan">TIDAL Cyan</string>
|
||||
<string name="patch_waze_color_material_you">Material You</string>
|
||||
<string name="patch_waze_root_auto">Auto Menu</string>
|
||||
<string name="patch_waze_root_home">Home</string>
|
||||
<string name="patch_waze_root_recents">Recents</string>
|
||||
<string name="patch_color_picker_title">Custom color</string>
|
||||
<string name="patch_color_edit">Choose custom color</string>
|
||||
<string name="patch_color_picker_hex">Hex color</string>
|
||||
<string name="patch_color_picker_hex_error">Use #RRGGBB or #AARRGGBB.</string>
|
||||
<string name="patch_enable_legacy_ui_title">Enable Legacy UI</string>
|
||||
|
||||
@@ -32,6 +32,7 @@ kotlinx-serialization = "1.10.0"
|
||||
ktor = "3.4.0"
|
||||
libsu = "6.0.0"
|
||||
microg = "0.3.6.244735"
|
||||
pebblekit2 = "1.3.1"
|
||||
shimmer = "1.3.3"
|
||||
shizuku = "13.1.5"
|
||||
smali = "3.0.9"
|
||||
@@ -115,6 +116,7 @@ hiddenApi-stub = { module = "dev.rikka.hidden:stub", version.ref = "hiddenApi-st
|
||||
microg = { module = "org.microg.gms:play-services-safetynet", version.ref = "microg" }
|
||||
desugaring = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugaring" }
|
||||
libsu = { module = "com.aliucord.libsu:core", version.ref = "libsu" }
|
||||
pebblekit2-client = { module = "io.rebble.pebblekit2:client", version.ref = "pebblekit2" }
|
||||
|
||||
[bundles]
|
||||
accompanist = [
|
||||
|
||||
@@ -21,6 +21,7 @@ Every Patch & Integration can be disabled/enabled & adjusted exactly how you wan
|
||||
### Integrations
|
||||
|
||||
- Waze | Control TIDAL playback from Waze
|
||||
- Pebble Watch | Synced lyrics (Line, Word or Syllable) & playback controls on your Pebble
|
||||
|
||||
### Disclaimer
|
||||
|
||||
@@ -94,10 +95,42 @@ Each patch file targets a specific class via its `--- a/` header — the filenam
|
||||
- Comment EACH patch line on the end with a simple 1-5 word description of what it does/or is for
|
||||
- Make sure the patch file name is descriptive of what it does
|
||||
|
||||
### The Kawarp extension (generated smali)
|
||||
|
||||
`patches/extension/radiant/Kawarp.smali` and `patches/extension/dev/kawarp/KawarpEngine.smali`
|
||||
are **generated — don't hand-edit them**. The engine comes from the
|
||||
[Kawarp-AGSL](https://github.com/meowarex/kawarp-agsl) library, which the build tooling expects
|
||||
cloned inside `tools/` (the clone is gitignored):
|
||||
|
||||
```bash
|
||||
git clone https://github.com/meowarex/kawarp-agsl tools/kawarp-agsl
|
||||
```
|
||||
|
||||
To change the TIDAL glue, edit `tools/kawarp-build/src/radiant/Kawarp.java`; to change the
|
||||
effect itself, PR the Kawarp-AGSL repo. Then regenerate and commit the refreshed smali:
|
||||
|
||||
```bash
|
||||
./tools/kawarp-build/build.sh
|
||||
```
|
||||
|
||||
### Submitting
|
||||
Fork the repo, add your patch to `patches/`, and open a PR describing what it changes and why.
|
||||
- Patch PR should be prefixed with `[patch]` in the title
|
||||
|
||||
## Licence
|
||||
|
||||
**GPL-3.0** — see `LICENSE`.
|
||||
|
||||
Plain English: use it, change it, share it, even sell it. But if you distribute it (or a fork),
|
||||
you must ship the source under the GPL too — **no closed-source forks**, and per GPL-3 §5(a) a
|
||||
modified version has to carry a prominent notice saying it was modified and when.
|
||||
|
||||
"Radiant Lyrics" is the project's name — please pick your own for a fork, so users can tell
|
||||
them apart.
|
||||
|
||||
Third-party components and their licences are listed in `THIRD-PARTY.md`. The TIDAL app itself
|
||||
is not covered by this licence and remains the property of its owners.
|
||||
|
||||
## Credits
|
||||
|
||||
Inrixia — TidaLuna framework
|
||||
@@ -0,0 +1,40 @@
|
||||
# Third-party notices
|
||||
|
||||
Radiant Lyrics Mobile is licensed under the GPL-3.0 (see `LICENSE`). It includes work from the
|
||||
projects below, whose original licences and copyright notices are preserved as those licences
|
||||
require.
|
||||
|
||||
---
|
||||
|
||||
## Kawarp-AGSL
|
||||
|
||||
`patches/extension/dev/kawarp/KawarpEngine.smali` is compiled from
|
||||
[Kawarp-AGSL](https://github.com/meowarex/kawarp-agsl), © 2026 meowarex, licensed **LGPL-3.0**.
|
||||
LGPL-3.0 code may be included in a GPL-3.0 work; the engine itself remains available under the
|
||||
LGPL from its own repository.
|
||||
|
||||
## kawarp (@kawarp/core)
|
||||
|
||||
Kawarp-AGSL is in turn a port of [kawarp](https://github.com/better-lyrics/kawarp),
|
||||
© better-lyrics (@boidushya), **MIT** licensed:
|
||||
|
||||
> Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||
> and associated documentation files (the "Software"), to deal in the Software without
|
||||
> restriction, including without limitation the rights to use, copy, modify, merge, publish,
|
||||
> distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
|
||||
> Software is furnished to do so, subject to the following conditions:
|
||||
>
|
||||
> The above copyright notice and this permission notice shall be included in all copies or
|
||||
> substantial portions of the Software.
|
||||
>
|
||||
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||
> BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
> NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
> DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
## TIDAL
|
||||
|
||||
This project patches the TIDAL Android app, which is **not** covered by this licence. TIDAL and
|
||||
its APK remain the property of Aspiro AB / TIDAL. Nothing here grants any rights to their
|
||||
software; see the disclaimer in the README.
|
||||
@@ -0,0 +1,985 @@
|
||||
# R8 Symbol Map - TIDAL 2.213.0-10017
|
||||
|
||||
Maintained by hand. Snapshot of the tree as of TIDAL 2.213.0-10017 (re-derived from the 2.200.0-10004 map by the 2.213 rename sweep) - counts and line
|
||||
numbers in section 4 drift as patches are edited, so treat them as a starting point
|
||||
rather than gospel, and re-check with `grep -rn 'MARKER: R8'`.
|
||||
|
||||
Every identifier below is **renamed by R8 on each TIDAL build** and has to be re-derived
|
||||
when bumping the target APK. This file is the checklist for that sweep.
|
||||
|
||||
In `extension/**/*.smali` and `tools/kawarp-build/**/*.java` each occurrence also carries
|
||||
an inline `MARKER: R8 <symbol>` comment, so `grep -rn 'MARKER: R8'` finds them in place.
|
||||
Smali comments are stripped by the assembler - verified by round-tripping the whole tree
|
||||
through `smali a` + `baksmali d`, which reproduced the unannotated bytecode exactly.
|
||||
|
||||
**`.patch` files are deliberately NOT annotated inline.** A comment on a context or
|
||||
removed line changes the text `applyPatchFuzzy` matches against and makes the hunk
|
||||
unlocatable (`Fuzzy match failed: could not locate context for hunk near line N`).
|
||||
Comments on added `+` lines are unsafe too, because several patches stack on the same
|
||||
target class (8 hook `PlayerScreenKt.smali` alone), so one patch's output is another's
|
||||
context. Section 4 lists those occurrences by line number instead.
|
||||
|
||||
## Re-deriving after a TIDAL bump
|
||||
|
||||
1. baksmali the new APK.
|
||||
2. For **members** (section 2) the owner class name is usually stable - open the new owner
|
||||
and match on the descriptor, which R8 does not change. That pins the new member name.
|
||||
3. For **classes** (section 1) match on shape: superclass, interfaces, method descriptors.
|
||||
4. Apply each rename everywhere, re-run the patch set, and check for failed hunks.
|
||||
5. Update the `TIDAL <version>` in the heading above once the sweep is done.
|
||||
|
||||
## Gotcha: extension classes that are themselves patch targets
|
||||
|
||||
`player-backdrop-kawarp.patch` has `--- a/radiant/HomeBackdrop.smali` - it patches one of our
|
||||
own extension classes, not a TIDAL class. For those files the extension smali IS the patch's
|
||||
match target, so a marker comment on a context or removed line breaks the hunk exactly like it
|
||||
would in a `.patch` file (`Fuzzy match failed: could not locate context for hunk near line N`).
|
||||
|
||||
`extension/radiant/HomeBackdrop.smali` is therefore deliberately left unmarked. Before marking
|
||||
any extension file, check it is not a patch target:
|
||||
|
||||
grep -rn '^--- a/radiant/\|^--- a/dev/' --include=*.patch patches/
|
||||
|
||||
## Gotcha: `tools/kawarp-build/build.sh` drops markers
|
||||
|
||||
That script regenerates `extension/radiant/Kawarp.smali` and
|
||||
`extension/dev/kawarp/KawarpEngine.smali` from the Java sources on every run, so any
|
||||
`MARKER: R8` comments in those two files are lost. After running it, re-mark them
|
||||
(`Kawarp.smali` had 39 marked lines) or the Kawarp half of this map goes stale silently.
|
||||
The Java side under `tools/kawarp-build/{src,stubs}` is not regenerated and keeps its
|
||||
markers.
|
||||
|
||||
## Gotcha: Pebble integration hooks
|
||||
|
||||
`extension/radiant/PebbleBridge*.smali` is built by `tools/pebble-bridge-build/build.sh`.
|
||||
|
||||
- `integration-pebble-playback.patch` hooks `bk0/e`, TIDAL's 200 ms position poller.
|
||||
It holds `Lyj0/d;`, `ExoPlayer` and `Handler` and reposts with `0xc8`.
|
||||
- `integration-pebble-lyrics.patch` hooks our `RLAPILyricsWorker`, so no markers there.
|
||||
|
||||
## 1. Rolled class references (270)
|
||||
|
||||
| symbol | uses | referenced from |
|
||||
|---|---:|---|
|
||||
| `Lyl0/l;` | 246 | `extension/radiant/Kawarp.smali`, `extension/radiant/MiniPlayerBackground.smali`, `extension/radiant/MiniSeekerFloating.smali` +31 more |
|
||||
| `Lh4/a;` | 152 | `extension/radiant/gestures/queue/ComposeSearchQueue.smali`, `extension/radiant/gestures/queue/DynamicMediaQueue.smali`, `extension/radiant/gestures/queue/FeedResolver.smali` +6 more |
|
||||
| `Lkotlin/u;` | 109 | `extension/radiant/Kawarp.smali`, `extension/radiant/MiniSeekerFloating.smali`, `extension/radiant/NoOp.smali` +22 more |
|
||||
| `Lcom/google/android/gms/internal/play_billing/f5;` | 74 | `extension/radiant/HomeBackdrop.smali`, `extension/radiant/Kawarp.smali`, `extension/radiant/NoOp.smali` +10 more |
|
||||
| `Laf/b;` | 60 | `extension/radiant/gestures/queue/MyPlaylistsResolver.smali`, `extension/radiant/gestures/queue/SearchPlaylistsResolver.smali` |
|
||||
| `Ls30/e$e;` | 49 | `extension/radiant/gestures/queue/ArtistTrackCreditsQueueAction.smali`, `extension/radiant/gestures/queue/CompactGridMediaQueueAction.smali`, `extension/radiant/gestures/queue/DynamicTrackQueueAction.smali` +3 more |
|
||||
| `Ln30/p;` | 46 | `extension/radiant/gestures/queue/ArtistTrackCreditsQueue.smali`, `extension/radiant/gestures/queue/ComposeSearchQueue.smali`, `extension/radiant/gestures/queue/DynamicMediaQueue.smali` +2 more |
|
||||
| `Lm6/b;` | 46 | `extension/radiant/gestures/queue/DynamicTrackResolver.smali` |
|
||||
| `Lxc/a;` | 44 | `extension/radiant/gestures/queue/MyAlbumsResolver.smali`, `extension/radiant/gestures/queue/SearchAlbumsResolver.smali` |
|
||||
| `Lm30/b;` | 42 | `extension/radiant/gestures/queue/FeedResolver.smali`, `extension/radiant/gestures/queue/PlaylistItemsResolver.smali`, `extension/radiant/gestures/queue/SuggestionsResolver.smali` |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/c;` | 42 | `extension/radiant/gestures/queue/ArtistTrackCreditsQueue.smali`, `extension/radiant/gestures/queue/DynamicMediaQueue.smali`, `extension/radiant/gestures/queue/DynamicTrackQueue.smali` |
|
||||
| `Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a;` | 40 | `extension/radiant/gestures/queue/AlbumItemQueueAction.smali`, `extension/radiant/gestures/queue/DynamicTrackResolver.smali` |
|
||||
| `Lg40/d;` | 38 | `extension/radiant/gestures/queue/MyAlbumsResolver.smali`, `extension/radiant/gestures/queue/MyMixesAndRadioResolver.smali`, `extension/radiant/gestures/queue/MyPlaylistsResolver.smali` +3 more |
|
||||
| `Le5/d0$t2;` | 36 | `extension/radiant/MiniSeekerLine.smali`, `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Ln6/b$a;` | 36 | `extension/radiant/gestures/queue/DynamicTrackResolver.smali` |
|
||||
| `Ls30/e$d;` | 32 | `extension/radiant/gestures/queue/CompactGridMediaQueueAction.smali`, `extension/radiant/gestures/queue/PublicPlaylistQueueAction.smali`, `extension/radiant/gestures/queue/VerticalMediaQueueAction.smali` +1 more |
|
||||
| `Li50/u$b;` | 30 | `extension/radiant/gestures/queue/ArtistTrackCreditsQueue.smali`, `extension/radiant/gestures/queue/DynamicMediaQueue.smali`, `extension/radiant/gestures/queue/DynamicTrackQueue.smali` |
|
||||
| `Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$b;` | 30 | `extension/radiant/gestures/queue/AlbumItemQueueAction.smali`, `extension/radiant/gestures/queue/DynamicTrackResolver.smali` |
|
||||
| `Lbm/k;` | 28 | `extension/radiant/gestures/queue/UnifiedSearchResolver.smali` |
|
||||
| `Lcoil/request/b;` | 28 | `extension/radiant/Kawarp.smali` |
|
||||
| `Lbm/a;` | 26 | `extension/radiant/gestures/queue/UnifiedSearchResolver.smali` |
|
||||
| `Ls30/e$a;` | 26 | `extension/radiant/gestures/queue/CompactGridMediaQueueAction.smali`, `extension/radiant/gestures/queue/VerticalMediaQueueAction.smali` |
|
||||
| `Ls30/e$c;` | 26 | `extension/radiant/gestures/queue/CompactGridMediaQueueAction.smali`, `extension/radiant/gestures/queue/VerticalMediaQueueAction.smali` |
|
||||
| `Lre/a;` | 26 | `extension/radiant/gestures/queue/MyMixesAndRadioResolver.smali` |
|
||||
| `Lcom/aspiro/wamp/playqueue/source/model/b;` | 25 | `extension/radiant/gestures/queue/AlbumItemQueueAction.smali`, `extension/radiant/gestures/queue/ArtistTrackCreditsQueue.smali`, `extension/radiant/gestures/queue/ComposeSearchQueue.smali` +8 more |
|
||||
| `Lbm/f;` | 24 | `extension/radiant/gestures/queue/UnifiedSearchResolver.smali` |
|
||||
| `Lbm/g;` | 24 | `extension/radiant/gestures/queue/UnifiedSearchResolver.smali` |
|
||||
| `Ln30/k;` | 24 | `extension/radiant/gestures/queue/ComposeSearchQueue.smali`, `extension/radiant/gestures/queue/DynamicMediaQueue.smali` |
|
||||
| `Lm70/a;` | 22 | `extension/radiant/gestures/queue/FeedResolver.smali` |
|
||||
| `Lm70/c;` | 20 | `extension/radiant/gestures/queue/FeedResolver.smali` |
|
||||
| `Ln6/g;` | 20 | `extension/radiant/gestures/queue/DynamicTrackResolver.smali` |
|
||||
| `Lr00/a;` | 19 | `extension/radiant/QualityBadge.smali`, `gestures/mini-player/mini-player-left-right-gesture.patch`, `gestures/mini-player/mini-player-up-gesture.patch` |
|
||||
| `Lm70/d;` | 18 | `extension/radiant/gestures/queue/FeedResolver.smali` |
|
||||
| `Li50/u;` | 18 | `extension/radiant/gestures/queue/DynamicMediaQueue.smali` |
|
||||
| `Ln30/a;` | 18 | `extension/radiant/gestures/queue/ComposeSearchQueue.smali`, `extension/radiant/gestures/queue/DynamicMediaQueue.smali` |
|
||||
| `Ln30/j;` | 18 | `extension/radiant/gestures/queue/ComposeSearchQueue.smali`, `extension/radiant/gestures/queue/DynamicMediaQueue.smali` |
|
||||
| `Ls30/e;` | 18 | `extension/radiant/gestures/queue/CompactGridMediaQueueAction.smali`, `extension/radiant/gestures/queue/VerticalMediaQueueAction.smali`, `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `Lj30/a;` | 17 | `extension/radiant/gestures/queue/ComposeSearchQueue.smali`, `extension/radiant/gestures/queue/DynamicMediaQueue.smali`, `extension/radiant/gestures/queue/FeedResolver.smali` +5 more |
|
||||
| `Li50/e0;` | 16 | `extension/radiant/gestures/queue/DynamicTrackQueue.smali` |
|
||||
| `Lo40/e;` | 16 | `extension/radiant/gestures/queue/ArtistTrackCreditsQueue.smali` |
|
||||
| `Lcom/tidal/android/core/adapterdelegate/c;` | 16 | `extension/radiant/gestures/queue/DynamicTrackResolver.smali` |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/r$c;` | 16 | `extension/com/tidal/android/feature/appscaffold/ui/r$c.smali`, `extension/radiant/gestures/miniplayer/MiniPlayerTrackGestures$Gesture.smali`, `gestures/mini-player/mini-player-left-right-gesture.patch` |
|
||||
| `Le5/c;` | 16 | `extension/radiant/MiniSeekerLine.smali`, `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Leh/j;` | 16 | `extension/radiant/MiniSeekerLine.smali` |
|
||||
| `Li50/f0;` | 14 | `extension/radiant/gestures/queue/DynamicMediaQueue.smali` |
|
||||
| `Lo40/g;` | 14 | `extension/radiant/gestures/queue/DynamicMediaQueue.smali` |
|
||||
| `Lcoil/e;` | 14 | `extension/radiant/Kawarp.smali` |
|
||||
| `Ln30/o;` | 14 | `extension/radiant/gestures/queue/ArtistTrackCreditsQueue.smali`, `extension/radiant/gestures/queue/ComposeSearchQueue.smali`, `extension/radiant/gestures/queue/DynamicMediaQueue.smali` +2 more |
|
||||
| `Lua0/b;` | 14 | `extension/radiant/gestures/queue/ComposeSearchQueueAction.smali`, `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$a;` | 14 | `extension/radiant/gestures/queue/AlbumItemQueueAction.smali`, `extension/radiant/gestures/queue/DynamicTrackResolver.smali` |
|
||||
| `Landroidx/compose/foundation/text/input/internal/selection/b;` | 13 | `extension/radiant/gestures/queue/SuggestionsResolver.smali`, `gestures/queue/swipe-to-queue.patch` |
|
||||
| `Li50/y;` | 12 | `extension/radiant/gestures/queue/DynamicMediaQueue.smali` |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/suggestions/j;` | 12 | `extension/radiant/gestures/queue/SuggestionsResolver.smali` |
|
||||
| `Lcom/aspiro/wamp/search/v2/d;` | 12 | `extension/radiant/gestures/queue/UnifiedSearchResolver.smali` |
|
||||
| `Lcom/tidal/android/navigation/a;` | 12 | `extension/radiant/gestures/queue/ComposeSearchQueue.smali`, `extension/radiant/gestures/queue/DynamicMediaQueue.smali`, `extension/radiant/gestures/queue/PlaylistItemsResolver.smali` +2 more |
|
||||
| `Lg9/u1;` | 12 | `extension/radiant/gestures/queue/ComposeSearchQueue.smali`, `extension/radiant/gestures/queue/DynamicMediaQueue.smali` |
|
||||
| `Lae0/i;` | 12 | `extension/radiant/gestures/queue/ArtistTrackCreditsQueue.smali`, `extension/radiant/gestures/queue/ComposeSearchQueue.smali`, `extension/radiant/gestures/queue/DynamicMediaQueue.smali` +2 more |
|
||||
| `Lo3/a$a;` | 12 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Lo3/a;` | 12 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Lu3/a$a;` | 12 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Lu3/a;` | 12 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/suggestions/n;` | 11 | `extension/radiant/gestures/queue/SuggestionsResolver.smali`, `gestures/queue/swipe-to-queue.patch` |
|
||||
| `Lw10/c2;` | 11 | `extension/radiant/QualityBadge.smali`, `player-move-playing-from.patch`, `player-quality-badge-colors.patch` |
|
||||
| `Lml0/a;` | 11 | `extension/radiant/MiniSeekerLine.smali`, `extension/radiant/gestures/queue/QueueExecutor.smali`, `gestures/queue/swipe-to-queue.patch` |
|
||||
| `Lo40/j;` | 10 | `extension/radiant/gestures/queue/ArtistTrackCreditsQueue.smali`, `extension/radiant/gestures/queue/DynamicMediaQueue.smali`, `extension/radiant/gestures/queue/DynamicTrackQueue.smali` |
|
||||
| `Lcoil/request/h$a;` | 10 | `extension/radiant/Kawarp.smali` |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/suggestions/e1;` | 10 | `extension/radiant/gestures/queue/SuggestionsResolver.smali` |
|
||||
| `Lcom/aspiro/wamp/player/b;` | 10 | `extension/radiant/gestures/queue/QueueExecutor.smali`, `gestures/queue/swipe-to-queue.patch` |
|
||||
| `Lcom/aspiro/wamp/playlist/ui/items/a;` | 10 | `extension/radiant/gestures/queue/PlaylistItemsResolver.smali` |
|
||||
| `Landroidx/compose/foundation/text/selection/g0;` | 10 | `extension/radiant/gestures/queue/QueueExecutor.smali`, `gestures/queue/swipe-to-queue.patch` |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/b;` | 10 | `extension/radiant/gestures/queue/ArtistTrackCreditsQueue.smali`, `extension/radiant/gestures/queue/DynamicMediaQueue.smali`, `extension/radiant/gestures/queue/DynamicTrackQueue.smali` |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/f;` | 10 | `extension/radiant/RLAPILyricsWorker.smali`, `lyrics-rl-api-syllable.patch`, `lyrics-rl-api-word.patch` |
|
||||
| `Lq50/c;` | 10 | `extension/radiant/gestures/queue/ArtistTrackCreditsQueue.smali`, `extension/radiant/gestures/queue/DynamicMediaQueue.smali`, `extension/radiant/gestures/queue/DynamicTrackQueue.smali` |
|
||||
| `Ltl/l;` | 10 | `extension/radiant/gestures/queue/UnifiedSearchResolver.smali` |
|
||||
| `Lcoil/request/h;` | 9 | `extension/radiant/Kawarp.smali` |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/s$a;` | 9 | `lyrics-disable-cover.patch`, `lyrics-replace-lyrics-button.patch`, `lyrics-replace-share-button.patch` +3 more |
|
||||
| `Lhb0/b$a;` | 9 | `extension/radiant/gestures/queue/ComposeSearchQueueAction.smali`, `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `Lhb0/b$e;` | 9 | `extension/radiant/gestures/queue/ComposeSearchQueueAction.smali`, `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `Lhb0/b$f;` | 9 | `extension/radiant/gestures/queue/ComposeSearchQueueAction.smali`, `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `Lhb0/b$i;` | 9 | `extension/radiant/gestures/queue/ComposeSearchQueueAction.smali`, `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `Ll70/c;` | 8 | `extension/radiant/gestures/queue/FeedResolver.smali` |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/b$b;` | 8 | `extension/radiant/gestures/miniplayer/MiniPlayerGestures$Gesture.smali`, `extension/radiant/gestures/miniplayer/MiniPlayerGestures.smali`, `gestures/mini-player/mini-player-left-right-gesture.patch` |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/recyclerview/a;` | 8 | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/recyclerview/b;` | 8 | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/i$a;` | 8 | `player-quality-badge-colors.patch` |
|
||||
| `Ldagger/internal/f;` | 8 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Ldd/c;` | 8 | `extension/radiant/gestures/queue/MyAlbumsResolver.smali` |
|
||||
| `Lo30/c$b;` | 8 | `extension/radiant/gestures/queue/ViewAllTrackQueueAction.smali` |
|
||||
| `Lae0/h;` | 8 | `extension/radiant/gestures/queue/ComposeSearchQueue.smali`, `extension/radiant/gestures/queue/DynamicMediaQueue.smali` |
|
||||
| `Ljd/b;` | 8 | `extension/radiant/gestures/queue/SearchAlbumsResolver.smali` |
|
||||
| `Lle/e;` | 8 | `extension/radiant/gestures/queue/MyMixesAndRadioResolver.smali` |
|
||||
| `Ltl/r;` | 8 | `extension/radiant/gestures/queue/UnifiedSearchResolver.smali` |
|
||||
| `Lu5/g;` | 8 | `extension/radiant/gestures/queue/AlbumItemQueueAction.smali` |
|
||||
| `Lv9/e;` | 8 | `extension/radiant/gestures/queue/ComposeSearchQueue.smali` |
|
||||
| `Lzh/e;` | 7 | `extension/radiant/RLAPILyricsWorker.smali`, `gestures/mini-player/mini-player-left-right-gesture.patch` |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/composables/e3;` | 7 | `extension/radiant/HomeBackdrop.smali`, `extension/radiant/Kawarp.smali`, `player-backdrop-kawarp.patch` +1 more |
|
||||
| `Lm3/f;` | 7 | `extension/radiant/gestures/queue/QueueExecutor.smali`, `gestures/queue/swipe-to-queue.patch` |
|
||||
| `Lyl0/p;` | 6 | `extension/radiant/SparkleButton.smali`, `extension/radiant/SparkleContent.smali`, `mini-player-black.patch` +1 more |
|
||||
| `Ld3/f;` | 6 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Li50/v;` | 6 | `extension/radiant/gestures/queue/DynamicMediaQueue.smali` |
|
||||
| `Lud0/b$a;` | 6 | `extension/radiant/Kawarp.smali` |
|
||||
| `Lcom/aspiro/wamp/contextmenu/item/playlist/f;` | 6 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/g0;` | 6 | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/a;` | 6 | `extension/radiant/gestures/queue/DynamicMediaQueue.smali`, `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/b$a;` | 6 | `extension/radiant/gestures/miniplayer/MiniPlayerGestures.smali` |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/r;` | 6 | `extension/com/tidal/android/feature/appscaffold/ui/r$c.smali` |
|
||||
| `Lcom/tidal/android/feature/feed/ui/c;` | 6 | `extension/radiant/gestures/queue/FeedResolver.smali` |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/composables/l1;` | 6 | `lyrics-rl-api-syllable.patch`, `lyrics-rl-api-word.patch` |
|
||||
| `Lcom/tidal/android/feature/viewall/ui/e$e;` | 6 | `extension/radiant/gestures/queue/ViewAllTrackQueue.smali` |
|
||||
| `Ll10/d;` | 6 | `extension/radiant/QualityBadge.smali` |
|
||||
| `Leh/b;` | 6 | `extension/radiant/SeekerConsumer.smali` |
|
||||
| `Ldf/c;` | 6 | `extension/radiant/gestures/queue/MyPlaylistsResolver.smali` |
|
||||
| `Lsd0/a;` | 6 | `extension/radiant/gestures/queue/ComposeSearchQueue.smali`, `extension/radiant/gestures/queue/DynamicMediaQueue.smali` |
|
||||
| `Lae0/g;` | 6 | `extension/radiant/gestures/queue/ComposeSearchQueue.smali`, `extension/radiant/gestures/queue/DynamicMediaQueue.smali` |
|
||||
| `Lm3/d;` | 6 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Lm3/f$a;` | 6 | `extension/radiant/gestures/queue/QueueExecutor.smali`, `gestures/queue/swipe-to-queue.patch` |
|
||||
| `Leb0/a;` | 6 | `extension/radiant/gestures/queue/ComposeSearchQueue.smali` |
|
||||
| `Lm8/d;` | 6 | `extension/radiant/gestures/queue/FavoriteTracksResolver.smali` |
|
||||
| `Lhd0/a;` | 6 | `extension/radiant/gestures/queue/ViewAllTrackQueue.smali` |
|
||||
| `Lw10/u1;` | 6 | `extension/radiant/SparkleButton.smali` |
|
||||
| `Lra/d;` | 6 | `extension/radiant/gestures/queue/ViewAllTrackQueue.smali` |
|
||||
| `Lpd0/g;` | 6 | `extension/radiant/Kawarp.smali` |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/g$c;` | 5 | `extension/radiant/RLAPILyricsWorker.smali`, `lyrics-rl-api-observer.patch` |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/p;` | 5 | `lyrics-replace-lyrics-button.patch`, `lyrics-sparkle-conditional-visibility.patch`, `player-hide-playing-from.patch` +1 more |
|
||||
| `Lc0/c;` | 4 | `extension/radiant/Kawarp.smali` |
|
||||
| `Lbm/h;` | 4 | `extension/radiant/gestures/queue/UnifiedSearchResolver.smali` |
|
||||
| `Ld3/g$a;` | 4 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Ld3/g;` | 4 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Ld3/j$a;` | 4 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Le3/k;` | 4 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Lud0/b;` | 4 | `extension/radiant/Kawarp.smali` |
|
||||
| `Lcom/aspiro/wamp/contextmenu/item/playlist/h$a;` | 4 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Lcom/aspiro/wamp/contextmenu/item/playlist/h;` | 4 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Lcom/aspiro/wamp/contextmenu/item/playlist/z$a;` | 4 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Lcom/aspiro/wamp/contextmenu/item/playlist/e0;` | 4 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Lcom/aspiro/wamp/core/l;` | 4 | `extension/radiant/gestures/queue/ComposeSearchQueue.smali`, `extension/radiant/gestures/queue/DynamicMediaQueue.smali` |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/m;` | 4 | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/suggestions/j$a;` | 4 | `extension/radiant/gestures/queue/SuggestionsResolver.smali` |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/suggestions/j$e;` | 4 | `extension/radiant/gestures/queue/SuggestionsResolver.smali` |
|
||||
| `Lcom/aspiro/wamp/playback/e0;` | 4 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Lcom/aspiro/wamp/playback/d;` | 4 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Lcom/aspiro/wamp/playback/k0;` | 4 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Lcom/aspiro/wamp/playqueue/r0;` | 4 | `extension/radiant/MiniSeekerLine.smali` |
|
||||
| `Lcom/aspiro/wamp/playqueue/m0;` | 4 | `extension/radiant/RLAPILyricsWorker.smali` |
|
||||
| `Lcom/aspiro/wamp/search/v2/a$g;` | 4 | `extension/radiant/gestures/queue/UnifiedSearchResolver.smali` |
|
||||
| `Lcom/squareup/ui/market/core/theme/k$a;` | 4 | `extension/radiant/SparkleButton.smali` |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/modules/artisttrackcredits/b$a;` | 4 | `extension/radiant/gestures/queue/ArtistTrackCreditsQueueAction.smali` |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/modules/tracklist/b$a;` | 4 | `extension/radiant/gestures/queue/DynamicTrackQueueAction.smali` |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/modules/verticallistcard/b$a;` | 4 | `extension/radiant/gestures/queue/VerticalMediaQueueAction.smali` |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/q;` | 4 | `cover-capture.patch`, `gestures/mini-player/mini-player-left-right-gesture.patch` |
|
||||
| `Lcom/tidal/android/feature/search/ui/f;` | 4 | `extension/radiant/gestures/queue/ComposeSearchQueue.smali` |
|
||||
| `Lcom/tidal/android/feature/viewall/ui/c;` | 4 | `extension/radiant/gestures/queue/ViewAllTrackQueue.smali` |
|
||||
| `Lcom/tidal/android/image/core/b$a;` | 4 | `extension/radiant/Kawarp.smali` |
|
||||
| `Le0/c$a;` | 4 | `extension/radiant/Kawarp.smali` |
|
||||
| `Lk3/m$a;` | 4 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Lk3/m;` | 4 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Le3/j$a;` | 4 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Lk3/p;` | 4 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Le3/b$a;` | 4 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Lk3/s;` | 4 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Lm3/i$a;` | 4 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Lm3/i;` | 4 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Leb0/e;` | 4 | `extension/radiant/gestures/queue/ComposeSearchQueue.smali` |
|
||||
| `Ltn0/b;` | 4 | `extension/radiant/RLAPILyricsWorker.smali` |
|
||||
| `Lk70/a;` | 4 | `extension/radiant/gestures/queue/FeedResolver.smali` |
|
||||
| `Lxf/c;` | 4 | `extension/radiant/gestures/queue/SearchPlaylistsResolver.smali` |
|
||||
| `Lx/f0;` | 3 | `gestures/mini-player/mini-player-left-right-gesture.patch`, `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `Landroidx/window/embedding/c2;` | 3 | `lyrics-replace-lyrics-button.patch`, `lyrics-sparkle-conditional-visibility.patch` |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/c;` | 3 | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/r$a;` | 3 | `extension/radiant/gestures/miniplayer/MiniPlayerTrackGestures$Gesture.smali` |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/t;` | 3 | `gestures/mini-player/mini-player-left-right-gesture.patch`, `gestures/mini-player/mini-player-up-gesture.patch` |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/b;` | 3 | `lyrics-replace-share-button.patch` |
|
||||
| `Lcom/tidal/android/feature/viewall/ui/e;` | 3 | `extension/radiant/gestures/queue/ViewAllTrackQueue.smali`, `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `Lcom/tidal/android/image/core/b$h$a;` | 3 | `extension/radiant/Kawarp.smali` |
|
||||
| `Ldagger/internal/j;` | 3 | `extension/radiant/MiniSeekerLine.smali`, `gestures/queue/swipe-to-queue.patch` |
|
||||
| `Lkotlin/jvm/internal/n;` | 3 | `integration-waze-playback.patch` |
|
||||
| `Lg20/a;` | 2 | `player-favorite-heart.patch` |
|
||||
| `Lyc/f;` | 2 | `extension/radiant/gestures/queue/MyAlbumsResolver.smali` |
|
||||
| `Lyl0/q;` | 2 | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `Landroidx/window/embedding/d2;` | 2 | `lyrics-replace-share-button.patch` |
|
||||
| `Lbd/d$a;` | 2 | `extension/radiant/gestures/queue/MyAlbumsResolver.smali` |
|
||||
| `Lbm/i;` | 2 | `extension/radiant/gestures/queue/UnifiedSearchResolver.smali` |
|
||||
| `Lcoil/request/d;` | 2 | `extension/radiant/Kawarp.smali` |
|
||||
| `Lz3/b;` | 2 | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `Lz3/c;` | 2 | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/playlists/myplaylists/h;` | 2 | `extension/radiant/gestures/queue/MyPlaylistsResolver.smali` |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/suggestions/k;` | 2 | `extension/radiant/gestures/queue/SuggestionsResolver.smali` |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/suggestions/l;` | 2 | `extension/radiant/gestures/queue/SuggestionsResolver.smali` |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/suggestions/z$a;` | 2 | `extension/radiant/gestures/queue/SuggestionsResolver.smali` |
|
||||
| `Lcom/aspiro/wamp/search/v2/a;` | 2 | `extension/radiant/gestures/queue/UnifiedSearchResolver.smali` |
|
||||
| `Lcom/aspiro/wamp/util/a0;` | 2 | `extension/radiant/gestures/queue/PlaylistItemsResolver.smali` |
|
||||
| `Lcom/squareup/ui/market/components/n;` | 2 | `extension/radiant/SparkleButton.smali` |
|
||||
| `Lcom/squareup/ui/market/core/theme/k;` | 2 | `extension/radiant/SparkleButton.smali` |
|
||||
| `Lcom/squareup/ui/market/core/theme/h0;` | 2 | `extension/radiant/SparkleButton.smali` |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/composables/compactgridcard/d;` | 2 | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/modules/artisttrackcredits/b;` | 2 | `extension/radiant/gestures/queue/ArtistTrackCreditsQueueEvent.smali` |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/modules/publicplaylistlist/b;` | 2 | `extension/radiant/gestures/queue/DynamicMediaQueueEvent.smali` |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/modules/tracklist/b;` | 2 | `extension/radiant/gestures/queue/DynamicTrackQueueEvent.smali` |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/modules/verticallistcard/b;` | 2 | `extension/radiant/gestures/queue/DynamicMediaQueueEvent.smali` |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/composable/a;` | 2 | `mini-player-black.patch`, `mini-player-dynamic-bg.patch` |
|
||||
| `Lbd0/a;` | 2 | `lyrics-replace-lyrics-button.patch`, `lyrics-sparkle-conditional-visibility.patch` |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/d;` | 2 | `lyrics-disable-cover.patch`, `player-move-playing-from.patch` |
|
||||
| `Lcom/tidal/android/feature/profile/ui/sociallinks/y;` | 2 | `lyrics-replace-share-button.patch` |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/g;` | 2 | `lyrics-disable-cover.patch`, `lyrics-progress-pill.patch` |
|
||||
| `Lcom/tidal/android/feature/search/ui/b;` | 2 | `extension/radiant/gestures/queue/ComposeSearchQueueEvent.smali` |
|
||||
| `Lcom/tidal/android/feature/search/ui/e;` | 2 | `extension/radiant/gestures/queue/ComposeSearchQueue.smali` |
|
||||
| `Lcom/tidal/android/feature/viewall/ui/u;` | 2 | `extension/radiant/gestures/queue/ViewAllTrackQueue.smali` |
|
||||
| `Lcom/tidal/android/image/coil/c;` | 2 | `extension/radiant/Kawarp.smali` |
|
||||
| `Lcom/tidal/android/image/core/b;` | 2 | `extension/radiant/Kawarp.smali` |
|
||||
| `Ldf/d$a;` | 2 | `extension/radiant/gestures/queue/MyPlaylistsResolver.smali` |
|
||||
| `Lhu/akarnokd/rxjava/interop/f;` | 2 | `extension/radiant/gestures/queue/QueueExecutor.smali` |
|
||||
| `Lgd/e;` | 2 | `extension/radiant/gestures/queue/SearchAlbumsResolver.smali` |
|
||||
| `Lgj/b0$a;` | 2 | `extension/radiant/gestures/queue/PlaylistItemsResolver.smali` |
|
||||
| `Lgj/l0$a;` | 2 | `extension/radiant/gestures/queue/PlaylistItemsResolver.smali` |
|
||||
| `Lgj/r$a;` | 2 | `extension/radiant/gestures/queue/PlaylistItemsResolver.smali` |
|
||||
| `Ljd/d$a;` | 2 | `extension/radiant/gestures/queue/SearchAlbumsResolver.smali` |
|
||||
| `Lk5/f;` | 2 | `extension/radiant/gestures/queue/AlbumItemQueueAction.smali` |
|
||||
| `Lkotlin/collections/u;` | 2 | `extension/radiant/gestures/queue/SuggestionsResolver.smali` |
|
||||
| `Lkotlin/coroutines/e;` | 2 | `extension/radiant/gestures/lyrics/LyricsDrag$Guard.smali` |
|
||||
| `Landroidx/compose/ui/text/p;` | 2 | `extension/radiant/MiniPlayerBackground.smali` |
|
||||
| `Lkotlin/i;` | 2 | `mini-player-dynamic-bg.patch` |
|
||||
| `Lmb0/f;` | 2 | `extension/radiant/gestures/queue/ComposeSearchQueue.smali` |
|
||||
| `Lo4/g;` | 2 | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `La40/a;` | 2 | `debug-menu-unlock.patch` |
|
||||
| `Lo7/a$a;` | 2 | `extension/radiant/gestures/queue/DynamicTrackResolver.smali` |
|
||||
| `Lw10/r4;` | 2 | `extension/radiant/QualityBadge.smali` |
|
||||
| `Lw10/s4;` | 2 | `extension/radiant/QualityBadge.smali` |
|
||||
| `Lqe/c$a;` | 2 | `extension/radiant/gestures/queue/MyMixesAndRadioResolver.smali` |
|
||||
| `Ltl/j;` | 2 | `extension/radiant/gestures/queue/UnifiedSearchResolver.smali` |
|
||||
| `Lul/a0$a;` | 2 | `extension/radiant/gestures/queue/UnifiedSearchResolver.smali` |
|
||||
| `Lul/d$a;` | 2 | `extension/radiant/gestures/queue/UnifiedSearchResolver.smali` |
|
||||
| `Lul/n0$a;` | 2 | `extension/radiant/gestures/queue/UnifiedSearchResolver.smali` |
|
||||
| `Lul/w$a;` | 2 | `extension/radiant/gestures/queue/UnifiedSearchResolver.smali` |
|
||||
| `Lu6/e$a;` | 2 | `extension/radiant/gestures/queue/DynamicTrackResolver.smali` |
|
||||
| `Lr60/a;` | 2 | `extension/radiant/gestures/queue/FeedResolver.smali` |
|
||||
| `Lrn0/a;` | 2 | `extension/radiant/RLAPILyricsWorker.smali` |
|
||||
| `Lw70/c$a;` | 2 | `extension/radiant/gestures/queue/FeedResolver.smali` |
|
||||
| `Lw70/h$a;` | 2 | `extension/radiant/gestures/queue/FeedResolver.smali` |
|
||||
| `Lw70/k$a;` | 2 | `extension/radiant/gestures/queue/FeedResolver.smali` |
|
||||
| `Luf/d;` | 2 | `extension/radiant/gestures/queue/SearchPlaylistsResolver.smali` |
|
||||
| `Lhd0/h;` | 2 | `extension/radiant/Kawarp.smali` |
|
||||
| `Lhd0/j;` | 2 | `extension/radiant/Kawarp.smali` |
|
||||
| `Lxf/d$a;` | 2 | `extension/radiant/gestures/queue/SearchPlaylistsResolver.smali` |
|
||||
| `Lg20/b;` | 1 | `player-favorite-heart.patch` |
|
||||
| `Landroidx/compose/foundation/text/input/a;` | 1 | `player-backdrop-playback.patch` |
|
||||
| `Lyj0/d;` | 1 | `integration-pebble-playback.patch` |
|
||||
| `Lyj0/e;` | 1 | `integration-pebble-playback.patch` |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/n;` | 1 | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/playqueue/p;` | 1 | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/a;` | 1 | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `Lcom/squareup/ui/market/layout/e;` | 1 | `player-backdrop-playback.patch` |
|
||||
| `Lcom/squareup/ui/market/text/a;` | 1 | `player-move-playing-from.patch` |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/composables/verticallistcard/m;` | 1 | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/composable/g;` | 1 | `gestures/mini-player/mini-player-left-right-gesture.patch` |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/i0;` | 1 | `lyrics-disable-cover.patch` |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/composables/c4;` | 1 | `lyrics-replace-share-button.patch` |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/composables/v0;` | 1 | `lyrics-replace-lyrics-button.patch` |
|
||||
| `Lcom/squareup/ui/market/modal/a0;` | 1 | `lyrics-fade-region.patch` |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/composables/u3;` | 1 | `player-quality-badge-colors.patch` |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/g$a;` | 1 | `lyrics-disable-cover.patch` |
|
||||
| `Lcom/tidal/android/feature/viewall/ui/e$a;` | 1 | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `Lcom/tidal/android/feature/viewall/ui/w;` | 1 | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `Lcom/tidal/android/featureflags/l;` | 1 | `debug-menu-unlock.patch` |
|
||||
| `Lcom/tidal/android/tidalapi/domain/model/q;` | 1 | `lyrics-rl-api-isrc.patch` |
|
||||
| `Lvd0/c;` | 1 | `player-backdrop-playback.patch` |
|
||||
| `Lkb/f;` | 1 | `integration-waze-playback.patch` |
|
||||
| `Lm8/b;` | 1 | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `Lo4/g$e;` | 1 | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `Lgb0/x;` | 1 | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `Lgb0/d0;` | 1 | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
|
||||
## 2. Rolled members on otherwise-stable classes (347)
|
||||
|
||||
The owner name survives R8; only the member name rolls. Match on the descriptor.
|
||||
|
||||
| owner | member | descriptor | uses |
|
||||
|---|---|---|---:|
|
||||
| `Lcom/aspiro/wamp/App$a;` | `a` | `()Lcom/aspiro/wamp/App;` | 8 |
|
||||
| `Lcom/aspiro/wamp/App;` | `e` | `()Le5/c;` | 8 |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/recyclerview/b;` | `a` | `(Landroidx/lifecycle/LifecycleOwner;Landroidx/recyclerview/widget/RecyclerView;)Lcom/tidal/android/feature/appscaffold/ui/recyclerview/a;` | 8 |
|
||||
| `Ls30/e$e;` | `a` | `:J` | 8 |
|
||||
| `Lg40/b;` | `b` | `:Ljava/util/ArrayList;` | 7 |
|
||||
| `Laf/b;` | `a` | `:Lcom/aspiro/wamp/model/Playlist;` | 6 |
|
||||
| `Lcom/tidal/android/navigation/a;` | `b` | `(Lcom/tidal/android/navigation/NavigationInfo;)Lcom/tidal/android/navigation/NavigationInfo$Node;` | 6 |
|
||||
| `Lae0/i;` | `c` | `(Ln30/p;)Lcom/aspiro/wamp/model/Track;` | 6 |
|
||||
| `Ln6/b;` | `c` | `:Ln6/b$a;` | 6 |
|
||||
| `Lxc/a;` | `b` | `:Lcom/aspiro/wamp/model/Album;` | 6 |
|
||||
| `Li50/u$b;` | `a` | `:Ln30/o;` | 5 |
|
||||
| `Lcom/aspiro/wamp/playqueue/source/model/b;` | `j` | `(Ljava/lang/String;Ljava/lang/String;Lcom/tidal/android/navigation/NavigationInfo;Lcom/aspiro/wamp/playqueue/source/model/ItemSource$NavigationType;)Lcom/aspiro/wamp/playqueue/source/model/ItemSource;` | 5 |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/c;` | `b` | `:Lcom/tidal/android/navigation/NavigationInfo;` | 5 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;` | `S` | `:Lkotlinx/coroutines/flow/MutableStateFlow;` | 5 |
|
||||
| `Lq50/c;` | `c` | `(Ljava/lang/String;)Li50/j;` | 5 |
|
||||
| `Ls30/e$e;` | `j` | `:Z` | 5 |
|
||||
| `Ln6/b$a;` | `q` | `:Ljava/lang/String;` | 5 |
|
||||
| `Ln6/b;` | `a` | `:Ln6/g;` | 5 |
|
||||
| `Lbm/a;` | `a` | `:Lcom/aspiro/wamp/model/Album;` | 4 |
|
||||
| `Lbm/f;` | `a` | `:Lcom/aspiro/wamp/mix/model/Mix;` | 4 |
|
||||
| `Lbm/g;` | `a` | `:Lcom/aspiro/wamp/model/Playlist;` | 4 |
|
||||
| `Lbm/k;` | `a` | `:Lcom/aspiro/wamp/model/Track;` | 4 |
|
||||
| `Laf/b;` | `h` | `:Z` | 4 |
|
||||
| `Laf/b;` | `f` | `:Z` | 4 |
|
||||
| `Laf/b;` | `g` | `:Ljava/lang/String;` | 4 |
|
||||
| `Lcom/aspiro/wamp/playqueue/source/model/b;` | `o` | `(Lcom/tidal/android/navigation/NavigationInfo;Ljava/lang/String;Ljava/lang/String;)Lcom/aspiro/wamp/playqueue/source/model/ItemSource;` | 4 |
|
||||
| `Lcom/aspiro/wamp/search/v2/UnifiedSearchView;` | `N` | `()Ltl/j;` | 4 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/f;` | `a` | `:Ljava/lang/String;` | 4 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/s$a;` | `m` | `:Lcom/tidal/android/feature/playerscreen/ui/p;` | 4 |
|
||||
| `Ln30/p;` | `a` | `:J` | 4 |
|
||||
| `Lae0/h;` | `a` | `(Ln30/k;)Lcom/aspiro/wamp/model/Playlist;` | 4 |
|
||||
| `Ln6/b$a;` | `o` | `:I` | 4 |
|
||||
| `Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$b;` | `s` | `:I` | 4 |
|
||||
| `Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a;` | `c` | `:Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$b;` | 4 |
|
||||
| `Lxc/a;` | `k` | `:Z` | 4 |
|
||||
| `Lm70/a;` | `a` | `:Lcom/aspiro/wamp/model/Album;` | 3 |
|
||||
| `Lm70/c;` | `a` | `:Lcom/aspiro/wamp/mix/model/Mix;` | 3 |
|
||||
| `Lm70/d;` | `a` | `:Lcom/aspiro/wamp/model/Playlist;` | 3 |
|
||||
| `Li50/v;` | `a` | `(Li50/u;)Ljava/lang/String;` | 3 |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/ItemTouchHelperCallbackImpl;` | `i` | `:Z` | 3 |
|
||||
| `Lcom/aspiro/wamp/player/c;` | `b` | `()Lcom/aspiro/wamp/model/MediaItemParent;` | 3 |
|
||||
| `Lcom/aspiro/wamp/playqueue/x0;` | `a` | `()Lcom/aspiro/wamp/player/c;` | 3 |
|
||||
| `Lcom/aspiro/wamp/playqueue/source/model/ItemSource$NavigationType$a;` | `a` | `(Ljava/lang/String;)Lcom/aspiro/wamp/playqueue/source/model/ItemSource$NavigationType;` | 3 |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/b$b;` | `a` | `:Lcom/tidal/android/feature/appscaffold/ui/b$b;` | 3 |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/r$c;` | `a` | `:Lcom/tidal/android/feature/appscaffold/ui/r$c;` | 3 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/composables/e3;` | `a` | `(ILjava/lang/String;ZZLyl0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V` | 3 |
|
||||
| `Lh4/a;` | `b` | `:Lo3/a$a;` | 3 |
|
||||
| `Lh4/a;` | `h` | `:Lu3/a$a;` | 3 |
|
||||
| `Lae0/a;` | `b` | `(Ln30/a;)Lcom/aspiro/wamp/model/Album;` | 3 |
|
||||
| `Lae0/g;` | `b` | `(Ln30/j;)Lcom/aspiro/wamp/mix/model/Mix;` | 3 |
|
||||
| `Ls30/e$d;` | `a` | `:Ljava/lang/String;` | 3 |
|
||||
| `Ls30/e$d;` | `g` | `:Z` | 3 |
|
||||
| `Lo3/a$a;` | `a` | `(Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)Lo3/a;` | 3 |
|
||||
| `Ln6/b$a;` | `d` | `:I` | 3 |
|
||||
| `Lu3/a$a;` | `a` | `(Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)Lu3/a;` | 3 |
|
||||
| `Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$b;` | `t` | `:Ljava/lang/String;` | 3 |
|
||||
| `Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a;` | `a` | `:Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$a;` | 3 |
|
||||
| `Lte/a;` | `c` | `:Lcom/aspiro/wamp/mix/model/Mix;` | 3 |
|
||||
| `Lcoil/request/h$a;` | `b` | `:Lcoil/request/b;` | 2 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/FavoriteTracksFragment;` | `Y` | `(ILcom/aspiro/wamp/model/FavoriteTrack;)Z` | 2 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/FavoriteTracksFragment;` | `d` | `:Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/g0;` | 2 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/FavoriteTracksFragment;` | `l` | `:Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/m;` | 2 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/g0;` | `b` | `(I)Lcom/aspiro/wamp/model/FavoriteTrack;` | 2 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/m;` | `f` | `:Landroidx/recyclerview/widget/RecyclerView;` | 2 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/mixesandradios/MyMixesAndRadioView;` | `c` | `:Lne/f;` | 2 |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/ItemTouchHelperCallbackImpl;` | `h` | `:Landroid/graphics/drawable/Drawable;` | 2 |
|
||||
| `Lcom/aspiro/wamp/playlist/ui/items/PlaylistItemCollectionView;` | `h` | `:Lcom/tidal/android/navigation/NavigationInfo;` | 2 |
|
||||
| `Lcom/aspiro/wamp/playlist/ui/items/PlaylistItemCollectionView;` | `c` | `:Lcom/aspiro/wamp/playlist/ui/items/a;` | 2 |
|
||||
| `Lcom/aspiro/wamp/search/v2/UnifiedSearchView;` | `g` | `:Lio/reactivex/disposables/CompositeDisposable;` | 2 |
|
||||
| `Lcom/aspiro/wamp/search/v2/d;` | `e` | `:Lcom/aspiro/wamp/model/AvailabilityInteractor;` | 2 |
|
||||
| `Lcom/squareup/ui/market/core/theme/MarketStylesheet$c;` | `p0` | `()Ll10/a;` | 2 |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/b$a;` | `a` | `:Lcom/tidal/android/feature/appscaffold/ui/b$a;` | 2 |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/composable/a;` | `c` | `:Landroidx/compose/foundation/shape/RoundedCornerShape;` | 2 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/composables/BroadcastButtonKt;` | `b` | `(Lcom/tidal/android/feature/playerscreen/ui/b;Lyl0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V` | 2 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/composables/u1;` | `b` | `:I` | 2 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/composables/u1;` | `d` | `:J` | 2 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/composables/u1;` | `e` | `:J` | 2 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/composables/e3;` | `b` | `(Lcom/tidal/android/feature/playerscreen/ui/model/PlayerBackgroundStyle;JILjava/lang/String;ZZLyl0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V` | 2 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/composables/h3;` | `a` | `(ILyl0/a;Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)V` | 2 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/i$a;` | `b` | `:I` | 2 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/i$a;` | `a` | `:Ljava/lang/String;` | 2 |
|
||||
| `Lcom/tidal/android/feature/search/ui/SearchQuery;` | `a` | `:Ljava/lang/String;` | 2 |
|
||||
| `Lcom/tidal/android/feature/search/ui/SearchScreenViewModel;` | `m` | `:Lkotlinx/coroutines/flow/MutableStateFlow;` | 2 |
|
||||
| `Le5/d0$t2;` | `A2` | `()Lcom/aspiro/wamp/playqueue/x0;` | 2 |
|
||||
| `Lg9/u1;` | `b` | `:Ld40/a;` | 2 |
|
||||
| `Lm3/f$a;` | `a` | `(Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Lm3/f;` | 2 |
|
||||
| `Lm3/f;` | `b` | `(Landroidx/fragment/app/FragmentActivity;)V` | 2 |
|
||||
| `Ls30/e$a;` | `a` | `:J` | 2 |
|
||||
| `Ls30/e$a;` | `e` | `:Z` | 2 |
|
||||
| `Ls30/e$c;` | `a` | `:Ljava/lang/String;` | 2 |
|
||||
| `Ls30/e$c;` | `h` | `:Z` | 2 |
|
||||
| `Lu40/a;` | `a` | `:Ljava/lang/String;` | 2 |
|
||||
| `Ln6/b;` | `b` | `:J` | 2 |
|
||||
| `Ln6/g;` | `p` | `:Ljava/util/LinkedHashMap;` | 2 |
|
||||
| `Ltl/r;` | `a` | `:Ld40/a;` | 2 |
|
||||
| `Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$b;` | `g` | `:Lcom/aspiro/wamp/model/Availability;` | 2 |
|
||||
| `Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$b;` | `p` | `:Z` | 2 |
|
||||
| `Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a;` | `b` | `:J` | 2 |
|
||||
| `Lte/a;` | `f` | `:Z` | 2 |
|
||||
| `Lte/a;` | `a` | `:Ljava/lang/String;` | 2 |
|
||||
| `Lg20/a;` | `a` | `:I` | 1 |
|
||||
| `Lg20/b;` | `O` | `:Lg20/a;` | 1 |
|
||||
| `Ll70/c;` | `a` | `:Ljava/lang/String;` | 1 |
|
||||
| `Ll70/c;` | `e` | `:Lcom/tidal/android/navigation/NavigationInfo;` | 1 |
|
||||
| `Ll70/c;` | `b` | `:Ld40/a;` | 1 |
|
||||
| `Lm70/a;` | `c` | `:Z` | 1 |
|
||||
| `Lm70/a;` | `g` | `:I` | 1 |
|
||||
| `Lm70/c;` | `c` | `:I` | 1 |
|
||||
| `Lm70/d;` | `c` | `:I` | 1 |
|
||||
| `Lzh/e;` | `i` | `()Z` | 1 |
|
||||
| `Lzh/e;` | `h` | `(Z)V` | 1 |
|
||||
| `Lbm/a;` | `c` | `:Lcom/aspiro/wamp/model/Availability$Album;` | 1 |
|
||||
| `Lbm/i;` | `a` | `(Lbm/h;)Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;` | 1 |
|
||||
| `Lbm/k;` | `e` | `:Lcom/aspiro/wamp/model/Availability$MediaItem;` | 1 |
|
||||
| `Lbm/k;` | `n` | `:Lcom/aspiro/wamp/search/SearchDataSource;` | 1 |
|
||||
| `Ld3/f;` | `b` | `(Landroidx/fragment/app/FragmentActivity;)V` | 1 |
|
||||
| `Ld3/g$a;` | `a` | `(Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)Ld3/g;` | 1 |
|
||||
| `Ld3/g;` | `b` | `(Landroidx/fragment/app/FragmentActivity;)V` | 1 |
|
||||
| `Ld3/j$a;` | `a` | `(Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)Ld3/j;` | 1 |
|
||||
| `Ld3/j;` | `b` | `(Landroidx/fragment/app/FragmentActivity;)V` | 1 |
|
||||
| `Li50/e0;` | `b` | `:Ljava/lang/String;` | 1 |
|
||||
| `Li50/e0;` | `f` | `:Ljava/util/ArrayList;` | 1 |
|
||||
| `Li50/e0;` | `a` | `:Ljava/lang/String;` | 1 |
|
||||
| `Li50/e0;` | `e` | `:I` | 1 |
|
||||
| `Li50/e0;` | `c` | `:Ljava/lang/String;` | 1 |
|
||||
| `Li50/e0;` | `g` | `:Ljava/lang/String;` | 1 |
|
||||
| `Li50/f0;` | `b` | `:Ljava/lang/String;` | 1 |
|
||||
| `Li50/f0;` | `g` | `:Ljava/util/ArrayList;` | 1 |
|
||||
| `Li50/f0;` | `a` | `:Ljava/lang/String;` | 1 |
|
||||
| `Li50/f0;` | `f` | `:I` | 1 |
|
||||
| `Li50/f0;` | `c` | `:Ljava/lang/String;` | 1 |
|
||||
| `Li50/d;` | `b` | `:Ljava/lang/String;` | 1 |
|
||||
| `Li50/d;` | `f` | `:Ljava/util/ArrayList;` | 1 |
|
||||
| `Li50/d;` | `a` | `:Ljava/lang/String;` | 1 |
|
||||
| `Li50/d;` | `e` | `:I` | 1 |
|
||||
| `Li50/d;` | `c` | `:Ljava/lang/String;` | 1 |
|
||||
| `Li50/d;` | `g` | `:Ljava/lang/String;` | 1 |
|
||||
| `Li50/f;` | `b` | `:Ljava/lang/String;` | 1 |
|
||||
| `Li50/f;` | `g` | `:Ljava/util/ArrayList;` | 1 |
|
||||
| `Li50/f;` | `a` | `:Ljava/lang/String;` | 1 |
|
||||
| `Li50/f;` | `d` | `:I` | 1 |
|
||||
| `Li50/f;` | `e` | `:Ljava/lang/String;` | 1 |
|
||||
| `Li50/y;` | `b` | `:Ljava/lang/String;` | 1 |
|
||||
| `Li50/y;` | `f` | `:Ljava/util/ArrayList;` | 1 |
|
||||
| `Li50/y;` | `a` | `:Ljava/lang/String;` | 1 |
|
||||
| `Li50/y;` | `e` | `:I` | 1 |
|
||||
| `Lud0/b$a;` | `a` | `()Lud0/b;` | 1 |
|
||||
| `Lud0/b;` | `a` | `()Lpd0/e;` | 1 |
|
||||
| `Lcoil/e;` | `b` | `(Lcoil/request/h;)Lcoil/request/d;` | 1 |
|
||||
| `Lcoil/request/b;` | `a` | `:Lkotlinx/coroutines/CoroutineDispatcher;` | 1 |
|
||||
| `Lcoil/request/b;` | `b` | `:Lkotlinx/coroutines/CoroutineDispatcher;` | 1 |
|
||||
| `Lcoil/request/b;` | `c` | `:Lkotlinx/coroutines/CoroutineDispatcher;` | 1 |
|
||||
| `Lcoil/request/b;` | `d` | `:Lkotlinx/coroutines/CoroutineDispatcher;` | 1 |
|
||||
| `Lcoil/request/b;` | `e` | `:Le0/c$a;` | 1 |
|
||||
| `Lcoil/request/b;` | `f` | `:Lcoil/size/Precision;` | 1 |
|
||||
| `Lcoil/request/b;` | `g` | `:Landroid/graphics/Bitmap$Config;` | 1 |
|
||||
| `Lcoil/request/b;` | `h` | `:Z` | 1 |
|
||||
| `Lcoil/request/b;` | `i` | `:Lcoil/request/CachePolicy;` | 1 |
|
||||
| `Lcoil/request/b;` | `j` | `:Lcoil/request/CachePolicy;` | 1 |
|
||||
| `Lcoil/request/h$a;` | `d` | `:Lc0/c;` | 1 |
|
||||
| `Lcoil/request/h$a;` | `a` | `()Lcoil/request/h;` | 1 |
|
||||
| `Lcoil/request/h;` | `a` | `(Lcoil/request/h;)Lcoil/request/h$a;` | 1 |
|
||||
| `Lcom/aspiro/wamp/contextmenu/item/playlist/f;` | `b` | `(Landroidx/fragment/app/FragmentActivity;)V` | 1 |
|
||||
| `Lcom/aspiro/wamp/contextmenu/item/playlist/h$a;` | `a` | `(Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)Lcom/aspiro/wamp/contextmenu/item/playlist/h;` | 1 |
|
||||
| `Lcom/aspiro/wamp/contextmenu/item/playlist/h;` | `b` | `(Landroidx/fragment/app/FragmentActivity;)V` | 1 |
|
||||
| `Lcom/aspiro/wamp/contextmenu/item/playlist/z$a;` | `a` | `(Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)Lcom/aspiro/wamp/contextmenu/item/playlist/z;` | 1 |
|
||||
| `Lcom/aspiro/wamp/contextmenu/item/playlist/z;` | `b` | `(Landroidx/fragment/app/FragmentActivity;)V` | 1 |
|
||||
| `Lz3/b;` | `b` | `:Ldagger/internal/j;` | 1 |
|
||||
| `Lz3/c;` | `a` | `:Lz3/b;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/albums/myalbums/MyAlbumsView;` | `h` | `:Lyc/f;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/albums/myalbums/MyAlbumsView;` | `N` | `()Lg40/d;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/albums/myalbums/MyAlbumsView;` | `c` | `:Ldd/c;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/albums/myalbums/MyAlbumsView;` | `j` | `:Lio/reactivex/disposables/CompositeDisposable;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/albums/search/SearchAlbumsView;` | `f` | `:Lgd/e;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/albums/search/SearchAlbumsView;` | `N` | `()Lg40/d;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/albums/search/SearchAlbumsView;` | `c` | `:Ljd/b;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/albums/search/SearchAlbumsView;` | `g` | `:Lio/reactivex/disposables/CompositeDisposable;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/FavoriteTracksFragment;` | `Z` | `(ILcom/aspiro/wamp/model/FavoriteTrack;I)V` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/FavoriteTracksFragment;` | `f` | `:Lcom/aspiro/wamp/model/AvailabilityInteractor;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/FavoriteTracksFragment;` | `b` | `:Ld40/a;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/FavoriteTracksFragment;` | `x` | `(Landroidx/recyclerview/widget/RecyclerView;ILandroid/view/View;)V` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/FavoriteTracksFragment;` | `N` | `()Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/n;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/g0;` | `m` | `:Lcom/tidal/android/navigation/NavigationInfo;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/g0;` | `k` | `:Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/mixesandradios/MyMixesAndRadioView;` | `N` | `()Lg40/d;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/mixesandradios/MyMixesAndRadioView;` | `h` | `:Lio/reactivex/disposables/CompositeDisposable;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/playlists/myplaylists/MyPlaylistsView;` | `j` | `:Lcom/aspiro/wamp/mycollection/subpages/playlists/myplaylists/h;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/playlists/myplaylists/MyPlaylistsView;` | `N` | `()Lg40/d;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/playlists/myplaylists/MyPlaylistsView;` | `d` | `:Lff/c;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/playlists/searchplaylists/SearchPlaylistsView;` | `g` | `:Luf/d;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/playlists/searchplaylists/SearchPlaylistsView;` | `N` | `()Lg40/d;` | 1 |
|
||||
| `Lcom/aspiro/wamp/mycollection/subpages/playlists/searchplaylists/SearchPlaylistsView;` | `c` | `:Lxf/c;` | 1 |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/ItemTouchHelperCallbackImpl;` | `c` | `:Landroid/graphics/drawable/ColorDrawable;` | 1 |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/ItemTouchHelperCallbackImpl;` | `d` | `:Lcom/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/ItemTouchHelperCallbackImpl$ActionType;` | 1 |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/suggestions/e1;` | `o` | `:Ljava/lang/Object;` | 1 |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/suggestions/e1;` | `j` | `:Lcom/tidal/android/navigation/NavigationInfo;` | 1 |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/suggestions/i;` | `d` | `:Lcom/aspiro/wamp/model/AvailabilityInteractor;` | 1 |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/suggestions/i;` | `c` | `:Lcom/aspiro/wamp/nowplaying/view/suggestions/m;` | 1 |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/suggestions/k;` | `a` | `(Lcom/aspiro/wamp/nowplaying/view/suggestions/j;)V` | 1 |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/suggestions/q0;` | `d` | `:Lcom/aspiro/wamp/model/AvailabilityInteractor;` | 1 |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/suggestions/q0;` | `c` | `:Lcom/aspiro/wamp/nowplaying/view/suggestions/m;` | 1 |
|
||||
| `Lcom/aspiro/wamp/nowplaying/view/suggestions/q0;` | `M` | `()Lcom/aspiro/wamp/nowplaying/view/suggestions/m;` | 1 |
|
||||
| `Lcom/aspiro/wamp/playback/e0;` | `a` | `(Ljava/lang/String;Lcom/tidal/android/navigation/NavigationInfo;ZLjava/lang/String;)Lio/reactivex/disposables/Disposable;` | 1 |
|
||||
| `Lcom/aspiro/wamp/playback/e;` | `a` | `(ILcom/tidal/android/navigation/NavigationInfo;ZLjava/lang/String;)Lhu/akarnokd/rxjava/interop/f;` | 1 |
|
||||
| `Lcom/aspiro/wamp/playback/k0;` | `c` | `(Lcom/aspiro/wamp/model/Playlist;Lcom/tidal/android/navigation/NavigationInfo;)V` | 1 |
|
||||
| `Lcom/aspiro/wamp/playlist/ui/items/PlaylistItemCollectionView;` | `d` | `:Lcom/aspiro/wamp/model/AvailabilityInteractor;` | 1 |
|
||||
| `Lcom/aspiro/wamp/playlist/ui/items/a;` | `l` | `()Lcom/aspiro/wamp/playlist/viewmodel/PlaylistCollectionViewModel;` | 1 |
|
||||
| `Lcom/aspiro/wamp/playlist/ui/items/a;` | `c` | `(Lcom/aspiro/wamp/model/Track;)V` | 1 |
|
||||
| `Lcom/aspiro/wamp/playlist/ui/items/a;` | `j` | `(I)V` | 1 |
|
||||
| `Lcom/aspiro/wamp/playqueue/source/model/b;` | `c` | `(Lcom/aspiro/wamp/model/Album;Lcom/tidal/android/navigation/NavigationInfo;)Lcom/aspiro/wamp/playqueue/source/model/AlbumSource;` | 1 |
|
||||
| `Lcom/aspiro/wamp/playqueue/source/model/b;` | `f` | `(Lcom/aspiro/wamp/model/Playlist;Lcom/tidal/android/navigation/NavigationInfo;)Lcom/aspiro/wamp/playqueue/source/model/PlaylistSource;` | 1 |
|
||||
| `Lcom/aspiro/wamp/playqueue/source/model/b;` | `p` | `(Ljava/lang/String;Ljava/util/List;Lcom/tidal/android/navigation/NavigationInfo;)Lcom/aspiro/wamp/playqueue/source/model/ItemSource;` | 1 |
|
||||
| `Lcom/aspiro/wamp/playqueue/source/model/b;` | `m` | `(Lcom/tidal/android/navigation/NavigationInfo;)Lcom/aspiro/wamp/playqueue/source/model/MyItemsSource;` | 1 |
|
||||
| `Lcom/aspiro/wamp/search/v2/UnifiedSearchView;` | `c` | `:Ltl/r;` | 1 |
|
||||
| `Lcom/aspiro/wamp/search/v2/model/UnifiedSearchQuery;` | `a` | `:Ljava/lang/String;` | 1 |
|
||||
| `Lcom/aspiro/wamp/util/a0;` | `c` | `(I)Ljava/lang/String;` | 1 |
|
||||
| `Lcom/squareup/ui/market/components/MarketIconButtonKt;` | `P` | `(Lcom/squareup/ui/market/core/theme/MarketStylesheet;Lcom/squareup/ui/market/core/components/properties/IconButton$Size;Lcom/squareup/ui/market/core/components/properties/IconButton$Rank;Lcom/squareup/ui/market/core/components/properties/IconButton$Variant;ILjava/lang/Object;)Lw10/u1;` | 1 |
|
||||
| `Lcom/squareup/ui/market/components/MarketIconButtonKt;` | `c` | `(Lyl0/a;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLcom/squareup/ui/market/components/n;Lyl0/a;Ljava/lang/String;Lw10/u1;Lyl0/p;Landroidx/compose/runtime/Composer;II)V` | 1 |
|
||||
| `Lcom/squareup/ui/market/components/MarketLabelKt;` | `e` | `(Ljava/lang/String;Landroidx/compose/ui/Modifier;IILcom/squareup/ui/market/text/a;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lyl0/l;Lw10/c2;Landroidx/compose/runtime/Composer;II)V` | 1 |
|
||||
| `Lcom/squareup/ui/market/core/theme/k;` | `e` | `:Lcom/squareup/ui/market/core/theme/k$a;` | 1 |
|
||||
| `Lcom/squareup/ui/market/core/theme/d0;` | `t` | `(Lcom/squareup/ui/market/core/theme/k$a;Landroidx/compose/runtime/Composer;I)Lcom/squareup/ui/market/core/theme/MarketStylesheet;` | 1 |
|
||||
| `Lrx/functions/u;` | `b` | `(Landroid/graphics/Bitmap;I)Landroid/graphics/Bitmap;` | 1 |
|
||||
| `Lcom/tidal/android/core/debug/DebugFeatureInteractorDefault;` | `a` | `:Lcom/tidal/android/featureflags/m;` | 1 |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/c;` | `a` | `:Lcom/aspiro/wamp/core/l;` | 1 |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/composables/compactgridcard/d;` | `b` | `:Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/c;` | 1 |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/composables/compactgridcard/d;` | `c` | `:Ljava/lang/String;` | 1 |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/modules/artisttrackcredits/ArtistTrackCreditsModuleManager;` | `b` | `:Lcom/tidal/android/dynamicpages/ui/b;` | 1 |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/a;` | `b` | `:Lcom/tidal/android/dynamicpages/ui/b;` | 1 |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/c;` | `f` | `:Lyl0/q;` | 1 |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/c;` | `a` | `:Ljava/lang/String;` | 1 |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/modules/publicplaylistlist/PublicPlaylistListModuleManager;` | `f` | `:Lcom/tidal/android/dynamicpages/ui/b;` | 1 |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/modules/tracklist/TrackListModuleManager;` | `b` | `:Lcom/tidal/android/dynamicpages/ui/b;` | 1 |
|
||||
| `Lcom/tidal/android/dynamicpages/ui/modules/verticallistcard/VerticalListCardModuleManager;` | `e` | `:Lcom/tidal/android/dynamicpages/ui/b;` | 1 |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/composable/g;` | `a` | `:Lyl0/l;` | 1 |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/q;` | `d` | `:Ljava/lang/String;` | 1 |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/q;` | `e` | `:Z` | 1 |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/r$a;` | `a` | `:Lcom/tidal/android/feature/appscaffold/ui/r$a;` | 1 |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/t;` | `b` | `:Lcom/tidal/android/feature/appscaffold/ui/q;` | 1 |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/t;` | `c` | `:Lcom/tidal/android/feature/appscaffold/ui/MiniPlayerContract$PlayState;` | 1 |
|
||||
| `Lcom/tidal/android/feature/appscaffold/ui/t;` | `a` | `:Lcom/tidal/android/feature/appscaffold/ui/MiniPlayerContract$ItemType;` | 1 |
|
||||
| `Lcom/tidal/android/feature/feed/ui/FeedView;` | `d` | `:Lg70/b;` | 1 |
|
||||
| `Lcom/tidal/android/feature/feed/ui/FeedView;` | `c` | `:Ll70/c;` | 1 |
|
||||
| `Lcom/tidal/android/feature/feed/ui/FeedView;` | `f` | `:Lio/reactivex/disposables/CompositeDisposable;` | 1 |
|
||||
| `Lcom/tidal/android/feature/feed/ui/c;` | `c` | `:Lk70/a;` | 1 |
|
||||
| `Lcom/tidal/android/feature/feed/ui/viewstates/UpdatedIntervals$a;` | `a` | `(I)Ljava/lang/String;` | 1 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel$observeLyricsProgress$1$a;` | `a` | `:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;` | 1 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;` | `W` | `:Lkotlinx/coroutines/flow/StateFlow;` | 1 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;` | `T` | `:Lkotlin/i;` | 1 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;` | `a` | `:Lzh/e;` | 1 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;` | `R` | `:Lkotlinx/coroutines/flow/MutableStateFlow;` | 1 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;` | `N` | `:Lkotlinx/coroutines/flow/MutableStateFlow;` | 1 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/i0;` | `b` | `:Lcom/tidal/android/feature/playerscreen/ui/s$a;` | 1 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/composables/CoverPagerKt;` | `c` | `(Lcom/tidal/android/feature/playerscreen/ui/d;Lyl0/l;FLandroidx/compose/ui/Modifier;ZLandroidx/compose/runtime/Composer;II)V` | 1 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/composables/LyricsKt;` | `a` | `(Lcom/tidal/android/feature/playerscreen/ui/g;Lyl0/l;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;Lyl0/l;Landroidx/compose/runtime/Composer;II)V` | 1 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/composables/anim/BouncePressKt;` | `a` | `(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;` | 1 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/composables/o4;` | `a` | `(ILyl0/a;Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)V` | 1 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/composables/c1;` | `a` | `(Landroidx/compose/ui/Modifier;Lyl0/a;ZLandroidx/compose/runtime/Composer;I)V` | 1 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/composables/f1;` | `a` | `:F` | 1 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/composables/g4;` | `g` | `:F` | 1 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/g$c;` | `c` | `:I` | 1 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/p;` | `a` | `:Ljava/lang/String;` | 1 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/s$a;` | `j` | `:Lcom/tidal/android/feature/playerscreen/ui/g;` | 1 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/s$a;` | `d` | `:Lcom/tidal/android/feature/playerscreen/ui/b;` | 1 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/s$a;` | `i` | `:Z` | 1 |
|
||||
| `Lcom/tidal/android/feature/playerscreen/ui/s$a;` | `c` | `:Lcom/tidal/android/feature/playerscreen/ui/d;` | 1 |
|
||||
| `Lcom/tidal/android/feature/search/ui/SearchScreenViewModel;` | `n` | `:Ljava/util/List;` | 1 |
|
||||
| `Lcom/tidal/android/feature/search/ui/SearchScreenViewModel;` | `d` | `:Lcom/tidal/android/feature/search/ui/e;` | 1 |
|
||||
| `Lcom/tidal/android/feature/search/ui/SearchScreenViewModel;` | `f` | `:Lcom/tidal/android/feature/search/ui/f;` | 1 |
|
||||
| `Lcom/tidal/android/feature/search/ui/f;` | `a` | `(JLn30/p;Ljava/lang/String;)V` | 1 |
|
||||
| `Lcom/tidal/android/feature/viewall/ui/ViewAllScreenViewModel;` | `n` | `:Lcom/tidal/android/feature/viewall/ui/c;` | 1 |
|
||||
| `Lcom/tidal/android/feature/viewall/ui/ViewAllScreenViewModel;` | `f` | `:Lcom/tidal/android/feature/viewall/ui/u;` | 1 |
|
||||
| `Lcom/tidal/android/feature/viewall/ui/c;` | `f` | `:Ljava/util/ArrayList;` | 1 |
|
||||
| `Lcom/tidal/android/feature/viewall/ui/e$d;` | `a` | `:Ljava/lang/Object;` | 1 |
|
||||
| `Lcom/tidal/android/image/coil/base/CoilImageLoader;` | `a` | `:Lcoil/e;` | 1 |
|
||||
| `Lcom/tidal/android/image/coil/c;` | `a` | `(Lpd0/g;Landroidx/compose/ui/layout/ContentScale;)Lcoil/request/h;` | 1 |
|
||||
| `Lvd0/c;` | `a` | `:Ljava/lang/String;` | 1 |
|
||||
| `Le5/d0$t2;` | `e1` | `:Ldagger/internal/j;` | 1 |
|
||||
| `Le5/d0$t2;` | `F3` | `()Lcom/aspiro/wamp/playback/e;` | 1 |
|
||||
| `Le5/d0$t2;` | `I3` | `()Lcom/aspiro/wamp/playback/e0;` | 1 |
|
||||
| `Le5/d0$t2;` | `w8` | `:Ldagger/internal/f;` | 1 |
|
||||
| `Le5/d0$t2;` | `J3` | `()Lcom/aspiro/wamp/playback/k0;` | 1 |
|
||||
| `Le5/d0$t2;` | `v8` | `:Ldagger/internal/f;` | 1 |
|
||||
| `Le5/d0$t2;` | `K9` | `:Ldagger/internal/f;` | 1 |
|
||||
| `Le5/d0$t2;` | `k9` | `:Ldagger/internal/f;` | 1 |
|
||||
| `Ldd/c;` | `a` | `:Ld40/a;` | 1 |
|
||||
| `Ldd/c;` | `d` | `:Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;` | 1 |
|
||||
| `Ldd/c;` | `c` | `:Lcom/tidal/android/navigation/NavigationInfo;` | 1 |
|
||||
| `Leh/b;` | `b` | `:F` | 1 |
|
||||
| `Leh/j;` | `a` | `()V` | 1 |
|
||||
| `Leh/j;` | `d` | `:Lio/reactivex/subjects/BehaviorSubject;` | 1 |
|
||||
| `Lh4/a;` | `q` | `(Landroidx/fragment/app/FragmentActivity;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z` | 1 |
|
||||
| `Lh4/a;` | `m` | `:Lz3/a$a;` | 1 |
|
||||
| `Lff/c;` | `e` | `:Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;` | 1 |
|
||||
| `Lff/c;` | `d` | `:Lcom/tidal/android/navigation/NavigationInfo;` | 1 |
|
||||
| `Lk3/m$a;` | `a` | `(Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)Lk3/m;` | 1 |
|
||||
| `Lk3/m;` | `b` | `(Landroidx/fragment/app/FragmentActivity;)V` | 1 |
|
||||
| `Lcom/aspiro/wamp/contextmenu/item/playlist/k$a;` | `a` | `(Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)Lk3/p;` | 1 |
|
||||
| `Lk3/p;` | `b` | `(Landroidx/fragment/app/FragmentActivity;)V` | 1 |
|
||||
| `Lcom/aspiro/wamp/contextmenu/item/playlist/AddToFavorites$a;` | `a` | `(Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)Lk3/s;` | 1 |
|
||||
| `Lk3/s;` | `b` | `(Landroidx/fragment/app/FragmentActivity;)V` | 1 |
|
||||
| `Lk5/f;` | `l` | `(Ljava/lang/String;)Lcom/aspiro/wamp/dynamicpages/data/model/Module;` | 1 |
|
||||
| `Ljd/b;` | `a` | `:Ld40/a;` | 1 |
|
||||
| `Ljd/b;` | `d` | `:Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;` | 1 |
|
||||
| `Ljd/b;` | `c` | `:Lcom/tidal/android/navigation/NavigationInfo;` | 1 |
|
||||
| `Lm3/d;` | `b` | `(Landroidx/fragment/app/FragmentActivity;)V` | 1 |
|
||||
| `Lm3/f;` | `j` | `:Lcom/aspiro/wamp/playqueue/x0;` | 1 |
|
||||
| `Lm3/i$a;` | `a` | `(Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Lm3/i;` | 1 |
|
||||
| `Lm3/i;` | `b` | `(Landroidx/fragment/app/FragmentActivity;)V` | 1 |
|
||||
| `Lkb/f;` | `c` | `:Ljava/util/Map;` | 1 |
|
||||
| `Leb0/a;` | `a` | `:Ln30/o;` | 1 |
|
||||
| `Lcom/squareup/experiments/x;` | `c` | `(Leb0/e;)Ljava/lang/String;` | 1 |
|
||||
| `Lm8/d;` | `f` | `:Lcom/aspiro/wamp/model/MediaItem;` | 1 |
|
||||
| `Lo3/a;` | `m` | `:Lcom/aspiro/wamp/module/album/AlbumProvider;` | 1 |
|
||||
| `Lo3/a;` | `f` | `:Ld3/g$a;` | 1 |
|
||||
| `Lo3/a;` | `e` | `:Ld3/j$a;` | 1 |
|
||||
| `Lo4/g;` | `e` | `:Lo4/g$e;` | 1 |
|
||||
| `Lo4/g;` | `b` | `:I` | 1 |
|
||||
| `Ln6/g;` | `g` | `:Lcom/aspiro/wamp/model/AvailabilityInteractor;` | 1 |
|
||||
| `Ln6/g;` | `e` | `(ILjava/lang/String;)V` | 1 |
|
||||
| `Ln6/g;` | `m` | `:Lcom/tidal/android/navigation/NavigationInfo;` | 1 |
|
||||
| `Lgb0/x;` | `a` | `(Lhb0/b$e;Lyl0/a;Landroidx/compose/ui/Modifier;Lyl0/a;Landroidx/compose/runtime/Composer;I)V` | 1 |
|
||||
| `Lgb0/d0;` | `a` | `(Lhb0/b$f;Lyl0/a;Landroidx/compose/ui/Modifier;Lyl0/a;Landroidx/compose/runtime/Composer;I)V` | 1 |
|
||||
| `Lhb0/b$a;` | `a` | `:J` | 1 |
|
||||
| `Lhb0/b$a;` | `f` | `:Z` | 1 |
|
||||
| `Lhb0/b$e;` | `a` | `:Ljava/lang/String;` | 1 |
|
||||
| `Lhb0/b$f;` | `a` | `:Ljava/lang/String;` | 1 |
|
||||
| `Lhb0/b$i;` | `a` | `:J` | 1 |
|
||||
| `Lhb0/b$i;` | `i` | `:Z` | 1 |
|
||||
| `Lhd0/a;` | `a` | `:Ln30/o;` | 1 |
|
||||
| `Lne/f;` | `a` | `:Ld40/a;` | 1 |
|
||||
| `Lne/f;` | `b` | `:Lcom/tidal/android/navigation/NavigationInfo;` | 1 |
|
||||
| `Lw10/c2;` | `g` | `(Lw10/c2;Lw10/s4;Ll10/d;Lcom/squareup/ui/market/core/text/MarketTextAlignment;Lcom/squareup/ui/market/core/text/MarketTextTransform;Lw10/r4;ILjava/lang/Object;)Lw10/c2;` | 1 |
|
||||
| `Lra/d;` | `b` | `:Lcom/tidal/android/navigation/NavigationInfo;` | 1 |
|
||||
| `Ltl/h;` | `e` | `(Lcom/aspiro/wamp/search/v2/a;)V` | 1 |
|
||||
| `Ltl/j;` | `c` | `()Lcom/aspiro/wamp/search/v2/model/UnifiedSearchQuery;` | 1 |
|
||||
| `Ltl/r;` | `c` | `:Lcom/tidal/android/navigation/NavigationInfo;` | 1 |
|
||||
| `Lu3/a;` | `j` | `:Lk3/m$a;` | 1 |
|
||||
| `Lu3/a;` | `e` | `:Lcom/aspiro/wamp/contextmenu/item/playlist/k$a;` | 1 |
|
||||
| `Lu3/a;` | `d` | `:Lcom/aspiro/wamp/contextmenu/item/playlist/AddToFavorites$a;` | 1 |
|
||||
| `Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$a;` | `g` | `(ILjava/lang/String;)V` | 1 |
|
||||
| `Lu5/g;` | `h` | `:Lcom/aspiro/wamp/model/AvailabilityInteractor;` | 1 |
|
||||
| `Lu5/g;` | `j` | `:Lcom/tidal/android/navigation/NavigationInfo;` | 1 |
|
||||
| `Lv9/e;` | `b` | `:Lcom/tidal/android/navigation/NavigationInfo;` | 1 |
|
||||
| `Lv9/e;` | `a` | `:Lcom/aspiro/wamp/core/l;` | 1 |
|
||||
| `Ltn0/a;` | `c` | `(Ljava/lang/Iterable;)Ltn0/b;` | 1 |
|
||||
| `Lk70/a;` | `c` | `:Lcom/aspiro/wamp/model/AvailabilityInteractor;` | 1 |
|
||||
| `Lxf/c;` | `c` | `:Lcom/tidal/android/navigation/NavigationInfo;` | 1 |
|
||||
|
||||
## 3. Rolled patch target classes (65)
|
||||
|
||||
`--- a/` headers naming an obfuscated class. If these move the hunk cannot even be located.
|
||||
|
||||
| target | hooked by |
|
||||
|---|---|
|
||||
| `yj0/e.smali` | `integration-pebble-playback.patch` |
|
||||
| `vf0/h.smali` | `lyrics-rl-api-isrc.patch` |
|
||||
| `com/aspiro/wamp/mycollection/subpages/albums/myalbums/MyAlbumsView.smali` | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `com/aspiro/wamp/mycollection/subpages/albums/search/SearchAlbumsView.smali` | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `com/aspiro/wamp/mycollection/subpages/favoritetracks/FavoriteTracksFragment.smali` | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `com/aspiro/wamp/mycollection/subpages/mixesandradios/MyMixesAndRadioView.smali` | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `com/aspiro/wamp/mycollection/subpages/playlists/myplaylists/MyPlaylistsView.smali` | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `com/aspiro/wamp/mycollection/subpages/playlists/searchplaylists/SearchPlaylistsView.smali` | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `com/aspiro/wamp/nowplaying/view/playqueue/n.smali` | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `com/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/ItemTouchHelperCallbackImpl.smali` | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `com/aspiro/wamp/nowplaying/view/suggestions/i.smali` | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `com/aspiro/wamp/nowplaying/view/suggestions/q0.smali` | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `com/aspiro/wamp/playlist/ui/fragment/PlaylistFragment.smali` | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `com/aspiro/wamp/search/v2/UnifiedSearchView.smali` | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `com/tidal/android/core/debug/DebugFeatureInteractorDefault.smali` | `debug-menu-unlock.patch` |
|
||||
| `com/tidal/android/core/ui/composable/c0.smali` | `player-backdrop-kawarp.patch`, `player-backdrop-playback.patch` |
|
||||
| `com/tidal/android/dynamicpages/ui/composables/artisttrackcredits/h.smali` | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `com/tidal/android/dynamicpages/ui/composables/compactgridcard/CompactGridCardModuleRowKt.smali` | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `com/tidal/android/dynamicpages/ui/composables/compactgridcard/d.smali` | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `com/tidal/android/dynamicpages/ui/composables/publicplaylistlist/j.smali` | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `com/tidal/android/dynamicpages/ui/composables/verticallistcard/VerticalListCardKt.smali` | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `com/tidal/android/dynamicpages/ui/composables/verticaltracklist/i.smali` | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `com/tidal/android/dynamicpages/ui/modules/artisttrackcredits/ArtistTrackCreditsModuleManager$createModuleViewState$3.smali` | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `com/tidal/android/dynamicpages/ui/modules/compactgridcard/CompactGridCardModuleManager$createModuleViewState$2$2.smali` | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `com/tidal/android/dynamicpages/ui/modules/publicplaylistlist/PublicPlaylistListModuleManager$createModuleViewState$3.smali` | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `com/tidal/android/dynamicpages/ui/modules/tracklist/TrackListModuleManager$createModuleViewState$3.smali` | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `com/tidal/android/dynamicpages/ui/modules/verticallistcard/VerticalListCardModuleManager$createModuleViewState$3.smali` | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `com/tidal/android/feature/appscaffold/ui/MiniPlayerViewModel.smali` | `gestures/mini-player/mini-player-left-right-gesture.patch` |
|
||||
| `com/tidal/android/feature/appscaffold/ui/composable/MiniPlayerKt.smali` | `gestures/mini-player/mini-player-left-right-gesture.patch`, `gestures/mini-player/mini-player-up-gesture.patch` |
|
||||
| `com/tidal/android/feature/appscaffold/ui/composable/a.smali` | `mini-player-black.patch`, `mini-player-grey.patch` |
|
||||
| `com/tidal/android/feature/appscaffold/ui/composable/g.smali` | `gestures/mini-player/mini-player-left-right-gesture.patch` |
|
||||
| `com/tidal/android/feature/appscaffold/ui/composable/k.smali` | `gestures/mini-player/mini-player-up-gesture.patch`, `mini-player-black.patch`, `mini-player-dynamic-bg.patch`, `mini-player-floating-border.patch`, `mini-player-grey.patch` |
|
||||
| `com/tidal/android/feature/appscaffold/ui/q.smali` | `cover-capture.patch` |
|
||||
| `com/tidal/android/feature/appscaffold/ui/t.smali` | `cover-capture.patch` |
|
||||
| `com/tidal/android/feature/feed/ui/FeedView.smali` | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `com/tidal/android/feature/home/ui/composables/f.smali` | `home-backdrop.patch` |
|
||||
| `com/tidal/android/feature/home/ui/j.smali` | `home-backdrop.patch` |
|
||||
| `com/tidal/android/feature/home/ui/m.smali` | `home-backdrop.patch` |
|
||||
| `com/tidal/android/feature/playerscreen/ui/PlayerScreenKt$PlayerScreenPortrait$2$1.smali` | `lyrics-keep-controls-visible.patch` |
|
||||
| `com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali` | `lyrics-replace-lyrics-button.patch`, `lyrics-replace-share-button.patch`, `lyrics-sparkle-conditional-visibility.patch`, `player-backdrop-kawarp.patch`, `player-backdrop-playback.patch`, `player-hide-playing-from.patch`, `player-move-playing-from.patch`, `player-one-handed.patch` |
|
||||
| `com/tidal/android/feature/playerscreen/ui/PlayerViewModel$observeLyricsProgress$1$a.smali` | `lyrics-rl-api-observer.patch` |
|
||||
| `com/tidal/android/feature/playerscreen/ui/PlayerViewModel$special$$inlined$mapNotNull$1$2.smali` | `lyrics-rl-api.patch`, `player-quality-badge-colors.patch` |
|
||||
| `com/tidal/android/feature/playerscreen/ui/PlayerViewModel.smali` | `lyrics-keep-controls-visible.patch`, `lyrics-rl-api.patch`, `mini-player-dynamic-bg.patch` |
|
||||
| `com/tidal/android/feature/playerscreen/ui/i0.smali` | `lyrics-disable-cover.patch` |
|
||||
| `com/tidal/android/feature/playerscreen/ui/composables/LyricsKt.smali` | `gestures/lyrics/lyrics-gesture-scroll-guard.patch` |
|
||||
| `com/tidal/android/feature/playerscreen/ui/composables/SeekbarAndTimeKt.smali` | `player-quality-badge-colors.patch` |
|
||||
| `com/tidal/android/feature/playerscreen/ui/composables/v0.smali` | `player-favorite-heart.patch` |
|
||||
| `com/tidal/android/feature/playerscreen/ui/composables/u1.smali` | `lyrics-rl-api-syllable.patch`, `lyrics-rl-api-word.patch` |
|
||||
| `com/tidal/android/feature/playerscreen/ui/composables/c2.smali` | `player-move-playing-from.patch` |
|
||||
| `com/tidal/android/feature/playerscreen/ui/composables/f1.smali` | `lyrics-fade-region.patch` |
|
||||
| `com/tidal/android/feature/playerscreen/ui/i$a.smali` | `player-quality-badge-colors.patch` |
|
||||
| `com/tidal/android/feature/playerscreen/ui/z0.smali` | `lyrics-progress-pill.patch` |
|
||||
| `com/tidal/android/feature/search/ui/SearchScreenViewModel.smali` | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `com/tidal/android/feature/search/ui/composables/s0.smali` | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `com/tidal/android/feature/viewall/ui/ViewAllScreenViewModel.smali` | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `com/tidal/android/feature/viewall/ui/s.smali` | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `com/tidal/wave2/foundation/WaveScaffoldKt.smali` | `collection-backdrop.patch` |
|
||||
| `vd0/c.smali` | `player-backdrop-playback.patch` |
|
||||
| `h4/a.smali` | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `fg/e.smali` | `enable-legacy-ui.patch` |
|
||||
| `p30/h4.smali` | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `p30/t2.smali` | `gestures/queue/swipe-to-queue-compose.patch` |
|
||||
| `kb/f.smali` | `integration-waze-playback.patch` |
|
||||
| `o7/a.smali` | `gestures/queue/swipe-to-queue.patch` |
|
||||
| `u6/e.smali` | `gestures/queue/swipe-to-queue.patch` |
|
||||
|
||||
## 4. Occurrences inside .patch files - not marked inline (221)
|
||||
|
||||
| file | line | kind | symbols |
|
||||
|---|---:|---|---|
|
||||
| `cover-capture.patch` | 5 | context | `Lcom/tidal/android/feature/appscaffold/ui/q; d` |
|
||||
| `cover-capture.patch` | 11 | context | `Lcom/tidal/android/feature/appscaffold/ui/q; e` |
|
||||
| `cover-capture.patch` | 15 | context | `Lcom/tidal/android/feature/appscaffold/ui/q;` |
|
||||
| `debug-menu-unlock.patch` | 11 | context | `Lcom/tidal/android/featureflags/m; a` |
|
||||
| `debug-menu-unlock.patch` | 26 | context | `Lu40/a; a` |
|
||||
| `debug-menu-unlock.patch` | 36 | context | `Lu40/a; a` |
|
||||
| `gestures/lyrics/lyrics-gesture-scroll-guard.patch` | 12 | context | `Lyl0/l;` |
|
||||
| `gestures/mini-player/mini-player-left-right-gesture.patch` | 7 | added | `Lyl0/l;` |
|
||||
| `gestures/mini-player/mini-player-left-right-gesture.patch` | 16 | context | `Lcom/tidal/android/feature/appscaffold/ui/t; Lcom/tidal/android/feature/appscaffold/ui/q; b` |
|
||||
| `gestures/mini-player/mini-player-left-right-gesture.patch` | 32 | context | `Ll10/a; p0` |
|
||||
| `gestures/mini-player/mini-player-left-right-gesture.patch` | 63 | context | `Lzh/e; i` |
|
||||
| `gestures/mini-player/mini-player-left-right-gesture.patch` | 73 | added | `Lcom/tidal/android/feature/appscaffold/ui/r$c; a` |
|
||||
| `gestures/mini-player/mini-player-left-right-gesture.patch` | 81 | added | `Lzh/e;` |
|
||||
| `gestures/mini-player/mini-player-left-right-gesture.patch` | 89 | added | `Lzh/e; h` |
|
||||
| `gestures/mini-player/mini-player-left-right-gesture.patch` | 95 | context | `Lx/f0;` |
|
||||
| `gestures/mini-player/mini-player-left-right-gesture.patch` | 116 | added | `Lkotlin/u;` |
|
||||
| `gestures/mini-player/mini-player-left-right-gesture.patch` | 122 | context | `Lcom/tidal/android/feature/appscaffold/ui/composable/g; Lyl0/l; a` |
|
||||
| `gestures/mini-player/mini-player-left-right-gesture.patch` | 126 | context | `Lcom/tidal/android/feature/appscaffold/ui/b$b; a` |
|
||||
| `gestures/mini-player/mini-player-up-gesture.patch` | 14 | added | `Lyl0/l;` |
|
||||
| `gestures/mini-player/mini-player-up-gesture.patch` | 23 | context | `Lcom/tidal/android/feature/appscaffold/ui/t; c` |
|
||||
| `gestures/mini-player/mini-player-up-gesture.patch` | 25 | added | `Lcom/tidal/android/feature/appscaffold/ui/t; a` |
|
||||
| `gestures/mini-player/mini-player-up-gesture.patch` | 64 | context | `Ll10/a; p0` |
|
||||
| `gestures/player/player-swipe-gesture.patch` | 35 | added | `Lyl0/l;` |
|
||||
| `gestures/player/player-swipe-gesture.patch` | 37 | added | `Lyl0/l;` |
|
||||
| `gestures/player/player-swipe-gesture.patch` | 41 | context | `Lyl0/l;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 5 | context | `Lcom/google/android/gms/internal/play_billing/f5;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 7 | added | `Lcom/google/android/gms/internal/play_billing/f5;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 18 | added | `Ls30/e$e; a` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 26 | added | `Lyl0/l; Ls30/e$e;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 28 | added | `Ls30/e$e; j` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 54 | context | `Lx/f0;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 60 | added | `Ls30/e;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 72 | added | `Lyl0/l; Ls30/e;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 93 | added | `Lcom/tidal/android/dynamicpages/ui/composables/compactgridcard/d; Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/c; b` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 95 | added | `Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/c; Lyl0/q; f` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 97 | added | `Lcom/tidal/android/dynamicpages/ui/composables/compactgridcard/d; c` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 99 | added | `Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/c; a` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 103 | added | `Lyl0/q;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 105 | added | `Lkotlin/u;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 123 | added | `Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/a;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 127 | added | `Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/a;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 129 | added | `Lkotlin/u;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 159 | context | `Lcom/google/android/gms/internal/play_billing/f5;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 161 | added | `Lcom/google/android/gms/internal/play_billing/f5;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 167 | added | `Lyl0/l; Lhb0/b;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 173 | added | `Lhb0/b$a; f` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 187 | added | `Lcom/google/android/gms/internal/play_billing/f5;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 193 | added | `Lyl0/l; Lhb0/b;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 208 | context | `Lgb0/d0; Lhb0/b$f; Lyl0/a; a` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 211 | context | `Lcom/google/android/gms/internal/play_billing/f5;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 213 | added | `Lcom/google/android/gms/internal/play_billing/f5;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 219 | added | `Lyl0/l; Lhb0/b;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 225 | added | `Lhb0/b$i; i` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 239 | added | `Lcom/google/android/gms/internal/play_billing/f5;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 245 | added | `Lyl0/l; Lhb0/b;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 260 | context | `Lgb0/x; Lhb0/b$e; Lyl0/a; a` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 265 | context | `Lyl0/l;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 267 | added | `Ls30/e$e;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 273 | added | `Ls30/e$e;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 275 | added | `Ls30/e$e; a` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 283 | added | `Lyl0/l; Ls30/e$e;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 285 | added | `Ls30/e$e; j` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 300 | added | `Lcom/tidal/android/feature/viewall/ui/w;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 304 | added | `Lcom/google/android/gms/internal/play_billing/f5;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 318 | added | `Lcom/tidal/android/feature/viewall/ui/e;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 324 | added | `Lkotlin/u;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 330 | context | `Lcom/tidal/android/feature/viewall/ui/e$a;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 334 | context | `Lcom/google/android/gms/internal/play_billing/f5;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 335 | added | `Lcom/google/android/gms/internal/play_billing/f5;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 341 | added | `Ls30/e$e; a` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 349 | added | `Lyl0/l; Ls30/e$e;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 351 | added | `Ls30/e$e; j` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 376 | added | `Ls30/e;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 384 | added | `Lyl0/l; Ls30/e;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 390 | added | `Ls30/e;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 402 | context | `Lcom/google/android/gms/internal/play_billing/f5;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 403 | added | `Lcom/tidal/android/dynamicpages/ui/composables/verticallistcard/m;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 407 | added | `Ls30/e;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 413 | added | `Ls30/e;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 415 | added | `Ls30/e;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 421 | added | `Lcom/google/android/gms/internal/play_billing/f5;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 429 | context | `Lcom/google/android/gms/internal/play_billing/f5;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 430 | added | `Lcom/google/android/gms/internal/play_billing/f5;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 438 | added | `Lyl0/l; Ls30/e$d;` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 444 | added | `Ls30/e$d; g` |
|
||||
| `gestures/queue/swipe-to-queue-compose.patch` | 480 | context | `Lx/f0;` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 13 | added | `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/g0; d` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 17 | added | `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/g0; b` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 33 | added | `f` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 62 | added | `Y` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 69 | added | `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/g0; d` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 73 | added | `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/g0; b` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 79 | added | `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/g0; m` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 81 | added | `Lcom/aspiro/wamp/playqueue/source/model/b; m` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 87 | added | `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/g0; k` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 89 | added | `Ld40/a; b` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 91 | added | `Lh4/a;` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 95 | added | `Lh4/a;` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 126 | added | `Lh4/a; q` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 142 | added | `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/m; l` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 146 | added | `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/m; f` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 148 | added | `w` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 156 | context | `Lm8/b;` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 159 | context | `Lo4/g; Lo4/g$e; e` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 163 | context | `Lo4/g; b` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 164 | added | `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/m; l` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 168 | added | `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/m; f` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 174 | context | `Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/n; N` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 207 | context | `Lcom/tidal/android/feature/appscaffold/ui/recyclerview/b; Lcom/tidal/android/feature/appscaffold/ui/recyclerview/a; a` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 218 | context | `Lcom/tidal/android/feature/appscaffold/ui/recyclerview/b; Lcom/tidal/android/feature/appscaffold/ui/recyclerview/a; a` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 230 | context | `Lcom/tidal/android/feature/appscaffold/ui/recyclerview/b; Lcom/tidal/android/feature/appscaffold/ui/recyclerview/a; a` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 270 | added | `Lh4/a; n` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 272 | added | `Lz3/c;` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 274 | added | `Lz3/c; Lz3/b; a` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 276 | added | `Lz3/b; Ldagger/internal/j; b` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 278 | added | `Lml0/a;` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 282 | added | `Lm3/f$a;` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 284 | added | `Lm3/f$a; Lm3/f; a` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 288 | added | `Lm3/f; Lcom/aspiro/wamp/playqueue/x0; j` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 290 | added | `Lcom/aspiro/wamp/playqueue/x0; Lcom/aspiro/wamp/player/c; a` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 294 | added | `Lcom/aspiro/wamp/player/c; b` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 300 | added | `Lm3/f; b` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 323 | context | `Lcom/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/a; Lcom/aspiro/wamp/nowplaying/view/playqueue/n;` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 346 | added | `h` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 357 | added | `i` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 359 | context | `d` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 430 | context | `Lcom/tidal/android/feature/appscaffold/ui/recyclerview/b; Lcom/tidal/android/feature/appscaffold/ui/recyclerview/a; a` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 443 | context | `Lcom/tidal/android/feature/appscaffold/ui/recyclerview/b; Lcom/tidal/android/feature/appscaffold/ui/recyclerview/a; a` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 456 | context | `Lcom/tidal/android/feature/appscaffold/ui/recyclerview/b; Lcom/tidal/android/feature/appscaffold/ui/recyclerview/a; a` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 469 | context | `Lcom/tidal/android/feature/appscaffold/ui/recyclerview/b; Lcom/tidal/android/feature/appscaffold/ui/recyclerview/a; a` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 482 | context | `Lcom/tidal/android/feature/appscaffold/ui/recyclerview/b; Lcom/tidal/android/feature/appscaffold/ui/recyclerview/a; a` |
|
||||
| `gestures/queue/swipe-to-queue.patch` | 500 | context | `Lcom/aspiro/wamp/nowplaying/view/suggestions/q0; Lcom/aspiro/wamp/nowplaying/view/suggestions/m; M` |
|
||||
| `integration-pebble-playback.patch` | 30 | context | `Lyj0/d; Lyj0/e;` |
|
||||
| `integration-waze-playback.patch` | 9 | added | `Lkotlin/jvm/internal/n;` |
|
||||
| `integration-waze-playback.patch` | 17 | added | `Lkotlin/jvm/internal/n;` |
|
||||
| `integration-waze-playback.patch` | 35 | added | `Lkotlin/jvm/internal/n;` |
|
||||
| `integration-waze-playback.patch` | 55 | context | `Lkb/f; c` |
|
||||
| `lyrics-disable-cover.patch` | 11 | added | `Lcom/tidal/android/feature/playerscreen/ui/i0; Lcom/tidal/android/feature/playerscreen/ui/s$a; b` |
|
||||
| `lyrics-disable-cover.patch` | 13 | added | `Lcom/tidal/android/feature/playerscreen/ui/s$a; Lcom/tidal/android/feature/playerscreen/ui/g; j` |
|
||||
| `lyrics-disable-cover.patch` | 15 | added | `Lcom/tidal/android/feature/playerscreen/ui/g$a;` |
|
||||
| `lyrics-disable-cover.patch` | 19 | context | `Lcom/tidal/android/feature/playerscreen/ui/d; Lyl0/l; c` |
|
||||
| `lyrics-fade-region.patch` | 7 | removed | `Lcom/tidal/android/feature/playerscreen/ui/composables/f1; a` |
|
||||
| `lyrics-keep-controls-visible.patch` | 28 | added | `Lkotlin/u;` |
|
||||
| `lyrics-progress-pill.patch` | 14 | context | `Lcom/tidal/android/feature/playerscreen/ui/g; Lyl0/l; a` |
|
||||
| `lyrics-progress-pill.patch` | 60 | added | `Lcom/google/android/gms/internal/play_billing/f5;` |
|
||||
| `lyrics-progress-pill.patch` | 72 | added | `Lyl0/l;` |
|
||||
| `lyrics-replace-lyrics-button.patch` | 8 | removed | `Lcom/tidal/android/feature/playerscreen/ui/composables/c1; Lyl0/a; a` |
|
||||
| `lyrics-replace-lyrics-button.patch` | 19 | context | `Lcom/tidal/android/feature/playerscreen/ui/composables/h3; Lyl0/a; a` |
|
||||
| `lyrics-replace-lyrics-button.patch` | 21 | added | `Landroidx/window/embedding/c2;` |
|
||||
| `lyrics-replace-lyrics-button.patch` | 27 | added | `Landroidx/window/embedding/c2;` |
|
||||
| `lyrics-replace-lyrics-button.patch` | 35 | added | `Lcom/google/android/gms/internal/play_billing/f5;` |
|
||||
| `lyrics-replace-lyrics-button.patch` | 38 | context | `Lcom/tidal/android/feature/playerscreen/ui/s$a; Lcom/tidal/android/feature/playerscreen/ui/p; m` |
|
||||
| `lyrics-replace-share-button.patch` | 7 | removed | `Lcom/tidal/android/feature/playerscreen/ui/b; Lyl0/a; b` |
|
||||
| `lyrics-replace-share-button.patch` | 20 | removed | `Lcom/tidal/android/feature/profile/ui/sociallinks/y;` |
|
||||
| `lyrics-replace-share-button.patch` | 21 | added | `Landroidx/window/embedding/d2;` |
|
||||
| `lyrics-replace-share-button.patch` | 26 | removed | `Lcom/tidal/android/feature/profile/ui/sociallinks/y;` |
|
||||
| `lyrics-replace-share-button.patch` | 27 | added | `Landroidx/window/embedding/d2;` |
|
||||
| `lyrics-replace-share-button.patch` | 33 | context | `Lcom/google/android/gms/internal/play_billing/f5;` |
|
||||
| `lyrics-replace-share-button.patch` | 36 | added | `Lcom/tidal/android/feature/playerscreen/ui/s$a; Lcom/tidal/android/feature/playerscreen/ui/b; d` |
|
||||
| `lyrics-replace-share-button.patch` | 42 | removed | `Lcom/tidal/android/feature/playerscreen/ui/composables/o4; Lyl0/a; a` |
|
||||
| `lyrics-replace-share-button.patch` | 43 | added | `Lcom/tidal/android/feature/playerscreen/ui/b; Lyl0/a; b` |
|
||||
| `lyrics-rl-api-isrc.patch` | 4 | context | `Lcom/tidal/android/tidalapi/domain/model/q;` |
|
||||
| `lyrics-rl-api-observer.patch` | 10 | context | `a` |
|
||||
| `lyrics-rl-api-observer.patch` | 34 | context | `Lcom/tidal/android/feature/playerscreen/ui/g$c; c` |
|
||||
| `lyrics-rl-api-syllable.patch` | 14 | context | `Lcom/tidal/android/feature/playerscreen/ui/f;` |
|
||||
| `lyrics-rl-api-syllable.patch` | 23 | context | `Lcom/tidal/android/feature/playerscreen/ui/f; a` |
|
||||
| `lyrics-rl-api-syllable.patch` | 25 | added | `Lcom/tidal/android/feature/playerscreen/ui/composables/u1; b` |
|
||||
| `lyrics-rl-api-syllable.patch` | 29 | added | `Lcom/tidal/android/feature/playerscreen/ui/f; a` |
|
||||
| `lyrics-rl-api-syllable.patch` | 33 | added | `Lcom/tidal/android/feature/playerscreen/ui/composables/u1; d` |
|
||||
| `lyrics-rl-api-syllable.patch` | 37 | added | `Lcom/tidal/android/feature/playerscreen/ui/composables/u1; e` |
|
||||
| `lyrics-rl-api-syllable.patch` | 64 | added | `Lyl0/l;` |
|
||||
| `lyrics-rl-api-syllable.patch` | 76 | removed | `Lyl0/l;` |
|
||||
| `lyrics-rl-api-syllable.patch` | 77 | added | `Lyl0/l;` |
|
||||
| `lyrics-rl-api-word.patch` | 14 | context | `Lcom/tidal/android/feature/playerscreen/ui/f;` |
|
||||
| `lyrics-rl-api-word.patch` | 23 | context | `Lcom/tidal/android/feature/playerscreen/ui/f; a` |
|
||||
| `lyrics-rl-api-word.patch` | 25 | added | `Lcom/tidal/android/feature/playerscreen/ui/composables/u1; b` |
|
||||
| `lyrics-rl-api-word.patch` | 29 | added | `Lcom/tidal/android/feature/playerscreen/ui/f; a` |
|
||||
| `lyrics-rl-api-word.patch` | 33 | added | `Lcom/tidal/android/feature/playerscreen/ui/composables/u1; d` |
|
||||
| `lyrics-rl-api-word.patch` | 37 | added | `Lcom/tidal/android/feature/playerscreen/ui/composables/u1; e` |
|
||||
| `lyrics-rl-api-word.patch` | 52 | removed | `Lyl0/l;` |
|
||||
| `lyrics-rl-api-word.patch` | 53 | added | `Lyl0/l;` |
|
||||
| `lyrics-rl-api.patch` | 77 | context | `P` |
|
||||
| `lyrics-sparkle-conditional-visibility.patch` | 5 | context | `Lcom/tidal/android/feature/playerscreen/ui/composables/h3; Lyl0/a; a` |
|
||||
| `lyrics-sparkle-conditional-visibility.patch` | 7 | added | `Lcom/tidal/android/feature/playerscreen/ui/s$a; i` |
|
||||
| `lyrics-sparkle-conditional-visibility.patch` | 15 | context | `Landroidx/window/embedding/c2;` |
|
||||
| `lyrics-sparkle-conditional-visibility.patch` | 20 | context | `Lcom/google/android/gms/internal/play_billing/f5;` |
|
||||
| `lyrics-sparkle-conditional-visibility.patch` | 36 | context | `Lcom/tidal/android/feature/playerscreen/ui/s$a; Lcom/tidal/android/feature/playerscreen/ui/p; m` |
|
||||
| `mini-player-black.patch` | 56 | context | `Lcom/tidal/android/feature/appscaffold/ui/composable/a; c` |
|
||||
| `mini-player-black.patch` | 71 | context | `Lyl0/p;` |
|
||||
| `mini-player-dynamic-bg.patch` | 14 | context | `Lcom/tidal/android/feature/appscaffold/ui/composable/a; c` |
|
||||
| `mini-player-dynamic-bg.patch` | 20 | context | `W` |
|
||||
| `mini-player-dynamic-bg.patch` | 22 | added | `Lkotlin/i; Q` |
|
||||
| `mini-player-dynamic-bg.patch` | 24 | added | `Lkotlin/i;` |
|
||||
| `mini-player-floating-border.patch` | 9 | added | `Lyl0/l;` |
|
||||
| `mini-player-floating-border.patch` | 14 | context | `Lkotlin/u;` |
|
||||
| `mini-player-grey.patch` | 58 | context | `Lyl0/p;` |
|
||||
| `player-backdrop-kawarp.patch` | 8 | removed | `Lcom/tidal/android/feature/playerscreen/ui/composables/e3; Lyl0/a; b` |
|
||||
| `player-backdrop-kawarp.patch` | 9 | added | `Lcom/google/android/gms/internal/play_billing/f5;` |
|
||||
| `player-backdrop-kawarp.patch` | 36 | removed | `Lcom/tidal/android/feature/playerscreen/ui/composables/e3; Lyl0/a; a` |
|
||||
| `player-backdrop-playback.patch` | 10 | context | `Lcom/tidal/android/feature/playerscreen/ui/composables/e3; Lyl0/a; b` |
|
||||
| `player-backdrop-playback.patch` | 46 | removed | `Landroidx/compose/foundation/text/input/a;` |
|
||||
| `player-backdrop-playback.patch` | 73 | context | `Lvd0/c; a` |
|
||||
| `player-backdrop-playback.patch` | 95 | context | `Lcom/squareup/ui/market/layout/e; c` |
|
||||
| `player-favorite-heart.patch` | 16 | removed | `Lg20/b; Lg20/a; O` |
|
||||
| `player-favorite-heart.patch` | 20 | removed | `Lg20/a; a` |
|
||||
| `player-hide-playing-from.patch` | 5 | context | `Lcom/tidal/android/feature/playerscreen/ui/s$a; Lcom/tidal/android/feature/playerscreen/ui/p; m` |
|
||||
| `player-move-playing-from.patch` | 8 | added | `Lcom/tidal/android/feature/playerscreen/ui/s$a; Lcom/tidal/android/feature/playerscreen/ui/p; m` |
|
||||
| `player-move-playing-from.patch` | 12 | added | `Lcom/tidal/android/feature/playerscreen/ui/p; a` |
|
||||
| `player-move-playing-from.patch` | 22 | context | `Lcom/tidal/android/feature/playerscreen/ui/s$a; Lcom/tidal/android/feature/playerscreen/ui/d; c` |
|
||||
| `player-move-playing-from.patch` | 29 | context | `Lw10/c2;` |
|
||||
| `player-move-playing-from.patch` | 61 | added | `Lcom/squareup/ui/market/text/a; Lyl0/l; Lw10/c2; e` |
|
||||
| `player-quality-badge-colors.patch` | 5 | context | `Lcom/tidal/android/feature/playerscreen/ui/composables/g4; g` |
|
||||
| `player-quality-badge-colors.patch` | 16 | context | `Lcom/tidal/android/feature/playerscreen/ui/i$a;` |
|
||||
| `player-quality-badge-colors.patch` | 18 | added | `Lcom/tidal/android/feature/playerscreen/ui/i$a; b` |
|
||||
| `player-quality-badge-colors.patch` | 22 | context | `Lcom/tidal/android/feature/playerscreen/ui/i$a; a` |
|
||||
| `player-quality-badge-colors.patch` | 33 | added | `Lw10/c2;` |
|
||||
| `player-quality-badge-colors.patch` | 55 | added | `Lcom/tidal/android/feature/playerscreen/ui/i$a;` |
|
||||
| `player-quality-badge-colors.patch` | 66 | context | `Lcom/tidal/android/feature/playerscreen/ui/i$a; a` |
|
||||
| `player-quality-badge-colors.patch` | 68 | added | `Lcom/tidal/android/feature/playerscreen/ui/i$a; b` |
|
||||
| `player-quality-badge-colors.patch` | 111 | removed | `Lcom/tidal/android/feature/playerscreen/ui/i$a;` |
|
||||
| `player-quality-badge-colors.patch` | 114 | added | `Lcom/tidal/android/feature/playerscreen/ui/i$a;` |
|
||||
@@ -0,0 +1,54 @@
|
||||
--- a/com/tidal/android/feature/appscaffold/ui/q.smali
|
||||
+++ b/com/tidal/android/feature/appscaffold/ui/q.smali
|
||||
@@ -38,6 +38,8 @@
|
||||
.line 1
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
+ invoke-static {p1, p2, p3, p4}, Lradiant/AnimatedCovers;->onMediaState(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V # Look up animated cover
|
||||
+
|
||||
.line 2
|
||||
.line 3
|
||||
.line 4
|
||||
--- a/com/tidal/android/feature/playerscreen/ui/composables/CoverPagerKt.smali
|
||||
+++ b/com/tidal/android/feature/playerscreen/ui/composables/CoverPagerKt.smali
|
||||
@@ -633,5 +633,7 @@
|
||||
.line 281
|
||||
.line 282
|
||||
- invoke-static/range {v4 .. v13}, Lsd0/f;->a(Lyl0/l;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/ui/layout/ContentScale;Ljava/lang/Object;Lyl0/a;Landroidx/compose/runtime/Composer;II)V
|
||||
+ move/from16 v14, p0 # Page album id
|
||||
+
|
||||
+ invoke-static/range {v4 .. v14}, Lradiant/AnimatedCovers;->cover(Lyl0/l;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/ui/layout/ContentScale;Ljava/lang/Object;Lyl0/a;Landroidx/compose/runtime/Composer;III)V # Animated cover, else normal cover
|
||||
|
||||
.line 283
|
||||
--- a/com/tidal/android/feature/appscaffold/ui/MiniPlayerViewModel.smali
|
||||
+++ b/com/tidal/android/feature/appscaffold/ui/MiniPlayerViewModel.smali
|
||||
@@ -92,4 +92,6 @@
|
||||
iput-object v1, v0, Lcom/tidal/android/feature/appscaffold/ui/MiniPlayerViewModel;->a:Lzh/e;
|
||||
|
||||
+ invoke-static {v1}, Lradiant/AnimatedCovers;->setQueue(Ljava/lang/Object;)V # Keep play queue for album name
|
||||
+
|
||||
move-object/from16 v1, p2
|
||||
|
||||
--- a/com/tidal/android/feature/appscaffold/ui/composable/MiniPlayerKt.smali
|
||||
+++ b/com/tidal/android/feature/appscaffold/ui/composable/MiniPlayerKt.smali
|
||||
@@ -278,6 +278,10 @@
|
||||
move-object v5, p2
|
||||
|
||||
.line 9
|
||||
- invoke-static/range {v0 .. v9}, Lsd0/f;->a(Lyl0/l;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/ui/layout/ContentScale;Ljava/lang/Object;Lyl0/a;Landroidx/compose/runtime/Composer;II)V
|
||||
+ move/from16 v10, p1 # Mini player album id
|
||||
+
|
||||
+ invoke-static/range {v0 .. v10}, Lradiant/AnimatedCovers;->cover(Lyl0/l;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/ui/layout/ContentScale;Ljava/lang/Object;Lyl0/a;Landroidx/compose/runtime/Composer;III)V # Animated cover in mini player
|
||||
+
|
||||
+ move/from16 v10, p5 # Restore changed flags
|
||||
|
||||
invoke-static {}, Landroidx/compose/runtime/ComposerKt;->isTraceInProgress()Z
|
||||
--- a/com/aspiro/wamp/nowplaying/widgets/secondaryProgressView/SecondaryProgressView.smali
|
||||
+++ b/com/aspiro/wamp/nowplaying/widgets/secondaryProgressView/SecondaryProgressView.smali
|
||||
@@ -649,4 +649,6 @@
|
||||
:goto_3
|
||||
invoke-static {v5, v6, v3, v2}, Lwd0/l;->a(Landroid/widget/ImageView;ILjava/lang/String;I)Lcom/tidal/android/image/coil/g;
|
||||
|
||||
+ invoke-static {v5, v6}, Lradiant/AnimatedCoverView;->attach(Landroid/widget/ImageView;I)V # Animated cover on lyrics pill
|
||||
+
|
||||
.line 153
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/com/tidal/android/feature/appscaffold/ui/q.smali
|
||||
+++ b/com/tidal/android/feature/appscaffold/ui/q.smali
|
||||
@@ -55,6 +55,8 @@
|
||||
@@ -57,6 +57,8 @@
|
||||
.line 10
|
||||
iput-object p4, p0, Lcom/tidal/android/feature/appscaffold/ui/q;->d:Ljava/lang/String;
|
||||
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
--- a/com/tidal/wave/components/WaveScaffoldKt.smali
|
||||
+++ b/com/tidal/wave/components/WaveScaffoldKt.smali
|
||||
@@ -647,4 +647,10 @@
|
||||
move-result-wide v25
|
||||
|
||||
+ const-wide/16 v25, 0x0 # Transparent background for backdrop
|
||||
+
|
||||
+ const/4 v0, 0x0 # render $changed flag
|
||||
+
|
||||
+ invoke-static {v1, v0}, Lradiant/HomeBackdrop;->render(Landroidx/compose/runtime/Composer;I)V # render album-art backdrop
|
||||
+
|
||||
.line 267
|
||||
new-instance v0, Lcom/tidal/wave/components/WaveScaffoldKt$WaveScaffold$2;
|
||||
--- a/com/tidal/android/feature/saveforlater/ui/n.smali
|
||||
+++ b/com/tidal/android/feature/saveforlater/ui/n.smali
|
||||
@@ -174,4 +174,10 @@
|
||||
move-result-wide v7
|
||||
|
||||
+ const-wide/16 v7, 0x0 # Transparent background for backdrop
|
||||
+
|
||||
+ const/4 v5, 0x0 # render $changed flag
|
||||
+
|
||||
+ invoke-static {v13, v5}, Lradiant/HomeBackdrop;->render(Landroidx/compose/runtime/Composer;I)V # render album-art backdrop
|
||||
+
|
||||
.line 66
|
||||
new-instance v2, Lcom/tidal/android/feature/saveforlater/ui/p;
|
||||
--- a/com/tidal/android/feature/search/ui/composables/SearchScreenKt.smali
|
||||
+++ b/com/tidal/android/feature/search/ui/composables/SearchScreenKt.smali
|
||||
@@ -396,6 +396,10 @@
|
||||
:cond_9
|
||||
check-cast v4, Lyl0/l;
|
||||
|
||||
+ const/4 v1, 0x0 # render $changed flag
|
||||
+
|
||||
+ invoke-static {v6, v1}, Lradiant/HomeBackdrop;->render(Landroidx/compose/runtime/Composer;I)V # Backdrop behind Search
|
||||
+
|
||||
.line 177
|
||||
.line 178
|
||||
invoke-static {v0, v4, v6, v10}, Lcom/tidal/android/feature/search/ui/composables/SearchScreenKt;->b(Lcom/tidal/android/feature/search/ui/d;Lyl0/l;Landroidx/compose/runtime/Composer;I)V
|
||||
--- a/qa/b.smali
|
||||
+++ b/qa/b.smali
|
||||
@@ -126,5 +126,7 @@
|
||||
if-eqz p2, :cond_2
|
||||
|
||||
+ invoke-static {p1, v2}, Lradiant/HomeBackdrop;->render(Landroidx/compose/runtime/Composer;I)V # Backdrop behind View All
|
||||
+
|
||||
.line 46
|
||||
.line 47
|
||||
invoke-static {p2, p1, v2}, Lcom/tidal/android/feature/viewall/ui/ViewAllScreenKt;->f(Lcom/tidal/android/feature/viewall/ui/g;Landroidx/compose/runtime/Composer;I)V
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"tidalVersionCode": 10004,
|
||||
"tidalVersionCode": 10017,
|
||||
"tidalApkUrl": "https://github.com/meowarex/rl-mobile/releases/download/latest/tidal-stock.apk",
|
||||
"patchesVersion": "1.1.2"
|
||||
"patchesVersion": "1.5.0"
|
||||
}
|
||||
@@ -8,7 +8,7 @@
|
||||
+ return v0 # bypass debug flag
|
||||
+
|
||||
.line 1
|
||||
iget-object v0, p0, Lcom/tidal/android/core/debug/DebugFeatureInteractorDefault;->a:Lcom/tidal/android/featureflags/n;
|
||||
iget-object v0, p0, Lcom/tidal/android/core/debug/DebugFeatureInteractorDefault;->a:Lcom/tidal/android/featureflags/m;
|
||||
|
||||
@@ -99,6 +102,14 @@
|
||||
}
|
||||
@@ -23,7 +23,7 @@
|
||||
+ return-object v0 # short-circuit b()
|
||||
+
|
||||
.line 1
|
||||
sget-object v0, Lo50/a;->a:Ljava/lang/String;
|
||||
sget-object v0, Lu40/a;->a:Ljava/lang/String;
|
||||
|
||||
@@ -261,6 +272,9 @@
|
||||
.method public final c()Z
|
||||
@@ -33,5 +33,5 @@
|
||||
+ return v0 # bypass debug flag
|
||||
+
|
||||
.line 1
|
||||
sget-object v0, Lo50/a;->a:Ljava/lang/String;
|
||||
sget-object v0, Lu40/a;->a:Ljava/lang/String;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
--- a/hg/d.smali
|
||||
+++ b/hg/d.smali
|
||||
--- a/fg/e.smali
|
||||
+++ b/fg/e.smali
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
.line 2
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
.class public final Lcom/tidal/android/feature/appscaffold/ui/r$c;
|
||||
.super Lcom/tidal/android/feature/appscaffold/ui/r;
|
||||
.class public final Lcom/tidal/android/feature/appscaffold/ui/r$c; # MARKER: R8 Lcom/tidal/android/feature/appscaffold/ui/r$c;
|
||||
.super Lcom/tidal/android/feature/appscaffold/ui/r; # MARKER: R8 Lcom/tidal/android/feature/appscaffold/ui/r;
|
||||
.source "SourceFile"
|
||||
|
||||
# Synthetic mini-player event used by right swipe (previous/rewind).
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
||||
value = Lcom/tidal/android/feature/appscaffold/ui/r;
|
||||
value = Lcom/tidal/android/feature/appscaffold/ui/r; # MARKER: R8 Lcom/tidal/android/feature/appscaffold/ui/r;
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
@@ -16,18 +16,18 @@
|
||||
|
||||
|
||||
# static fields
|
||||
.field public static final a:Lcom/tidal/android/feature/appscaffold/ui/r$c;
|
||||
.field public static final a:Lcom/tidal/android/feature/appscaffold/ui/r$c; # MARKER: R8 Lcom/tidal/android/feature/appscaffold/ui/r$c;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method static constructor <clinit>()V
|
||||
.locals 1
|
||||
|
||||
new-instance v0, Lcom/tidal/android/feature/appscaffold/ui/r$c;
|
||||
new-instance v0, Lcom/tidal/android/feature/appscaffold/ui/r$c; # MARKER: R8 Lcom/tidal/android/feature/appscaffold/ui/r$c;
|
||||
|
||||
invoke-direct {v0}, Lcom/tidal/android/feature/appscaffold/ui/r;-><init>()V
|
||||
invoke-direct {v0}, Lcom/tidal/android/feature/appscaffold/ui/r;-><init>()V # MARKER: R8 Lcom/tidal/android/feature/appscaffold/ui/r;
|
||||
|
||||
sput-object v0, Lcom/tidal/android/feature/appscaffold/ui/r$c;->a:Lcom/tidal/android/feature/appscaffold/ui/r$c;
|
||||
sput-object v0, Lcom/tidal/android/feature/appscaffold/ui/r$c;->a:Lcom/tidal/android/feature/appscaffold/ui/r$c; # MARKER: R8 Lcom/tidal/android/feature/appscaffold/ui/r$c; a
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -44,7 +44,7 @@
|
||||
return v0
|
||||
|
||||
:cond_0
|
||||
instance-of p1, p1, Lcom/tidal/android/feature/appscaffold/ui/r$c;
|
||||
instance-of p1, p1, Lcom/tidal/android/feature/appscaffold/ui/r$c; # MARKER: R8 Lcom/tidal/android/feature/appscaffold/ui/r$c;
|
||||
|
||||
if-nez p1, :cond_1
|
||||
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,652 @@
|
||||
.class public final Lradiant/AiSparkle;
|
||||
.super Landroidx/compose/ui/graphics/painter/Painter;
|
||||
|
||||
# interfaces
|
||||
.implements Landroid/view/Choreographer$FrameCallback;
|
||||
.implements Ljava/lang/Runnable;
|
||||
|
||||
|
||||
# static fields
|
||||
.field private static final CYCLE_MS:J = 0x1770L
|
||||
|
||||
.field private static final PALETTE:[I
|
||||
|
||||
.field private static final POSTER:Lradiant/AiSparkle;
|
||||
|
||||
.field private static final STOPS:[F
|
||||
|
||||
.field private static final TAG:Ljava/lang/String; = "RLAiSparkle"
|
||||
|
||||
.field static final aiState:Landroidx/compose/runtime/MutableState;
|
||||
|
||||
.field private static cached:Lradiant/AiSparkle;
|
||||
|
||||
.field private static frameScheduled:Z
|
||||
|
||||
.field private static lastDrawMs:J
|
||||
|
||||
.field private static volatile pending:Z
|
||||
|
||||
.field static final tick:Landroidx/compose/runtime/MutableState;
|
||||
|
||||
|
||||
# instance fields
|
||||
.field private final base:Landroidx/compose/ui/graphics/painter/Painter;
|
||||
|
||||
.field private final colors:[I
|
||||
|
||||
.field private final fillPaint:Landroid/graphics/Paint;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method static constructor <clinit>()V
|
||||
.registers 5
|
||||
|
||||
const v0, -0xa11801
|
||||
|
||||
const v1, -0x587406
|
||||
|
||||
const v2, -0x9463
|
||||
|
||||
const/16 v3, -0x2e9a
|
||||
|
||||
filled-new-array {v2, v3, v0, v1}, [I
|
||||
|
||||
move-result-object v0
|
||||
|
||||
sput-object v0, Lradiant/AiSparkle;->PALETTE:[I
|
||||
|
||||
const/4 v0, 0x4
|
||||
|
||||
new-array v0, v0, [F
|
||||
|
||||
fill-array-data v0, :array_38
|
||||
|
||||
sput-object v0, Lradiant/AiSparkle;->STOPS:[F
|
||||
|
||||
sget-object v0, Ljava/lang/Boolean;->FALSE:Ljava/lang/Boolean;
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
const/4 v2, 0x2
|
||||
|
||||
invoke-static {v0, v1, v2, v1}, Landroidx/compose/runtime/SnapshotStateKt;->mutableStateOf$default(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;ILjava/lang/Object;)Landroidx/compose/runtime/MutableState;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
sput-object v0, Lradiant/AiSparkle;->aiState:Landroidx/compose/runtime/MutableState;
|
||||
|
||||
const-wide/16 v3, 0x0
|
||||
|
||||
invoke-static {v3, v4}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
invoke-static {v0, v1, v2, v1}, Landroidx/compose/runtime/SnapshotStateKt;->mutableStateOf$default(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;ILjava/lang/Object;)Landroidx/compose/runtime/MutableState;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
sput-object v0, Lradiant/AiSparkle;->tick:Landroidx/compose/runtime/MutableState;
|
||||
|
||||
new-instance v0, Lradiant/AiSparkle;
|
||||
|
||||
invoke-direct {v0, v1}, Lradiant/AiSparkle;-><init>(Landroidx/compose/ui/graphics/painter/Painter;)V
|
||||
|
||||
sput-object v0, Lradiant/AiSparkle;->POSTER:Lradiant/AiSparkle;
|
||||
|
||||
return-void
|
||||
|
||||
nop
|
||||
|
||||
:array_38
|
||||
.array-data 4
|
||||
0x0
|
||||
0x3eb33333 # 0.35f
|
||||
0x3f266666 # 0.65f
|
||||
0x3f800000 # 1.0f
|
||||
.end array-data
|
||||
.end method
|
||||
|
||||
.method private constructor <init>(Landroidx/compose/ui/graphics/painter/Painter;)V
|
||||
.registers 4
|
||||
|
||||
invoke-direct {p0}, Landroidx/compose/ui/graphics/painter/Painter;-><init>()V
|
||||
|
||||
new-instance v0, Landroid/graphics/Paint;
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
invoke-direct {v0, v1}, Landroid/graphics/Paint;-><init>(I)V
|
||||
|
||||
iput-object v0, p0, Lradiant/AiSparkle;->fillPaint:Landroid/graphics/Paint;
|
||||
|
||||
const/4 v0, 0x4
|
||||
|
||||
new-array v0, v0, [I
|
||||
|
||||
iput-object v0, p0, Lradiant/AiSparkle;->colors:[I
|
||||
|
||||
iput-object p1, p0, Lradiant/AiSparkle;->base:Landroidx/compose/ui/graphics/painter/Painter;
|
||||
|
||||
iget-object p1, p0, Lradiant/AiSparkle;->fillPaint:Landroid/graphics/Paint;
|
||||
|
||||
new-instance v0, Landroid/graphics/PorterDuffXfermode;
|
||||
|
||||
sget-object v1, Landroid/graphics/PorterDuff$Mode;->SRC_IN:Landroid/graphics/PorterDuff$Mode;
|
||||
|
||||
invoke-direct {v0, v1}, Landroid/graphics/PorterDuffXfermode;-><init>(Landroid/graphics/PorterDuff$Mode;)V
|
||||
|
||||
invoke-virtual {p1, v0}, Landroid/graphics/Paint;->setXfermode(Landroid/graphics/Xfermode;)Landroid/graphics/Xfermode;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private static lerpPalette(F)I
|
||||
.registers 8
|
||||
|
||||
float-to-double v0, p0
|
||||
|
||||
invoke-static {v0, v1}, Ljava/lang/Math;->floor(D)D
|
||||
|
||||
move-result-wide v0
|
||||
|
||||
double-to-float v0, v0
|
||||
|
||||
sub-float/2addr p0, v0
|
||||
|
||||
const/high16 v0, 0x40800000 # 4.0f
|
||||
|
||||
mul-float/2addr p0, v0
|
||||
|
||||
float-to-int v0, p0
|
||||
|
||||
int-to-float v1, v0
|
||||
|
||||
sub-float/2addr p0, v1
|
||||
|
||||
sget-object v1, Lradiant/AiSparkle;->PALETTE:[I
|
||||
|
||||
and-int/lit8 v2, v0, 0x3
|
||||
|
||||
aget v1, v1, v2
|
||||
|
||||
sget-object v2, Lradiant/AiSparkle;->PALETTE:[I
|
||||
|
||||
add-int/lit8 v0, v0, 0x1
|
||||
|
||||
and-int/lit8 v0, v0, 0x3
|
||||
|
||||
aget v0, v2, v0
|
||||
|
||||
shr-int/lit8 v2, v1, 0x10
|
||||
|
||||
and-int/lit16 v2, v2, 0xff
|
||||
|
||||
shr-int/lit8 v3, v1, 0x8
|
||||
|
||||
and-int/lit16 v3, v3, 0xff
|
||||
|
||||
and-int/lit16 v1, v1, 0xff
|
||||
|
||||
shr-int/lit8 v4, v0, 0x10
|
||||
|
||||
and-int/lit16 v4, v4, 0xff
|
||||
|
||||
shr-int/lit8 v5, v0, 0x8
|
||||
|
||||
and-int/lit16 v5, v5, 0xff
|
||||
|
||||
and-int/lit16 v0, v0, 0xff
|
||||
|
||||
int-to-float v6, v2
|
||||
|
||||
sub-int/2addr v4, v2
|
||||
|
||||
int-to-float v2, v4
|
||||
|
||||
mul-float/2addr v2, p0
|
||||
|
||||
add-float/2addr v6, v2
|
||||
|
||||
float-to-int v2, v6
|
||||
|
||||
int-to-float v4, v3
|
||||
|
||||
sub-int/2addr v5, v3
|
||||
|
||||
int-to-float v3, v5
|
||||
|
||||
mul-float/2addr v3, p0
|
||||
|
||||
add-float/2addr v4, v3
|
||||
|
||||
float-to-int v3, v4
|
||||
|
||||
int-to-float v4, v1
|
||||
|
||||
sub-int/2addr v0, v1
|
||||
|
||||
int-to-float v0, v0
|
||||
|
||||
mul-float/2addr v0, p0
|
||||
|
||||
add-float/2addr v4, v0
|
||||
|
||||
float-to-int p0, v4
|
||||
|
||||
const/high16 v0, -0x1000000
|
||||
|
||||
shl-int/lit8 v1, v2, 0x10
|
||||
|
||||
or-int/2addr v0, v1
|
||||
|
||||
shl-int/lit8 v1, v3, 0x8
|
||||
|
||||
or-int/2addr v0, v1
|
||||
|
||||
or-int/2addr p0, v0
|
||||
|
||||
return p0
|
||||
.end method
|
||||
|
||||
.method public static onResponse(Ljava/lang/String;)V
|
||||
.registers 5
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
:try_start_1
|
||||
new-instance v1, Lorg/json/JSONObject;
|
||||
|
||||
invoke-direct {v1, p0}, Lorg/json/JSONObject;-><init>(Ljava/lang/String;)V
|
||||
|
||||
const-string p0, "Word"
|
||||
|
||||
const-string v2, "type"
|
||||
|
||||
const-string v3, ""
|
||||
|
||||
invoke-virtual {v1, v2, v3}, Lorg/json/JSONObject;->optString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
|
||||
|
||||
move-result-object v2
|
||||
|
||||
invoke-virtual {p0, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
|
||||
|
||||
move-result p0
|
||||
|
||||
if-eqz p0, :cond_22
|
||||
|
||||
const-string p0, "_synthesized"
|
||||
|
||||
invoke-virtual {v1, p0, v0}, Lorg/json/JSONObject;->optBoolean(Ljava/lang/String;Z)Z
|
||||
|
||||
move-result p0
|
||||
:try_end_1c
|
||||
.catchall {:try_start_1 .. :try_end_1c} :catchall_21
|
||||
|
||||
if-eqz p0, :cond_22
|
||||
|
||||
const/4 p0, 0x1
|
||||
|
||||
move v0, p0
|
||||
|
||||
goto :goto_22
|
||||
|
||||
:catchall_21
|
||||
move-exception p0
|
||||
|
||||
:cond_22
|
||||
:goto_22
|
||||
invoke-static {v0}, Lradiant/AiSparkle;->post(Z)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private static post(Z)V
|
||||
.registers 2
|
||||
|
||||
sput-boolean p0, Lradiant/AiSparkle;->pending:Z
|
||||
|
||||
new-instance p0, Landroid/os/Handler;
|
||||
|
||||
invoke-static {}, Landroid/os/Looper;->getMainLooper()Landroid/os/Looper;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
invoke-direct {p0, v0}, Landroid/os/Handler;-><init>(Landroid/os/Looper;)V
|
||||
|
||||
sget-object v0, Lradiant/AiSparkle;->POSTER:Lradiant/AiSparkle;
|
||||
|
||||
invoke-virtual {p0, v0}, Landroid/os/Handler;->post(Ljava/lang/Runnable;)Z
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static reset()V
|
||||
.registers 1
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
invoke-static {v0}, Lradiant/AiSparkle;->post(Z)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static wrap(Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/painter/Painter;
|
||||
.registers 3
|
||||
|
||||
sget-object p1, Lradiant/AiSparkle;->aiState:Landroidx/compose/runtime/MutableState;
|
||||
|
||||
invoke-interface {p1}, Landroidx/compose/runtime/MutableState;->getValue()Ljava/lang/Object;
|
||||
|
||||
move-result-object p1
|
||||
|
||||
check-cast p1, Ljava/lang/Boolean;
|
||||
|
||||
invoke-virtual {p1}, Ljava/lang/Boolean;->booleanValue()Z
|
||||
|
||||
move-result p1
|
||||
|
||||
if-eqz p1, :cond_21
|
||||
|
||||
if-nez p0, :cond_11
|
||||
|
||||
goto :goto_21
|
||||
|
||||
:cond_11
|
||||
sget-object p1, Lradiant/AiSparkle;->cached:Lradiant/AiSparkle;
|
||||
|
||||
if-eqz p1, :cond_19
|
||||
|
||||
iget-object v0, p1, Lradiant/AiSparkle;->base:Landroidx/compose/ui/graphics/painter/Painter;
|
||||
|
||||
if-eq v0, p0, :cond_20
|
||||
|
||||
:cond_19
|
||||
new-instance p1, Lradiant/AiSparkle;
|
||||
|
||||
invoke-direct {p1, p0}, Lradiant/AiSparkle;-><init>(Landroidx/compose/ui/graphics/painter/Painter;)V
|
||||
|
||||
sput-object p1, Lradiant/AiSparkle;->cached:Lradiant/AiSparkle;
|
||||
|
||||
:cond_20
|
||||
return-object p1
|
||||
|
||||
:cond_21
|
||||
:goto_21
|
||||
return-object p0
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public applyColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)Z
|
||||
.registers 2
|
||||
|
||||
const/4 p1, 0x1
|
||||
|
||||
return p1
|
||||
.end method
|
||||
|
||||
.method public doFrame(J)V
|
||||
.registers 7
|
||||
|
||||
invoke-static {}, Landroid/os/SystemClock;->uptimeMillis()J
|
||||
|
||||
move-result-wide p1
|
||||
|
||||
sget-object v0, Lradiant/AiSparkle;->aiState:Landroidx/compose/runtime/MutableState;
|
||||
|
||||
invoke-interface {v0}, Landroidx/compose/runtime/MutableState;->getValue()Ljava/lang/Object;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
check-cast v0, Ljava/lang/Boolean;
|
||||
|
||||
invoke-virtual {v0}, Ljava/lang/Boolean;->booleanValue()Z
|
||||
|
||||
move-result v0
|
||||
|
||||
if-eqz v0, :cond_2f
|
||||
|
||||
sget-wide v0, Lradiant/AiSparkle;->lastDrawMs:J
|
||||
|
||||
sub-long v0, p1, v0
|
||||
|
||||
const-wide/16 v2, 0x1f4
|
||||
|
||||
cmp-long v0, v0, v2
|
||||
|
||||
if-gez v0, :cond_2f
|
||||
|
||||
sget-object v0, Lradiant/AiSparkle;->tick:Landroidx/compose/runtime/MutableState;
|
||||
|
||||
invoke-static {p1, p2}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
|
||||
|
||||
move-result-object p1
|
||||
|
||||
invoke-interface {v0, p1}, Landroidx/compose/runtime/MutableState;->setValue(Ljava/lang/Object;)V
|
||||
|
||||
invoke-static {}, Landroid/view/Choreographer;->getInstance()Landroid/view/Choreographer;
|
||||
|
||||
move-result-object p1
|
||||
|
||||
sget-object p2, Lradiant/AiSparkle;->POSTER:Lradiant/AiSparkle;
|
||||
|
||||
invoke-virtual {p1, p2}, Landroid/view/Choreographer;->postFrameCallback(Landroid/view/Choreographer$FrameCallback;)V
|
||||
|
||||
goto :goto_32
|
||||
|
||||
:cond_2f
|
||||
const/4 p1, 0x0
|
||||
|
||||
sput-boolean p1, Lradiant/AiSparkle;->frameScheduled:Z
|
||||
|
||||
:goto_32
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public getIntrinsicSize-NH-jbRc()J
|
||||
.registers 3
|
||||
|
||||
iget-object v0, p0, Lradiant/AiSparkle;->base:Landroidx/compose/ui/graphics/painter/Painter;
|
||||
|
||||
invoke-virtual {v0}, Landroidx/compose/ui/graphics/painter/Painter;->getIntrinsicSize-NH-jbRc()J
|
||||
|
||||
move-result-wide v0
|
||||
|
||||
return-wide v0
|
||||
.end method
|
||||
|
||||
.method public onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
|
||||
.registers 19
|
||||
|
||||
move-object/from16 v0, p0
|
||||
|
||||
sget-object v1, Lradiant/AiSparkle;->tick:Landroidx/compose/runtime/MutableState;
|
||||
|
||||
invoke-interface {v1}, Landroidx/compose/runtime/MutableState;->getValue()Ljava/lang/Object;
|
||||
|
||||
invoke-static {}, Landroid/os/SystemClock;->uptimeMillis()J
|
||||
|
||||
move-result-wide v1
|
||||
|
||||
sput-wide v1, Lradiant/AiSparkle;->lastDrawMs:J
|
||||
|
||||
sget-boolean v3, Lradiant/AiSparkle;->frameScheduled:Z
|
||||
|
||||
if-nez v3, :cond_1d
|
||||
|
||||
const/4 v3, 0x1
|
||||
|
||||
sput-boolean v3, Lradiant/AiSparkle;->frameScheduled:Z
|
||||
|
||||
invoke-static {}, Landroid/view/Choreographer;->getInstance()Landroid/view/Choreographer;
|
||||
|
||||
move-result-object v3
|
||||
|
||||
sget-object v4, Lradiant/AiSparkle;->POSTER:Lradiant/AiSparkle;
|
||||
|
||||
invoke-virtual {v3, v4}, Landroid/view/Choreographer;->postFrameCallback(Landroid/view/Choreographer$FrameCallback;)V
|
||||
|
||||
:cond_1d
|
||||
invoke-interface/range {p1 .. p1}, Landroidx/compose/ui/graphics/drawscope/DrawScope;->getSize-NH-jbRc()J
|
||||
|
||||
move-result-wide v7
|
||||
|
||||
invoke-static {v7, v8}, Landroidx/compose/ui/geometry/Size;->getWidth-impl(J)F
|
||||
|
||||
move-result v12
|
||||
|
||||
invoke-static {v7, v8}, Landroidx/compose/ui/geometry/Size;->getHeight-impl(J)F
|
||||
|
||||
move-result v13
|
||||
|
||||
const/4 v3, 0x0
|
||||
|
||||
cmpg-float v4, v12, v3
|
||||
|
||||
if-lez v4, :cond_8b
|
||||
|
||||
cmpg-float v3, v13, v3
|
||||
|
||||
if-gtz v3, :cond_33
|
||||
|
||||
goto :goto_8b
|
||||
|
||||
:cond_33
|
||||
invoke-interface/range {p1 .. p1}, Landroidx/compose/ui/graphics/drawscope/DrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/DrawContext;
|
||||
|
||||
move-result-object v3
|
||||
|
||||
invoke-interface {v3}, Landroidx/compose/ui/graphics/drawscope/DrawContext;->getCanvas()Landroidx/compose/ui/graphics/Canvas;
|
||||
|
||||
move-result-object v3
|
||||
|
||||
invoke-static {v3}, Landroidx/compose/ui/graphics/AndroidCanvas_androidKt;->getNativeCanvas(Landroidx/compose/ui/graphics/Canvas;)Landroid/graphics/Canvas;
|
||||
|
||||
move-result-object v9
|
||||
|
||||
const-wide/16 v3, 0x1770
|
||||
|
||||
rem-long/2addr v1, v3
|
||||
|
||||
long-to-float v1, v1
|
||||
|
||||
const v2, 0x45bb8000 # 6000.0f
|
||||
|
||||
div-float/2addr v1, v2
|
||||
|
||||
const/4 v11, 0x0
|
||||
|
||||
const/4 v14, 0x0
|
||||
|
||||
const/4 v10, 0x0
|
||||
|
||||
invoke-virtual/range {v9 .. v14}, Landroid/graphics/Canvas;->saveLayer(FFFFLandroid/graphics/Paint;)I
|
||||
|
||||
move-result v2
|
||||
|
||||
move-object v3, v9
|
||||
|
||||
iget-object v5, v0, Lradiant/AiSparkle;->base:Landroidx/compose/ui/graphics/painter/Painter;
|
||||
|
||||
const/high16 v9, 0x3f800000 # 1.0f
|
||||
|
||||
const/4 v10, 0x0
|
||||
|
||||
move-object/from16 v6, p1
|
||||
|
||||
invoke-virtual/range {v5 .. v10}, Landroidx/compose/ui/graphics/painter/Painter;->draw-x_KDEd0(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFLandroidx/compose/ui/graphics/ColorFilter;)V
|
||||
|
||||
const/4 v4, 0x0
|
||||
|
||||
:goto_5a
|
||||
const/4 v5, 0x4
|
||||
|
||||
if-ge v4, v5, :cond_6d
|
||||
|
||||
iget-object v5, v0, Lradiant/AiSparkle;->colors:[I
|
||||
|
||||
int-to-float v6, v4
|
||||
|
||||
const/high16 v7, 0x3e800000 # 0.25f
|
||||
|
||||
mul-float/2addr v6, v7
|
||||
|
||||
add-float/2addr v6, v1
|
||||
|
||||
invoke-static {v6}, Lradiant/AiSparkle;->lerpPalette(F)I
|
||||
|
||||
move-result v6
|
||||
|
||||
aput v6, v5, v4
|
||||
|
||||
add-int/lit8 v4, v4, 0x1
|
||||
|
||||
goto :goto_5a
|
||||
|
||||
:cond_6d
|
||||
iget-object v1, v0, Lradiant/AiSparkle;->fillPaint:Landroid/graphics/Paint;
|
||||
|
||||
new-instance v9, Landroid/graphics/LinearGradient;
|
||||
|
||||
iget-object v14, v0, Lradiant/AiSparkle;->colors:[I
|
||||
|
||||
sget-object v15, Lradiant/AiSparkle;->STOPS:[F
|
||||
|
||||
sget-object v16, Landroid/graphics/Shader$TileMode;->CLAMP:Landroid/graphics/Shader$TileMode;
|
||||
|
||||
const/4 v10, 0x0
|
||||
|
||||
move v11, v13
|
||||
|
||||
const/4 v13, 0x0
|
||||
|
||||
invoke-direct/range {v9 .. v16}, Landroid/graphics/LinearGradient;-><init>(FFFF[I[FLandroid/graphics/Shader$TileMode;)V
|
||||
|
||||
move v13, v11
|
||||
|
||||
invoke-virtual {v1, v9}, Landroid/graphics/Paint;->setShader(Landroid/graphics/Shader;)Landroid/graphics/Shader;
|
||||
|
||||
const/4 v11, 0x0
|
||||
|
||||
iget-object v14, v0, Lradiant/AiSparkle;->fillPaint:Landroid/graphics/Paint;
|
||||
|
||||
move-object v9, v3
|
||||
|
||||
invoke-virtual/range {v9 .. v14}, Landroid/graphics/Canvas;->drawRect(FFFFLandroid/graphics/Paint;)V
|
||||
|
||||
invoke-virtual {v9, v2}, Landroid/graphics/Canvas;->restoreToCount(I)V
|
||||
|
||||
:cond_8b
|
||||
:goto_8b
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public run()V
|
||||
.registers 3
|
||||
|
||||
sget-boolean v0, Lradiant/AiSparkle;->pending:Z
|
||||
|
||||
invoke-static {v0}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
sget-object v1, Lradiant/AiSparkle;->aiState:Landroidx/compose/runtime/MutableState;
|
||||
|
||||
invoke-interface {v1}, Landroidx/compose/runtime/MutableState;->getValue()Ljava/lang/Object;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
invoke-virtual {v0, v1}, Ljava/lang/Boolean;->equals(Ljava/lang/Object;)Z
|
||||
|
||||
move-result v1
|
||||
|
||||
if-nez v1, :cond_17
|
||||
|
||||
sget-object v1, Lradiant/AiSparkle;->aiState:Landroidx/compose/runtime/MutableState;
|
||||
|
||||
invoke-interface {v1, v0}, Landroidx/compose/runtime/MutableState;->setValue(Ljava/lang/Object;)V
|
||||
|
||||
:cond_17
|
||||
return-void
|
||||
.end method
|
||||
@@ -0,0 +1,845 @@
|
||||
.class public final Lradiant/AnimatedCoverView;
|
||||
.super Landroid/view/TextureView;
|
||||
|
||||
# interfaces
|
||||
.implements Landroid/view/TextureView$SurfaceTextureListener;
|
||||
.implements Landroid/media/MediaPlayer$OnPreparedListener;
|
||||
.implements Landroid/media/MediaPlayer$OnInfoListener;
|
||||
.implements Landroid/media/MediaPlayer$OnErrorListener;
|
||||
.implements Landroid/view/View$OnLayoutChangeListener;
|
||||
.implements Landroid/view/View$OnAttachStateChangeListener;
|
||||
.implements Ljava/lang/Runnable;
|
||||
|
||||
|
||||
# static fields
|
||||
.field private static final live:Ljava/util/ArrayList;
|
||||
.annotation system Ldalvik/annotation/Signature;
|
||||
value = {
|
||||
"Ljava/util/ArrayList<",
|
||||
"Ljava/lang/ref/WeakReference<",
|
||||
"Lradiant/AnimatedCoverView;",
|
||||
">;>;"
|
||||
}
|
||||
.end annotation
|
||||
.end field
|
||||
|
||||
|
||||
# instance fields
|
||||
.field private albumId:I
|
||||
|
||||
.field private final host:Landroid/view/ViewGroup;
|
||||
|
||||
.field private outlined:Z
|
||||
|
||||
.field private player:Landroid/media/MediaPlayer;
|
||||
|
||||
.field private surface:Landroid/view/Surface;
|
||||
|
||||
.field private final target:Landroid/widget/ImageView;
|
||||
|
||||
.field private url:Ljava/lang/String;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method static constructor <clinit>()V
|
||||
.registers 1
|
||||
|
||||
new-instance v0, Ljava/util/ArrayList;
|
||||
|
||||
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
|
||||
|
||||
sput-object v0, Lradiant/AnimatedCoverView;->live:Ljava/util/ArrayList;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private constructor <init>(Landroid/widget/ImageView;Landroid/view/ViewGroup;)V
|
||||
.registers 4
|
||||
|
||||
invoke-virtual {p1}, Landroid/widget/ImageView;->getContext()Landroid/content/Context;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
invoke-direct {p0, v0}, Landroid/view/TextureView;-><init>(Landroid/content/Context;)V
|
||||
|
||||
const/4 v0, -0x1
|
||||
|
||||
iput v0, p0, Lradiant/AnimatedCoverView;->albumId:I
|
||||
|
||||
iput-object p1, p0, Lradiant/AnimatedCoverView;->target:Landroid/widget/ImageView;
|
||||
|
||||
iput-object p2, p0, Lradiant/AnimatedCoverView;->host:Landroid/view/ViewGroup;
|
||||
|
||||
const/4 p1, 0x0
|
||||
|
||||
invoke-virtual {p0, p1}, Lradiant/AnimatedCoverView;->setOpaque(Z)V
|
||||
|
||||
const/4 p1, 0x0
|
||||
|
||||
invoke-virtual {p0, p1}, Lradiant/AnimatedCoverView;->setAlpha(F)V
|
||||
|
||||
const/4 p1, 0x4
|
||||
|
||||
invoke-virtual {p0, p1}, Lradiant/AnimatedCoverView;->setVisibility(I)V
|
||||
|
||||
invoke-virtual {p0, p0}, Lradiant/AnimatedCoverView;->setSurfaceTextureListener(Landroid/view/TextureView$SurfaceTextureListener;)V
|
||||
|
||||
const/4 p1, 0x2
|
||||
|
||||
invoke-virtual {p0, p1}, Lradiant/AnimatedCoverView;->setImportantForAccessibility(I)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static attach(Landroid/widget/ImageView;I)V
|
||||
.registers 8
|
||||
|
||||
if-nez p0, :cond_3
|
||||
|
||||
return-void
|
||||
|
||||
:cond_3
|
||||
:try_start_3
|
||||
invoke-static {p0}, Lradiant/AnimatedCoverView;->find(Landroid/widget/ImageView;)Lradiant/AnimatedCoverView;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
if-nez v0, :cond_60
|
||||
|
||||
invoke-static {p0}, Lradiant/AnimatedCoverView;->frameAncestor(Landroid/view/View;)Landroid/view/ViewGroup;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
if-nez v0, :cond_10
|
||||
|
||||
return-void
|
||||
|
||||
:cond_10
|
||||
new-instance v1, Lradiant/AnimatedCoverView;
|
||||
|
||||
invoke-direct {v1, p0, v0}, Lradiant/AnimatedCoverView;-><init>(Landroid/widget/ImageView;Landroid/view/ViewGroup;)V
|
||||
|
||||
invoke-static {}, Landroid/view/View;->generateViewId()I
|
||||
|
||||
move-result v2
|
||||
|
||||
invoke-virtual {v1, v2}, Lradiant/AnimatedCoverView;->setId(I)V
|
||||
|
||||
new-instance v2, Landroid/view/ViewGroup$LayoutParams;
|
||||
|
||||
invoke-virtual {p0}, Landroid/widget/ImageView;->getWidth()I
|
||||
|
||||
move-result v3
|
||||
|
||||
const/4 v4, 0x1
|
||||
|
||||
invoke-static {v4, v3}, Ljava/lang/Math;->max(II)I
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-virtual {p0}, Landroid/widget/ImageView;->getHeight()I
|
||||
|
||||
move-result v5
|
||||
|
||||
invoke-static {v4, v5}, Ljava/lang/Math;->max(II)I
|
||||
|
||||
move-result v4
|
||||
|
||||
invoke-direct {v2, v3, v4}, Landroid/view/ViewGroup$LayoutParams;-><init>(II)V
|
||||
|
||||
invoke-virtual {v0, v1, v2}, Landroid/view/ViewGroup;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
|
||||
|
||||
invoke-virtual {p0, v1}, Landroid/widget/ImageView;->addOnLayoutChangeListener(Landroid/view/View$OnLayoutChangeListener;)V
|
||||
|
||||
invoke-virtual {p0, v1}, Landroid/widget/ImageView;->addOnAttachStateChangeListener(Landroid/view/View$OnAttachStateChangeListener;)V
|
||||
|
||||
invoke-virtual {p0}, Landroid/widget/ImageView;->getParent()Landroid/view/ViewParent;
|
||||
|
||||
move-result-object v2
|
||||
|
||||
instance-of v2, v2, Landroid/view/View;
|
||||
|
||||
if-eqz v2, :cond_52
|
||||
|
||||
invoke-virtual {p0}, Landroid/widget/ImageView;->getParent()Landroid/view/ViewParent;
|
||||
|
||||
move-result-object v2
|
||||
|
||||
if-eq v2, v0, :cond_52
|
||||
|
||||
invoke-virtual {p0}, Landroid/widget/ImageView;->getParent()Landroid/view/ViewParent;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
check-cast p0, Landroid/view/View;
|
||||
|
||||
invoke-virtual {p0, v1}, Landroid/view/View;->addOnLayoutChangeListener(Landroid/view/View$OnLayoutChangeListener;)V
|
||||
|
||||
:cond_52
|
||||
sget-object p0, Lradiant/AnimatedCoverView;->live:Ljava/util/ArrayList;
|
||||
|
||||
new-instance v0, Ljava/lang/ref/WeakReference;
|
||||
|
||||
invoke-direct {v0, v1}, Ljava/lang/ref/WeakReference;-><init>(Ljava/lang/Object;)V
|
||||
|
||||
invoke-virtual {p0, v0}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
|
||||
|
||||
invoke-direct {v1}, Lradiant/AnimatedCoverView;->sync()V
|
||||
|
||||
move-object v0, v1
|
||||
|
||||
:cond_60
|
||||
iput p1, v0, Lradiant/AnimatedCoverView;->albumId:I
|
||||
|
||||
invoke-direct {v0}, Lradiant/AnimatedCoverView;->refresh()V
|
||||
:try_end_65
|
||||
.catchall {:try_start_3 .. :try_end_65} :catchall_66
|
||||
|
||||
goto :goto_67
|
||||
|
||||
:catchall_66
|
||||
move-exception p0
|
||||
|
||||
:goto_67
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private static find(Landroid/widget/ImageView;)Lradiant/AnimatedCoverView;
|
||||
.registers 4
|
||||
|
||||
sget-object v0, Lradiant/AnimatedCoverView;->live:Ljava/util/ArrayList;
|
||||
|
||||
invoke-virtual {v0}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
:cond_6
|
||||
:goto_6
|
||||
invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z
|
||||
|
||||
move-result v1
|
||||
|
||||
if-eqz v1, :cond_23
|
||||
|
||||
invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
check-cast v1, Ljava/lang/ref/WeakReference;
|
||||
|
||||
invoke-virtual {v1}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
check-cast v1, Lradiant/AnimatedCoverView;
|
||||
|
||||
if-nez v1, :cond_1e
|
||||
|
||||
invoke-interface {v0}, Ljava/util/Iterator;->remove()V
|
||||
|
||||
goto :goto_6
|
||||
|
||||
:cond_1e
|
||||
iget-object v2, v1, Lradiant/AnimatedCoverView;->target:Landroid/widget/ImageView;
|
||||
|
||||
if-ne v2, p0, :cond_6
|
||||
|
||||
return-object v1
|
||||
|
||||
:cond_23
|
||||
const/4 p0, 0x0
|
||||
|
||||
return-object p0
|
||||
.end method
|
||||
|
||||
.method private static frameAncestor(Landroid/view/View;)Landroid/view/ViewGroup;
|
||||
.registers 2
|
||||
|
||||
invoke-virtual {p0}, Landroid/view/View;->getParent()Landroid/view/ViewParent;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
:goto_4
|
||||
instance-of v0, p0, Landroid/view/ViewGroup;
|
||||
|
||||
if-eqz v0, :cond_14
|
||||
|
||||
instance-of v0, p0, Landroid/widget/FrameLayout;
|
||||
|
||||
if-eqz v0, :cond_f
|
||||
|
||||
check-cast p0, Landroid/view/ViewGroup;
|
||||
|
||||
return-object p0
|
||||
|
||||
:cond_f
|
||||
invoke-interface {p0}, Landroid/view/ViewParent;->getParent()Landroid/view/ViewParent;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
goto :goto_4
|
||||
|
||||
:cond_14
|
||||
const/4 p0, 0x0
|
||||
|
||||
return-object p0
|
||||
.end method
|
||||
|
||||
.method private refresh()V
|
||||
.registers 3
|
||||
|
||||
iget v0, p0, Lradiant/AnimatedCoverView;->albumId:I
|
||||
|
||||
invoke-static {v0}, Lradiant/AnimatedCovers;->urlFor(I)Ljava/lang/String;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
iget-object v1, p0, Lradiant/AnimatedCoverView;->url:Ljava/lang/String;
|
||||
|
||||
if-nez v0, :cond_d
|
||||
|
||||
if-nez v1, :cond_14
|
||||
|
||||
goto :goto_13
|
||||
|
||||
:cond_d
|
||||
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
|
||||
|
||||
move-result v1
|
||||
|
||||
if-eqz v1, :cond_14
|
||||
|
||||
:goto_13
|
||||
return-void
|
||||
|
||||
:cond_14
|
||||
invoke-direct {p0}, Lradiant/AnimatedCoverView;->release()V
|
||||
|
||||
iput-object v0, p0, Lradiant/AnimatedCoverView;->url:Ljava/lang/String;
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
invoke-virtual {p0, v1}, Lradiant/AnimatedCoverView;->setAlpha(F)V
|
||||
|
||||
if-nez v0, :cond_24
|
||||
|
||||
const/4 v0, 0x4
|
||||
|
||||
invoke-virtual {p0, v0}, Lradiant/AnimatedCoverView;->setVisibility(I)V
|
||||
|
||||
return-void
|
||||
|
||||
:cond_24
|
||||
const/4 v0, 0x0
|
||||
|
||||
invoke-virtual {p0, v0}, Lradiant/AnimatedCoverView;->setVisibility(I)V
|
||||
|
||||
invoke-direct {p0}, Lradiant/AnimatedCoverView;->start()V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method static refreshAll()V
|
||||
.registers 2
|
||||
|
||||
:try_start_0
|
||||
sget-object v0, Lradiant/AnimatedCoverView;->live:Ljava/util/ArrayList;
|
||||
|
||||
invoke-virtual {v0}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
:goto_6
|
||||
invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z
|
||||
|
||||
move-result v1
|
||||
|
||||
if-eqz v1, :cond_23
|
||||
|
||||
invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
check-cast v1, Ljava/lang/ref/WeakReference;
|
||||
|
||||
invoke-virtual {v1}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
check-cast v1, Lradiant/AnimatedCoverView;
|
||||
|
||||
if-nez v1, :cond_1e
|
||||
|
||||
invoke-interface {v0}, Ljava/util/Iterator;->remove()V
|
||||
|
||||
goto :goto_6
|
||||
|
||||
:cond_1e
|
||||
invoke-direct {v1}, Lradiant/AnimatedCoverView;->refresh()V
|
||||
:try_end_21
|
||||
.catchall {:try_start_0 .. :try_end_21} :catchall_22
|
||||
|
||||
goto :goto_6
|
||||
|
||||
:catchall_22
|
||||
move-exception v0
|
||||
|
||||
:cond_23
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private release()V
|
||||
.registers 3
|
||||
|
||||
iget-object v0, p0, Lradiant/AnimatedCoverView;->player:Landroid/media/MediaPlayer;
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
iput-object v1, p0, Lradiant/AnimatedCoverView;->player:Landroid/media/MediaPlayer;
|
||||
|
||||
if-eqz v0, :cond_c
|
||||
|
||||
:try_start_7
|
||||
invoke-virtual {v0}, Landroid/media/MediaPlayer;->release()V
|
||||
:try_end_a
|
||||
.catchall {:try_start_7 .. :try_end_a} :catchall_b
|
||||
|
||||
goto :goto_c
|
||||
|
||||
:catchall_b
|
||||
move-exception v0
|
||||
|
||||
:cond_c
|
||||
:goto_c
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private start()V
|
||||
.registers 3
|
||||
|
||||
iget-object v0, p0, Lradiant/AnimatedCoverView;->url:Ljava/lang/String;
|
||||
|
||||
if-eqz v0, :cond_37
|
||||
|
||||
iget-object v0, p0, Lradiant/AnimatedCoverView;->surface:Landroid/view/Surface;
|
||||
|
||||
if-eqz v0, :cond_37
|
||||
|
||||
iget-object v0, p0, Lradiant/AnimatedCoverView;->player:Landroid/media/MediaPlayer;
|
||||
|
||||
if-eqz v0, :cond_d
|
||||
|
||||
goto :goto_37
|
||||
|
||||
:cond_d
|
||||
:try_start_d
|
||||
new-instance v0, Landroid/media/MediaPlayer;
|
||||
|
||||
invoke-direct {v0}, Landroid/media/MediaPlayer;-><init>()V
|
||||
|
||||
iput-object v0, p0, Lradiant/AnimatedCoverView;->player:Landroid/media/MediaPlayer;
|
||||
|
||||
iget-object v1, p0, Lradiant/AnimatedCoverView;->surface:Landroid/view/Surface;
|
||||
|
||||
invoke-virtual {v0, v1}, Landroid/media/MediaPlayer;->setSurface(Landroid/view/Surface;)V
|
||||
|
||||
invoke-virtual {v0, p0}, Landroid/media/MediaPlayer;->setOnPreparedListener(Landroid/media/MediaPlayer$OnPreparedListener;)V
|
||||
|
||||
invoke-virtual {v0, p0}, Landroid/media/MediaPlayer;->setOnInfoListener(Landroid/media/MediaPlayer$OnInfoListener;)V
|
||||
|
||||
invoke-virtual {v0, p0}, Landroid/media/MediaPlayer;->setOnErrorListener(Landroid/media/MediaPlayer$OnErrorListener;)V
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
invoke-virtual {v0, v1}, Landroid/media/MediaPlayer;->setLooping(Z)V
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
invoke-virtual {v0, v1, v1}, Landroid/media/MediaPlayer;->setVolume(FF)V
|
||||
|
||||
iget-object v1, p0, Lradiant/AnimatedCoverView;->url:Ljava/lang/String;
|
||||
|
||||
invoke-virtual {v0, v1}, Landroid/media/MediaPlayer;->setDataSource(Ljava/lang/String;)V
|
||||
|
||||
invoke-virtual {v0}, Landroid/media/MediaPlayer;->prepareAsync()V
|
||||
:try_end_32
|
||||
.catchall {:try_start_d .. :try_end_32} :catchall_33
|
||||
|
||||
goto :goto_37
|
||||
|
||||
:catchall_33
|
||||
move-exception v0
|
||||
|
||||
invoke-direct {p0}, Lradiant/AnimatedCoverView;->release()V
|
||||
|
||||
:cond_37
|
||||
:goto_37
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private sync()V
|
||||
.registers 8
|
||||
|
||||
invoke-virtual {p0}, Lradiant/AnimatedCoverView;->getLayoutParams()Landroid/view/ViewGroup$LayoutParams;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
iget-object v1, p0, Lradiant/AnimatedCoverView;->target:Landroid/widget/ImageView;
|
||||
|
||||
invoke-virtual {v1}, Landroid/widget/ImageView;->getWidth()I
|
||||
|
||||
move-result v1
|
||||
|
||||
const/4 v2, 0x1
|
||||
|
||||
invoke-static {v2, v1}, Ljava/lang/Math;->max(II)I
|
||||
|
||||
move-result v1
|
||||
|
||||
iget-object v3, p0, Lradiant/AnimatedCoverView;->target:Landroid/widget/ImageView;
|
||||
|
||||
invoke-virtual {v3}, Landroid/widget/ImageView;->getHeight()I
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-static {v2, v3}, Ljava/lang/Math;->max(II)I
|
||||
|
||||
move-result v3
|
||||
|
||||
if-eqz v0, :cond_2a
|
||||
|
||||
iget v4, v0, Landroid/view/ViewGroup$LayoutParams;->width:I
|
||||
|
||||
if-ne v4, v1, :cond_23
|
||||
|
||||
iget v4, v0, Landroid/view/ViewGroup$LayoutParams;->height:I
|
||||
|
||||
if-eq v4, v3, :cond_2a
|
||||
|
||||
:cond_23
|
||||
iput v1, v0, Landroid/view/ViewGroup$LayoutParams;->width:I
|
||||
|
||||
iput v3, v0, Landroid/view/ViewGroup$LayoutParams;->height:I
|
||||
|
||||
invoke-virtual {p0, v0}, Lradiant/AnimatedCoverView;->setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V
|
||||
|
||||
:cond_2a
|
||||
iget-object v0, p0, Lradiant/AnimatedCoverView;->target:Landroid/widget/ImageView;
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
move v3, v1
|
||||
|
||||
move v4, v3
|
||||
|
||||
:goto_2f
|
||||
if-eqz v0, :cond_58
|
||||
|
||||
iget-object v5, p0, Lradiant/AnimatedCoverView;->host:Landroid/view/ViewGroup;
|
||||
|
||||
if-eq v0, v5, :cond_58
|
||||
|
||||
invoke-virtual {v0}, Landroid/view/View;->getLeft()I
|
||||
|
||||
move-result v5
|
||||
|
||||
int-to-float v5, v5
|
||||
|
||||
invoke-virtual {v0}, Landroid/view/View;->getTranslationX()F
|
||||
|
||||
move-result v6
|
||||
|
||||
add-float/2addr v5, v6
|
||||
|
||||
add-float/2addr v3, v5
|
||||
|
||||
invoke-virtual {v0}, Landroid/view/View;->getTop()I
|
||||
|
||||
move-result v5
|
||||
|
||||
int-to-float v5, v5
|
||||
|
||||
invoke-virtual {v0}, Landroid/view/View;->getTranslationY()F
|
||||
|
||||
move-result v6
|
||||
|
||||
add-float/2addr v5, v6
|
||||
|
||||
add-float/2addr v4, v5
|
||||
|
||||
invoke-virtual {v0}, Landroid/view/View;->getParent()Landroid/view/ViewParent;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
instance-of v5, v0, Landroid/view/View;
|
||||
|
||||
if-eqz v5, :cond_56
|
||||
|
||||
check-cast v0, Landroid/view/View;
|
||||
|
||||
goto :goto_2f
|
||||
|
||||
:cond_56
|
||||
const/4 v0, 0x0
|
||||
|
||||
goto :goto_2f
|
||||
|
||||
:cond_58
|
||||
if-nez v0, :cond_5b
|
||||
|
||||
return-void
|
||||
|
||||
:cond_5b
|
||||
invoke-virtual {p0}, Lradiant/AnimatedCoverView;->getLeft()I
|
||||
|
||||
move-result v0
|
||||
|
||||
int-to-float v0, v0
|
||||
|
||||
sub-float/2addr v3, v0
|
||||
|
||||
invoke-virtual {p0, v3}, Lradiant/AnimatedCoverView;->setTranslationX(F)V
|
||||
|
||||
invoke-virtual {p0}, Lradiant/AnimatedCoverView;->getTop()I
|
||||
|
||||
move-result v0
|
||||
|
||||
int-to-float v0, v0
|
||||
|
||||
sub-float/2addr v4, v0
|
||||
|
||||
invoke-virtual {p0, v4}, Lradiant/AnimatedCoverView;->setTranslationY(F)V
|
||||
|
||||
iget-boolean v0, p0, Lradiant/AnimatedCoverView;->outlined:Z
|
||||
|
||||
if-nez v0, :cond_8a
|
||||
|
||||
iput-boolean v2, p0, Lradiant/AnimatedCoverView;->outlined:Z
|
||||
|
||||
:try_start_73
|
||||
invoke-virtual {p0}, Lradiant/AnimatedCoverView;->getResources()Landroid/content/res/Resources;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
sget v3, Lcom/aspiro/wamp/R$dimen;->image_header_corner_radius:I
|
||||
|
||||
invoke-virtual {v0, v3}, Landroid/content/res/Resources;->getDimension(I)F
|
||||
|
||||
move-result v1
|
||||
:try_end_7d
|
||||
.catchall {:try_start_73 .. :try_end_7d} :catchall_7e
|
||||
|
||||
goto :goto_7f
|
||||
|
||||
:catchall_7e
|
||||
move-exception v0
|
||||
|
||||
:goto_7f
|
||||
new-instance v0, Lradiant/RoundOutline;
|
||||
|
||||
invoke-direct {v0, v1}, Lradiant/RoundOutline;-><init>(F)V
|
||||
|
||||
invoke-virtual {p0, v0}, Lradiant/AnimatedCoverView;->setOutlineProvider(Landroid/view/ViewOutlineProvider;)V
|
||||
|
||||
invoke-virtual {p0, v2}, Lradiant/AnimatedCoverView;->setClipToOutline(Z)V
|
||||
|
||||
:cond_8a
|
||||
iget-object v0, p0, Lradiant/AnimatedCoverView;->target:Landroid/widget/ImageView;
|
||||
|
||||
invoke-virtual {v0}, Landroid/widget/ImageView;->getVisibility()I
|
||||
|
||||
move-result v0
|
||||
|
||||
if-eqz v0, :cond_9c
|
||||
|
||||
invoke-virtual {p0}, Lradiant/AnimatedCoverView;->getVisibility()I
|
||||
|
||||
move-result v0
|
||||
|
||||
if-nez v0, :cond_9c
|
||||
|
||||
const/4 v0, 0x4
|
||||
|
||||
invoke-virtual {p0, v0}, Lradiant/AnimatedCoverView;->setVisibility(I)V
|
||||
|
||||
:cond_9c
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public onError(Landroid/media/MediaPlayer;II)Z
|
||||
.registers 4
|
||||
|
||||
iget-object p2, p0, Lradiant/AnimatedCoverView;->player:Landroid/media/MediaPlayer;
|
||||
|
||||
if-ne p1, p2, :cond_f
|
||||
|
||||
invoke-direct {p0}, Lradiant/AnimatedCoverView;->release()V
|
||||
|
||||
const/4 p1, 0x0
|
||||
|
||||
invoke-virtual {p0, p1}, Lradiant/AnimatedCoverView;->setAlpha(F)V
|
||||
|
||||
const/4 p1, 0x4
|
||||
|
||||
invoke-virtual {p0, p1}, Lradiant/AnimatedCoverView;->setVisibility(I)V
|
||||
|
||||
:cond_f
|
||||
const/4 p1, 0x1
|
||||
|
||||
return p1
|
||||
.end method
|
||||
|
||||
.method public onInfo(Landroid/media/MediaPlayer;II)Z
|
||||
.registers 4
|
||||
|
||||
iget-object p3, p0, Lradiant/AnimatedCoverView;->player:Landroid/media/MediaPlayer;
|
||||
|
||||
if-ne p1, p3, :cond_1a
|
||||
|
||||
const/4 p1, 0x3
|
||||
|
||||
if-ne p2, p1, :cond_1a
|
||||
|
||||
invoke-virtual {p0}, Lradiant/AnimatedCoverView;->animate()Landroid/view/ViewPropertyAnimator;
|
||||
|
||||
move-result-object p1
|
||||
|
||||
const/high16 p2, 0x3f800000 # 1.0f
|
||||
|
||||
invoke-virtual {p1, p2}, Landroid/view/ViewPropertyAnimator;->alpha(F)Landroid/view/ViewPropertyAnimator;
|
||||
|
||||
move-result-object p1
|
||||
|
||||
const-wide/16 p2, 0x12c
|
||||
|
||||
invoke-virtual {p1, p2, p3}, Landroid/view/ViewPropertyAnimator;->setDuration(J)Landroid/view/ViewPropertyAnimator;
|
||||
|
||||
move-result-object p1
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/ViewPropertyAnimator;->start()V
|
||||
|
||||
:cond_1a
|
||||
const/4 p1, 0x0
|
||||
|
||||
return p1
|
||||
.end method
|
||||
|
||||
.method public onLayoutChange(Landroid/view/View;IIIIIIII)V
|
||||
.registers 10
|
||||
|
||||
invoke-virtual {p0, p0}, Lradiant/AnimatedCoverView;->post(Ljava/lang/Runnable;)Z
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public onPrepared(Landroid/media/MediaPlayer;)V
|
||||
.registers 3
|
||||
|
||||
iget-object v0, p0, Lradiant/AnimatedCoverView;->player:Landroid/media/MediaPlayer;
|
||||
|
||||
if-ne p1, v0, :cond_7
|
||||
|
||||
invoke-virtual {p1}, Landroid/media/MediaPlayer;->start()V
|
||||
|
||||
:cond_7
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public onSurfaceTextureAvailable(Landroid/graphics/SurfaceTexture;II)V
|
||||
.registers 4
|
||||
|
||||
new-instance p2, Landroid/view/Surface;
|
||||
|
||||
invoke-direct {p2, p1}, Landroid/view/Surface;-><init>(Landroid/graphics/SurfaceTexture;)V
|
||||
|
||||
iput-object p2, p0, Lradiant/AnimatedCoverView;->surface:Landroid/view/Surface;
|
||||
|
||||
invoke-direct {p0}, Lradiant/AnimatedCoverView;->start()V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public onSurfaceTextureDestroyed(Landroid/graphics/SurfaceTexture;)Z
|
||||
.registers 3
|
||||
|
||||
invoke-direct {p0}, Lradiant/AnimatedCoverView;->release()V
|
||||
|
||||
const/4 p1, 0x0
|
||||
|
||||
iput-object p1, p0, Lradiant/AnimatedCoverView;->url:Ljava/lang/String;
|
||||
|
||||
iget-object v0, p0, Lradiant/AnimatedCoverView;->surface:Landroid/view/Surface;
|
||||
|
||||
if-eqz v0, :cond_f
|
||||
|
||||
iget-object v0, p0, Lradiant/AnimatedCoverView;->surface:Landroid/view/Surface;
|
||||
|
||||
invoke-virtual {v0}, Landroid/view/Surface;->release()V
|
||||
|
||||
:cond_f
|
||||
iput-object p1, p0, Lradiant/AnimatedCoverView;->surface:Landroid/view/Surface;
|
||||
|
||||
const/4 p1, 0x1
|
||||
|
||||
return p1
|
||||
.end method
|
||||
|
||||
.method public onSurfaceTextureSizeChanged(Landroid/graphics/SurfaceTexture;II)V
|
||||
.registers 4
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public onSurfaceTextureUpdated(Landroid/graphics/SurfaceTexture;)V
|
||||
.registers 2
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public onViewAttachedToWindow(Landroid/view/View;)V
|
||||
.registers 2
|
||||
|
||||
:try_start_0
|
||||
invoke-direct {p0}, Lradiant/AnimatedCoverView;->refresh()V
|
||||
:try_end_3
|
||||
.catchall {:try_start_0 .. :try_end_3} :catchall_4
|
||||
|
||||
goto :goto_5
|
||||
|
||||
:catchall_4
|
||||
move-exception p1
|
||||
|
||||
:goto_5
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public onViewDetachedFromWindow(Landroid/view/View;)V
|
||||
.registers 2
|
||||
|
||||
invoke-direct {p0}, Lradiant/AnimatedCoverView;->release()V
|
||||
|
||||
const/4 p1, 0x0
|
||||
|
||||
iput-object p1, p0, Lradiant/AnimatedCoverView;->url:Ljava/lang/String;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public run()V
|
||||
.registers 2
|
||||
|
||||
:try_start_0
|
||||
invoke-direct {p0}, Lradiant/AnimatedCoverView;->sync()V
|
||||
:try_end_3
|
||||
.catchall {:try_start_0 .. :try_end_3} :catchall_4
|
||||
|
||||
goto :goto_5
|
||||
|
||||
:catchall_4
|
||||
move-exception v0
|
||||
|
||||
:goto_5
|
||||
return-void
|
||||
.end method
|
||||
File diff suppressed because it is too large.
Load diff
@@ -5,9 +5,6 @@
|
||||
# static fields
|
||||
.field public static volatile currentAlbumId:I
|
||||
|
||||
# 0 = Static, 1 = Animated (always rotate), 2 = Playback (follow live play state)
|
||||
.field public static volatile mode:I
|
||||
|
||||
# Live play state from the mini-player (t.c PlayState = Playing)
|
||||
.field public static isPlayingState:Landroidx/compose/runtime/MutableState;
|
||||
.annotation system Ldalvik/annotation/Signature;
|
||||
@@ -38,10 +35,6 @@
|
||||
|
||||
sput v0, Lradiant/HomeBackdrop;->currentAlbumId:I
|
||||
|
||||
const/4 v0, 0x2
|
||||
|
||||
sput v0, Lradiant/HomeBackdrop;->mode:I
|
||||
|
||||
sget-object v0, Ljava/lang/Boolean;->FALSE:Ljava/lang/Boolean;
|
||||
|
||||
const/4 v1, 0x0
|
||||
@@ -73,36 +66,6 @@
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static setModeStatic()V
|
||||
.locals 1
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput v0, Lradiant/HomeBackdrop;->mode:I
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static setModeAnimated()V
|
||||
.locals 1
|
||||
|
||||
const/4 v0, 0x1
|
||||
|
||||
sput v0, Lradiant/HomeBackdrop;->mode:I
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static setModePlayback()V
|
||||
.locals 1
|
||||
|
||||
const/4 v0, 0x2
|
||||
|
||||
sput v0, Lradiant/HomeBackdrop;->mode:I
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
# from the mini-player state ctor (t.<init>) whenever play state changes.
|
||||
.method public static onPlayState(Lcom/tidal/android/feature/appscaffold/ui/MiniPlayerContract$PlayState;)V
|
||||
.locals 2
|
||||
@@ -378,13 +341,7 @@
|
||||
|
||||
move-object v9, v1 # v9 = cover uuid
|
||||
|
||||
# v10 = isPlaying, mirrored from the Player Backdrop variant
|
||||
sget v10, Lradiant/HomeBackdrop;->mode:I
|
||||
|
||||
const/4 v11, 0x2
|
||||
|
||||
if-ne v10, v11, :rl_mode_done
|
||||
|
||||
# v10 = isPlaying, straight from the live mini-player state (both modes follow it)
|
||||
sget-object v10, Lradiant/HomeBackdrop;->isPlayingState:Landroidx/compose/runtime/MutableState;
|
||||
|
||||
invoke-interface {v10}, Landroidx/compose/runtime/State;->getValue()Ljava/lang/Object;
|
||||
@@ -397,7 +354,6 @@
|
||||
|
||||
move-result v10
|
||||
|
||||
:rl_mode_done
|
||||
const/4 v11, 0x0 # v11 = isSeeking = false
|
||||
|
||||
const/4 v12, 0x0 # v12 = progress callback = null (unused while not seeking)
|
||||
@@ -406,7 +362,7 @@
|
||||
|
||||
const/4 v15, 0x0 # v15 = changed flags
|
||||
|
||||
invoke-static/range {v8 .. v15}, Lcom/tidal/android/feature/playerscreen/ui/composables/p3;->a(ILjava/lang/String;ZZLam0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
|
||||
invoke-static/range {v8 .. v15}, Lcom/tidal/android/feature/playerscreen/ui/composables/e3;->a(ILjava/lang/String;ZZLyl0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
|
||||
|
||||
:skip
|
||||
invoke-interface {v0}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V
|
||||
|
||||
@@ -0,0 +1,828 @@
|
||||
.class public final Lradiant/Kawarp;
|
||||
.super Ljava/lang/Object;
|
||||
|
||||
# interfaces
|
||||
.implements Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
.implements Ljava/lang/Runnable;
|
||||
.implements Landroid/view/Choreographer$FrameCallback;
|
||||
.implements Lc0/c; # MARKER: R8 Lc0/c;
|
||||
|
||||
|
||||
# static fields
|
||||
.field private static final DRAW:Lradiant/Kawarp;
|
||||
|
||||
.field private static final IDLE_STOP_MS:J = 0x1f4L
|
||||
|
||||
.field private static final LOADER:Ljava/util/concurrent/ExecutorService;
|
||||
|
||||
.field private static volatile appContext:Landroid/content/Context;
|
||||
|
||||
.field private static engine:Ldev/kawarp/KawarpEngine;
|
||||
|
||||
.field private static final fallbackState:Landroidx/compose/runtime/MutableState;
|
||||
|
||||
.field private static frameScheduled:Z
|
||||
|
||||
.field private static final frameState:Landroidx/compose/runtime/MutableIntState;
|
||||
|
||||
.field private static frameTick:I
|
||||
|
||||
.field private static lastDrawUptime:J
|
||||
|
||||
.field private static volatile loadToken:I
|
||||
|
||||
.field private static volatile loader:Lcoil/e; # MARKER: R8 Lcoil/e;
|
||||
|
||||
.field private static volatile requestedUuid:Ljava/lang/String;
|
||||
|
||||
|
||||
# instance fields
|
||||
.field private final albumId:I
|
||||
|
||||
.field private final token:I
|
||||
|
||||
.field private final uuid:Ljava/lang/String;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method static constructor <clinit>()V
|
||||
.registers 4
|
||||
|
||||
invoke-static {}, Ljava/util/concurrent/Executors;->newSingleThreadExecutor()Ljava/util/concurrent/ExecutorService;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
sput-object v0, Lradiant/Kawarp;->LOADER:Ljava/util/concurrent/ExecutorService;
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
invoke-static {v0}, Landroidx/compose/runtime/SnapshotIntStateKt;->mutableIntStateOf(I)Landroidx/compose/runtime/MutableIntState;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
sput-object v1, Lradiant/Kawarp;->frameState:Landroidx/compose/runtime/MutableIntState;
|
||||
|
||||
sget-object v1, Ljava/lang/Boolean;->FALSE:Ljava/lang/Boolean;
|
||||
|
||||
const/4 v2, 0x2
|
||||
|
||||
const/4 v3, 0x0
|
||||
|
||||
invoke-static {v1, v3, v2, v3}, Landroidx/compose/runtime/SnapshotStateKt;->mutableStateOf$default(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;ILjava/lang/Object;)Landroidx/compose/runtime/MutableState;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
sput-object v1, Lradiant/Kawarp;->fallbackState:Landroidx/compose/runtime/MutableState;
|
||||
|
||||
new-instance v1, Lradiant/Kawarp;
|
||||
|
||||
invoke-direct {v1, v0, v3, v0}, Lradiant/Kawarp;-><init>(ILjava/lang/String;I)V
|
||||
|
||||
sput-object v1, Lradiant/Kawarp;->DRAW:Lradiant/Kawarp;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private constructor <init>(ILjava/lang/String;I)V
|
||||
.registers 4
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
iput p1, p0, Lradiant/Kawarp;->albumId:I
|
||||
|
||||
iput-object p2, p0, Lradiant/Kawarp;->uuid:Ljava/lang/String;
|
||||
|
||||
iput p3, p0, Lradiant/Kawarp;->token:I
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private static attach(Landroidx/compose/runtime/Composer;)V
|
||||
.registers 3
|
||||
|
||||
sget-object v0, Lradiant/Kawarp;->loader:Lcoil/e; # MARKER: R8 Lcoil/e;
|
||||
|
||||
if-eqz v0, :cond_5
|
||||
|
||||
return-void
|
||||
|
||||
:cond_5
|
||||
:try_start_5
|
||||
invoke-static {}, Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalContext()Landroidx/compose/runtime/ProvidableCompositionLocal;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
invoke-interface {p0, v0}, Landroidx/compose/runtime/Composer;->consume(Landroidx/compose/runtime/CompositionLocal;)Ljava/lang/Object;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
instance-of v0, p0, Landroid/content/Context;
|
||||
|
||||
if-nez v0, :cond_12
|
||||
|
||||
return-void
|
||||
|
||||
:cond_12
|
||||
check-cast p0, Landroid/content/Context;
|
||||
|
||||
invoke-virtual {p0}, Landroid/content/Context;->getApplicationContext()Landroid/content/Context;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
instance-of v0, p0, Lud0/b$a; # MARKER: R8 Lud0/b$a;
|
||||
|
||||
if-nez v0, :cond_1d
|
||||
|
||||
return-void
|
||||
|
||||
:cond_1d
|
||||
move-object v0, p0
|
||||
|
||||
check-cast v0, Lud0/b$a; # MARKER: R8 Lud0/b$a;
|
||||
|
||||
invoke-interface {v0}, Lud0/b$a;->a()Lud0/b; # MARKER: R8 Lud0/b$a; Lud0/b; a
|
||||
|
||||
move-result-object v0
|
||||
|
||||
invoke-interface {v0}, Lud0/b;->a()Lpd0/e; # MARKER: R8 Lud0/b; Lpd0/e; a
|
||||
|
||||
move-result-object v0
|
||||
|
||||
instance-of v1, v0, Lcom/tidal/android/image/coil/base/CoilImageLoader;
|
||||
|
||||
if-nez v1, :cond_2d
|
||||
|
||||
return-void
|
||||
|
||||
:cond_2d
|
||||
sput-object p0, Lradiant/Kawarp;->appContext:Landroid/content/Context;
|
||||
|
||||
check-cast v0, Lcom/tidal/android/image/coil/base/CoilImageLoader;
|
||||
|
||||
iget-object p0, v0, Lcom/tidal/android/image/coil/base/CoilImageLoader;->a:Lcoil/e; # MARKER: R8 Lcoil/e; a
|
||||
|
||||
sput-object p0, Lradiant/Kawarp;->loader:Lcoil/e; # MARKER: R8 Lcoil/e;
|
||||
:try_end_35
|
||||
.catchall {:try_start_5 .. :try_end_35} :catchall_36
|
||||
|
||||
goto :goto_37
|
||||
|
||||
:catchall_36
|
||||
move-exception p0
|
||||
|
||||
:goto_37
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static b(Lcom/tidal/android/feature/playerscreen/ui/model/PlayerBackgroundStyle;JILjava/lang/String;ZZLyl0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V # MARKER: R8 Lyl0/a;
|
||||
.registers 11
|
||||
|
||||
invoke-static {p3, p4, p5, p8, p9}, Lradiant/Kawarp;->render(ILjava/lang/String;ZLandroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private static draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
|
||||
.registers 4
|
||||
|
||||
sget-object v0, Lradiant/Kawarp;->frameState:Landroidx/compose/runtime/MutableIntState;
|
||||
|
||||
invoke-interface {v0}, Landroidx/compose/runtime/MutableIntState;->getIntValue()I
|
||||
|
||||
invoke-static {}, Landroid/os/SystemClock;->uptimeMillis()J
|
||||
|
||||
move-result-wide v0
|
||||
|
||||
sput-wide v0, Lradiant/Kawarp;->lastDrawUptime:J
|
||||
|
||||
invoke-static {}, Lradiant/Kawarp;->schedule()V
|
||||
|
||||
invoke-interface {p0}, Landroidx/compose/ui/graphics/drawscope/DrawScope;->getSize-NH-jbRc()J
|
||||
|
||||
move-result-wide v0
|
||||
|
||||
invoke-static {v0, v1}, Landroidx/compose/ui/geometry/Size;->getWidth-impl(J)F
|
||||
|
||||
move-result v2
|
||||
|
||||
invoke-static {v0, v1}, Landroidx/compose/ui/geometry/Size;->getHeight-impl(J)F
|
||||
|
||||
move-result v0
|
||||
|
||||
:try_start_1a
|
||||
sget-object v1, Lradiant/Kawarp;->engine:Ldev/kawarp/KawarpEngine;
|
||||
|
||||
invoke-interface {p0}, Landroidx/compose/ui/graphics/drawscope/DrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/DrawContext;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
invoke-interface {p0}, Landroidx/compose/ui/graphics/drawscope/DrawContext;->getCanvas()Landroidx/compose/ui/graphics/Canvas;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
invoke-static {p0}, Landroidx/compose/ui/graphics/AndroidCanvas_androidKt;->getNativeCanvas(Landroidx/compose/ui/graphics/Canvas;)Landroid/graphics/Canvas;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
invoke-virtual {v1, p0, v2, v0}, Ldev/kawarp/KawarpEngine;->draw(Landroid/graphics/Canvas;FF)Z
|
||||
:try_end_2b
|
||||
.catchall {:try_start_1a .. :try_end_2b} :catchall_2c
|
||||
|
||||
goto :goto_34
|
||||
|
||||
:catchall_2c
|
||||
move-exception p0
|
||||
|
||||
sget-object p0, Lradiant/Kawarp;->fallbackState:Landroidx/compose/runtime/MutableState;
|
||||
|
||||
sget-object v0, Ljava/lang/Boolean;->TRUE:Ljava/lang/Boolean;
|
||||
|
||||
invoke-interface {p0, v0}, Landroidx/compose/runtime/MutableState;->setValue(Ljava/lang/Object;)V
|
||||
|
||||
:goto_34
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private static ensureEngine()Z
|
||||
.registers 4
|
||||
|
||||
sget-object v0, Lradiant/Kawarp;->engine:Ldev/kawarp/KawarpEngine;
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
if-eqz v0, :cond_6
|
||||
|
||||
return v1
|
||||
|
||||
:cond_6
|
||||
invoke-static {}, Ldev/kawarp/KawarpEngine;->isSupported()Z
|
||||
|
||||
move-result v0
|
||||
|
||||
const/4 v2, 0x0
|
||||
|
||||
if-nez v0, :cond_e
|
||||
|
||||
return v2
|
||||
|
||||
:cond_e
|
||||
:try_start_e
|
||||
new-instance v0, Ldev/kawarp/KawarpEngine;
|
||||
|
||||
invoke-direct {v0}, Ldev/kawarp/KawarpEngine;-><init>()V
|
||||
|
||||
const v3, __RL_KW_WARP__
|
||||
|
||||
invoke-static {v3}, Lradiant/Kawarp;->tk(I)I
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-static {v3}, Ljava/lang/Float;->intBitsToFloat(I)F
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-virtual {v0, v3}, Ldev/kawarp/KawarpEngine;->setWarpIntensity(F)V
|
||||
|
||||
const v3, __RL_KW_SPEED__
|
||||
|
||||
invoke-static {v3}, Lradiant/Kawarp;->tk(I)I
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-static {v3}, Ljava/lang/Float;->intBitsToFloat(I)F
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-virtual {v0, v3}, Ldev/kawarp/KawarpEngine;->setAnimationSpeed(F)V
|
||||
|
||||
const v3, __RL_KW_SCALE__
|
||||
|
||||
invoke-static {v3}, Lradiant/Kawarp;->tk(I)I
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-static {v3}, Ljava/lang/Float;->intBitsToFloat(I)F
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-virtual {v0, v3}, Ldev/kawarp/KawarpEngine;->setScale(F)V
|
||||
|
||||
const v3, __RL_KW_DITHER__
|
||||
|
||||
invoke-static {v3}, Lradiant/Kawarp;->tk(I)I
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-static {v3}, Ljava/lang/Float;->intBitsToFloat(I)F
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-virtual {v0, v3}, Ldev/kawarp/KawarpEngine;->setDithering(F)V
|
||||
|
||||
const v3, __RL_KW_DARKEN__
|
||||
|
||||
invoke-static {v3}, Lradiant/Kawarp;->tk(I)I
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-static {v3}, Ljava/lang/Float;->intBitsToFloat(I)F
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-virtual {v0, v3}, Ldev/kawarp/KawarpEngine;->setAutoDarken(F)V
|
||||
|
||||
const v3, __RL_KW_REACTIVE__
|
||||
|
||||
invoke-static {v3}, Lradiant/Kawarp;->tk(I)I
|
||||
|
||||
move-result v3
|
||||
|
||||
if-eqz v3, :cond_64
|
||||
|
||||
move v3, v1
|
||||
|
||||
goto :goto_65
|
||||
|
||||
:cond_64
|
||||
move v3, v2
|
||||
|
||||
:goto_65
|
||||
invoke-virtual {v0, v3}, Ldev/kawarp/KawarpEngine;->setPlaybackReactive(Z)V
|
||||
|
||||
const v3, __RL_KW_BLUR__
|
||||
|
||||
invoke-static {v3}, Lradiant/Kawarp;->tk(I)I
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-virtual {v0, v3}, Ldev/kawarp/KawarpEngine;->setBlurPasses(I)V
|
||||
|
||||
const v3, __RL_KW_CONTRAST__
|
||||
|
||||
invoke-static {v3}, Lradiant/Kawarp;->tk(I)I
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-static {v3}, Ljava/lang/Float;->intBitsToFloat(I)F
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-virtual {v0, v3}, Ldev/kawarp/KawarpEngine;->setContrast(F)V
|
||||
|
||||
const v3, __RL_KW_SAT__
|
||||
|
||||
invoke-static {v3}, Lradiant/Kawarp;->tk(I)I
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-static {v3}, Ljava/lang/Float;->intBitsToFloat(I)F
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-virtual {v0, v3}, Ldev/kawarp/KawarpEngine;->setSaturation(F)V
|
||||
|
||||
const v3, __RL_KW_BRIGHT__
|
||||
|
||||
invoke-static {v3}, Lradiant/Kawarp;->tk(I)I
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-static {v3}, Ljava/lang/Float;->intBitsToFloat(I)F
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-virtual {v0, v3}, Ldev/kawarp/KawarpEngine;->setBrightness(F)V
|
||||
|
||||
sput-object v0, Lradiant/Kawarp;->engine:Ldev/kawarp/KawarpEngine;
|
||||
:try_end_9e
|
||||
.catchall {:try_start_e .. :try_end_9e} :catchall_9f
|
||||
|
||||
return v1
|
||||
|
||||
:catchall_9f
|
||||
move-exception v0
|
||||
|
||||
sget-object v0, Lradiant/Kawarp;->fallbackState:Landroidx/compose/runtime/MutableState;
|
||||
|
||||
sget-object v1, Ljava/lang/Boolean;->TRUE:Ljava/lang/Boolean;
|
||||
|
||||
invoke-interface {v0, v1}, Landroidx/compose/runtime/MutableState;->setValue(Ljava/lang/Object;)V
|
||||
|
||||
return v2
|
||||
.end method
|
||||
|
||||
.method private fail()V
|
||||
.registers 3
|
||||
|
||||
iget v0, p0, Lradiant/Kawarp;->token:I
|
||||
|
||||
sget v1, Lradiant/Kawarp;->loadToken:I
|
||||
|
||||
if-ne v0, v1, :cond_9
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-object v0, Lradiant/Kawarp;->requestedUuid:Ljava/lang/String;
|
||||
|
||||
:cond_9
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static render(ILjava/lang/String;ZLandroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;)V
|
||||
.registers 13
|
||||
|
||||
const v0, 0x52415750
|
||||
|
||||
invoke-interface {p4, v0}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V
|
||||
|
||||
invoke-static {p4}, Lradiant/Kawarp;->attach(Landroidx/compose/runtime/Composer;)V
|
||||
|
||||
sget-object v0, Lradiant/Kawarp;->fallbackState:Landroidx/compose/runtime/MutableState;
|
||||
|
||||
invoke-interface {v0}, Landroidx/compose/runtime/MutableState;->getValue()Ljava/lang/Object;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
check-cast v0, Ljava/lang/Boolean;
|
||||
|
||||
invoke-virtual {v0}, Ljava/lang/Boolean;->booleanValue()Z
|
||||
|
||||
move-result v0
|
||||
|
||||
if-nez v0, :cond_37
|
||||
|
||||
invoke-static {}, Lradiant/Kawarp;->ensureEngine()Z
|
||||
|
||||
move-result v0
|
||||
|
||||
if-eqz v0, :cond_37
|
||||
|
||||
sget-object v0, Lradiant/Kawarp;->engine:Ldev/kawarp/KawarpEngine;
|
||||
|
||||
invoke-virtual {v0, p2}, Ldev/kawarp/KawarpEngine;->setPlaying(Z)V
|
||||
|
||||
invoke-static {p0, p1}, Lradiant/Kawarp;->request(ILjava/lang/String;)V
|
||||
|
||||
const/high16 p0, 0x3f800000 # 1.0f
|
||||
|
||||
invoke-static {p3, p0}, Landroidx/compose/foundation/layout/SizeKt;->fillMaxSize(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
sget-object p1, Lradiant/Kawarp;->DRAW:Lradiant/Kawarp;
|
||||
|
||||
invoke-static {p0, p1}, Landroidx/compose/ui/draw/DrawModifierKt;->drawBehind(Landroidx/compose/ui/Modifier;Lyl0/l;)Landroidx/compose/ui/Modifier; # MARKER: R8 Lyl0/l;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
const/4 p1, 0x0
|
||||
|
||||
invoke-static {p0, p4, p1}, Landroidx/compose/foundation/layout/SpacerKt;->Spacer(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
|
||||
|
||||
move-object v6, p4
|
||||
|
||||
goto :goto_42
|
||||
|
||||
:cond_37
|
||||
const/4 v4, 0x0
|
||||
|
||||
const/4 v7, 0x0
|
||||
|
||||
const/4 v3, 0x0
|
||||
|
||||
move v0, p0
|
||||
|
||||
move-object v1, p1
|
||||
|
||||
move v2, p2
|
||||
|
||||
move-object v5, p3
|
||||
|
||||
move-object v6, p4
|
||||
|
||||
invoke-static/range {v0 .. v7}, Lcom/tidal/android/feature/playerscreen/ui/composables/e3;->a(ILjava/lang/String;ZZLyl0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V # MARKER: R8 Lcom/tidal/android/feature/playerscreen/ui/composables/e3; Lyl0/a; a
|
||||
|
||||
:goto_42
|
||||
invoke-interface {v6}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private static request(ILjava/lang/String;)V
|
||||
.registers 5
|
||||
|
||||
if-eqz p1, :cond_28
|
||||
|
||||
invoke-virtual {p1}, Ljava/lang/String;->length()I
|
||||
|
||||
move-result v0
|
||||
|
||||
if-eqz v0, :cond_28
|
||||
|
||||
sget-object v0, Lradiant/Kawarp;->requestedUuid:Ljava/lang/String;
|
||||
|
||||
invoke-virtual {p1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
|
||||
|
||||
move-result v0
|
||||
|
||||
if-eqz v0, :cond_11
|
||||
|
||||
goto :goto_28
|
||||
|
||||
:cond_11
|
||||
sget-object v0, Lradiant/Kawarp;->loader:Lcoil/e; # MARKER: R8 Lcoil/e;
|
||||
|
||||
if-nez v0, :cond_16
|
||||
|
||||
return-void
|
||||
|
||||
:cond_16
|
||||
sput-object p1, Lradiant/Kawarp;->requestedUuid:Ljava/lang/String;
|
||||
|
||||
sget-object v0, Lradiant/Kawarp;->LOADER:Ljava/util/concurrent/ExecutorService;
|
||||
|
||||
new-instance v1, Lradiant/Kawarp;
|
||||
|
||||
sget v2, Lradiant/Kawarp;->loadToken:I
|
||||
|
||||
add-int/lit8 v2, v2, 0x1
|
||||
|
||||
sput v2, Lradiant/Kawarp;->loadToken:I
|
||||
|
||||
invoke-direct {v1, p0, p1, v2}, Lradiant/Kawarp;-><init>(ILjava/lang/String;I)V
|
||||
|
||||
invoke-interface {v0, v1}, Ljava/util/concurrent/ExecutorService;->execute(Ljava/lang/Runnable;)V
|
||||
|
||||
:cond_28
|
||||
:goto_28
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private static schedule()V
|
||||
.registers 2
|
||||
|
||||
sget-boolean v0, Lradiant/Kawarp;->frameScheduled:Z
|
||||
|
||||
if-eqz v0, :cond_5
|
||||
|
||||
return-void
|
||||
|
||||
:cond_5
|
||||
const/4 v0, 0x1
|
||||
|
||||
sput-boolean v0, Lradiant/Kawarp;->frameScheduled:Z
|
||||
|
||||
invoke-static {}, Landroid/view/Choreographer;->getInstance()Landroid/view/Choreographer;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
sget-object v1, Lradiant/Kawarp;->DRAW:Lradiant/Kawarp;
|
||||
|
||||
invoke-virtual {v0, v1}, Landroid/view/Choreographer;->postFrameCallback(Landroid/view/Choreographer$FrameCallback;)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private static tk(I)I
|
||||
.registers 1
|
||||
|
||||
return p0
|
||||
.end method
|
||||
|
||||
.method private static toBitmap(Landroid/graphics/drawable/Drawable;)Landroid/graphics/Bitmap;
|
||||
.registers 4
|
||||
|
||||
if-nez p0, :cond_4
|
||||
|
||||
const/4 p0, 0x0
|
||||
|
||||
return-object p0
|
||||
|
||||
:cond_4
|
||||
instance-of v0, p0, Landroid/graphics/drawable/BitmapDrawable;
|
||||
|
||||
if-eqz v0, :cond_f
|
||||
|
||||
check-cast p0, Landroid/graphics/drawable/BitmapDrawable;
|
||||
|
||||
invoke-virtual {p0}, Landroid/graphics/drawable/BitmapDrawable;->getBitmap()Landroid/graphics/Bitmap;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
return-object p0
|
||||
|
||||
:cond_f
|
||||
sget-object v0, Landroid/graphics/Bitmap$Config;->ARGB_8888:Landroid/graphics/Bitmap$Config;
|
||||
|
||||
const/16 v1, 0x100
|
||||
|
||||
invoke-static {v1, v1, v0}, Landroid/graphics/Bitmap;->createBitmap(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
const/4 v2, 0x0
|
||||
|
||||
invoke-virtual {p0, v2, v2, v1, v1}, Landroid/graphics/drawable/Drawable;->setBounds(IIII)V
|
||||
|
||||
new-instance v1, Landroid/graphics/Canvas;
|
||||
|
||||
invoke-direct {v1, v0}, Landroid/graphics/Canvas;-><init>(Landroid/graphics/Bitmap;)V
|
||||
|
||||
invoke-virtual {p0, v1}, Landroid/graphics/drawable/Drawable;->draw(Landroid/graphics/Canvas;)V
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public a(Landroid/graphics/drawable/Drawable;)V
|
||||
.registers 4
|
||||
|
||||
iget v0, p0, Lradiant/Kawarp;->token:I
|
||||
|
||||
sget v1, Lradiant/Kawarp;->loadToken:I
|
||||
|
||||
if-eq v0, v1, :cond_7
|
||||
|
||||
return-void
|
||||
|
||||
:cond_7
|
||||
invoke-static {p1}, Lradiant/Kawarp;->toBitmap(Landroid/graphics/drawable/Drawable;)Landroid/graphics/Bitmap;
|
||||
|
||||
move-result-object p1
|
||||
|
||||
if-nez p1, :cond_11
|
||||
|
||||
invoke-direct {p0}, Lradiant/Kawarp;->fail()V
|
||||
|
||||
return-void
|
||||
|
||||
:cond_11
|
||||
sget-object v0, Lradiant/Kawarp;->engine:Ldev/kawarp/KawarpEngine;
|
||||
|
||||
invoke-virtual {v0, p1}, Ldev/kawarp/KawarpEngine;->setCover(Landroid/graphics/Bitmap;)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public b(Landroid/graphics/drawable/Drawable;)V
|
||||
.registers 2
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public c(Landroid/graphics/drawable/Drawable;)V
|
||||
.registers 2
|
||||
|
||||
invoke-direct {p0}, Lradiant/Kawarp;->fail()V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public doFrame(J)V
|
||||
.registers 5
|
||||
|
||||
const/4 p1, 0x0
|
||||
|
||||
sput-boolean p1, Lradiant/Kawarp;->frameScheduled:Z
|
||||
|
||||
invoke-static {}, Landroid/os/SystemClock;->uptimeMillis()J
|
||||
|
||||
move-result-wide p1
|
||||
|
||||
sget-wide v0, Lradiant/Kawarp;->lastDrawUptime:J
|
||||
|
||||
sub-long/2addr p1, v0
|
||||
|
||||
const-wide/16 v0, 0x1f4
|
||||
|
||||
cmp-long p1, p1, v0
|
||||
|
||||
if-lez p1, :cond_11
|
||||
|
||||
return-void
|
||||
|
||||
:cond_11
|
||||
sget-object p1, Lradiant/Kawarp;->frameState:Landroidx/compose/runtime/MutableIntState;
|
||||
|
||||
sget p2, Lradiant/Kawarp;->frameTick:I
|
||||
|
||||
add-int/lit8 p2, p2, 0x1
|
||||
|
||||
sput p2, Lradiant/Kawarp;->frameTick:I
|
||||
|
||||
invoke-interface {p1, p2}, Landroidx/compose/runtime/MutableIntState;->setIntValue(I)V
|
||||
|
||||
invoke-static {}, Lradiant/Kawarp;->schedule()V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public invoke(Ljava/lang/Object;)Ljava/lang/Object;
|
||||
.registers 2
|
||||
|
||||
check-cast p1, Landroidx/compose/ui/graphics/drawscope/DrawScope;
|
||||
|
||||
invoke-static {p1}, Lradiant/Kawarp;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
|
||||
|
||||
sget-object p1, Lkotlin/u;->a:Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
return-object p1
|
||||
.end method
|
||||
|
||||
.method public run()V
|
||||
.registers 15
|
||||
|
||||
:try_start_0
|
||||
new-instance v0, Lpd0/g; # MARKER: R8 Lpd0/g;
|
||||
|
||||
sget-object v1, Lradiant/Kawarp;->appContext:Landroid/content/Context;
|
||||
|
||||
new-instance v2, Lcom/tidal/android/image/core/b$a; # MARKER: R8 Lcom/tidal/android/image/core/b$a;
|
||||
|
||||
iget v3, p0, Lradiant/Kawarp;->albumId:I
|
||||
|
||||
invoke-static {v3}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
|
||||
|
||||
move-result-object v3
|
||||
|
||||
iget-object v4, p0, Lradiant/Kawarp;->uuid:Ljava/lang/String;
|
||||
|
||||
invoke-direct {v2, v3, v4}, Lcom/tidal/android/image/core/b$a;-><init>(Ljava/lang/String;Ljava/lang/String;)V # MARKER: R8 Lcom/tidal/android/image/core/b$a;
|
||||
|
||||
const/4 v7, 0x0
|
||||
|
||||
const/4 v8, 0x0
|
||||
|
||||
const/4 v3, 0x0
|
||||
|
||||
const/4 v4, 0x0
|
||||
|
||||
const/4 v5, 0x0
|
||||
|
||||
const/4 v6, 0x0
|
||||
|
||||
invoke-direct/range {v0 .. v8}, Lpd0/g;-><init>(Landroid/content/Context;Lcom/tidal/android/image/core/b;Lcom/tidal/android/image/core/b$h$a;Lcom/tidal/android/image/core/b$h$a;ZLjava/util/List;Lpd0/f;Z)V # MARKER: R8 Lpd0/g; Lcom/tidal/android/image/core/b; Lcom/tidal/android/image/core/b$h$a; Lpd0/f;
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
invoke-static {v0, v1}, Lcom/tidal/android/image/coil/c;->a(Lpd0/g;Landroidx/compose/ui/layout/ContentScale;)Lcoil/request/h; # MARKER: R8 Lcom/tidal/android/image/coil/c; Lpd0/g; Lcoil/request/h; a
|
||||
|
||||
move-result-object v0
|
||||
|
||||
invoke-static {v0}, Lcoil/request/h;->a(Lcoil/request/h;)Lcoil/request/h$a; # MARKER: R8 Lcoil/request/h; Lcoil/request/h$a; a
|
||||
|
||||
move-result-object v0
|
||||
|
||||
iget-object v1, v0, Lcoil/request/h$a;->b:Lcoil/request/b; # MARKER: R8 Lcoil/request/h$a; Lcoil/request/b; b
|
||||
|
||||
new-instance v2, Lcoil/request/b; # MARKER: R8 Lcoil/request/b;
|
||||
|
||||
iget-object v3, v1, Lcoil/request/b;->a:Lkotlinx/coroutines/CoroutineDispatcher; # MARKER: R8 Lcoil/request/b; a
|
||||
|
||||
iget-object v4, v1, Lcoil/request/b;->b:Lkotlinx/coroutines/CoroutineDispatcher; # MARKER: R8 Lcoil/request/b; b
|
||||
|
||||
iget-object v5, v1, Lcoil/request/b;->c:Lkotlinx/coroutines/CoroutineDispatcher; # MARKER: R8 Lcoil/request/b; c
|
||||
|
||||
iget-object v6, v1, Lcoil/request/b;->d:Lkotlinx/coroutines/CoroutineDispatcher; # MARKER: R8 Lcoil/request/b; d
|
||||
|
||||
iget-object v7, v1, Lcoil/request/b;->e:Le0/c$a; # MARKER: R8 Lcoil/request/b; Le0/c$a; e
|
||||
|
||||
iget-object v8, v1, Lcoil/request/b;->f:Lcoil/size/Precision; # MARKER: R8 Lcoil/request/b; f
|
||||
|
||||
iget-object v9, v1, Lcoil/request/b;->g:Landroid/graphics/Bitmap$Config; # MARKER: R8 Lcoil/request/b; g
|
||||
|
||||
iget-boolean v10, v1, Lcoil/request/b;->h:Z # MARKER: R8 Lcoil/request/b; h
|
||||
|
||||
iget-object v11, v1, Lcoil/request/b;->i:Lcoil/request/CachePolicy; # MARKER: R8 Lcoil/request/b; i
|
||||
|
||||
iget-object v12, v1, Lcoil/request/b;->j:Lcoil/request/CachePolicy; # MARKER: R8 Lcoil/request/b; j
|
||||
|
||||
sget-object v13, Lcoil/request/CachePolicy;->DISABLED:Lcoil/request/CachePolicy;
|
||||
|
||||
invoke-direct/range {v2 .. v13}, Lcoil/request/b;-><init>(Lkotlinx/coroutines/CoroutineDispatcher;Lkotlinx/coroutines/CoroutineDispatcher;Lkotlinx/coroutines/CoroutineDispatcher;Lkotlinx/coroutines/CoroutineDispatcher;Le0/c$a;Lcoil/size/Precision;Landroid/graphics/Bitmap$Config;ZLcoil/request/CachePolicy;Lcoil/request/CachePolicy;Lcoil/request/CachePolicy;)V # MARKER: R8 Lcoil/request/b; Le0/c$a;
|
||||
|
||||
iput-object v2, v0, Lcoil/request/h$a;->b:Lcoil/request/b; # MARKER: R8 Lcoil/request/h$a; Lcoil/request/b; b
|
||||
|
||||
iput-object p0, v0, Lcoil/request/h$a;->d:Lc0/c; # MARKER: R8 Lcoil/request/h$a; Lc0/c; d
|
||||
|
||||
sget-object v1, Lradiant/Kawarp;->loader:Lcoil/e; # MARKER: R8 Lcoil/e;
|
||||
|
||||
invoke-virtual {v0}, Lcoil/request/h$a;->a()Lcoil/request/h; # MARKER: R8 Lcoil/request/h$a; Lcoil/request/h; a
|
||||
|
||||
move-result-object v0
|
||||
|
||||
invoke-interface {v1, v0}, Lcoil/e;->b(Lcoil/request/h;)Lcoil/request/d; # MARKER: R8 Lcoil/e; Lcoil/request/h; Lcoil/request/d; b
|
||||
:try_end_4d
|
||||
.catchall {:try_start_0 .. :try_end_4d} :catchall_4e
|
||||
|
||||
goto :goto_52
|
||||
|
||||
:catchall_4e
|
||||
move-exception v0
|
||||
|
||||
invoke-direct {p0}, Lradiant/Kawarp;->fail()V
|
||||
|
||||
:goto_52
|
||||
return-void
|
||||
.end method
|
||||
@@ -3,22 +3,20 @@
|
||||
|
||||
|
||||
# static fields
|
||||
.field public static final colorState:Landroidx/compose/runtime/MutableState; # player bg color
|
||||
.field public static final colorFlow:Lkotlinx/coroutines/flow/MutableStateFlow; # player bg color
|
||||
|
||||
|
||||
# direct methods
|
||||
.method static constructor <clinit>()V
|
||||
.locals 2
|
||||
.locals 1
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
const/4 v1, 0x2
|
||||
|
||||
invoke-static {v0, v0, v1, v0}, Landroidx/compose/runtime/SnapshotStateKt;->mutableStateOf$default(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;ILjava/lang/Object;)Landroidx/compose/runtime/MutableState;
|
||||
invoke-static {v0}, Lkotlinx/coroutines/flow/StateFlowKt;->MutableStateFlow(Ljava/lang/Object;)Lkotlinx/coroutines/flow/MutableStateFlow;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
sput-object v0, Lradiant/MiniPlayerBackground;->colorState:Landroidx/compose/runtime/MutableState;
|
||||
sput-object v0, Lradiant/MiniPlayerBackground;->colorFlow:Lkotlinx/coroutines/flow/MutableStateFlow;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -42,9 +40,19 @@
|
||||
|
||||
invoke-interface {p2, v0}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V
|
||||
|
||||
sget-object v0, Lradiant/MiniPlayerBackground;->colorState:Landroidx/compose/runtime/MutableState;
|
||||
sget-object v0, Lradiant/MiniPlayerBackground;->colorFlow:Lkotlinx/coroutines/flow/MutableStateFlow;
|
||||
|
||||
invoke-interface {v0}, Landroidx/compose/runtime/MutableState;->getValue()Ljava/lang/Object; # read player color
|
||||
const/4 v1, 0x0
|
||||
|
||||
const/4 v3, 0x0
|
||||
|
||||
const/4 v4, 0x1
|
||||
|
||||
invoke-static {v0, v1, p2, v3, v4}, Landroidx/compose/runtime/SnapshotStateKt;->collectAsState(Lkotlinx/coroutines/flow/StateFlow;Lkotlin/coroutines/g;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; # MARKER: R8 Lkotlin/coroutines/g;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
invoke-interface {v0}, Landroidx/compose/runtime/State;->getValue()Ljava/lang/Object;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
@@ -83,7 +91,7 @@
|
||||
|
||||
const/16 v7, 0x8
|
||||
|
||||
invoke-static/range {v0 .. v7}, Landroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-euL9pac(JLandroidx/compose/animation/core/AnimationSpec;Ljava/lang/String;Lam0/l;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
|
||||
invoke-static/range {v0 .. v7}, Landroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-euL9pac(JLandroidx/compose/animation/core/AnimationSpec;Ljava/lang/String;Lyl0/l;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; # MARKER: R8 Lyl0/l;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
@@ -131,9 +139,9 @@
|
||||
move-exception p0
|
||||
|
||||
:set_color
|
||||
sget-object p0, Lradiant/MiniPlayerBackground;->colorState:Landroidx/compose/runtime/MutableState;
|
||||
sget-object p0, Lradiant/MiniPlayerBackground;->colorFlow:Lkotlinx/coroutines/flow/MutableStateFlow;
|
||||
|
||||
invoke-interface {p0, v0}, Landroidx/compose/runtime/MutableState;->setValue(Ljava/lang/Object;)V
|
||||
invoke-interface {p0, v0}, Lkotlinx/coroutines/flow/MutableStateFlow;->setValue(Ljava/lang/Object;)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -1,7 +1,7 @@
|
||||
.class public final Lradiant/MiniSeekerFloating;
|
||||
.super Ljava/lang/Object;
|
||||
|
||||
.implements Lam0/l;
|
||||
.implements Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
|
||||
# static fields
|
||||
@@ -46,7 +46,7 @@
|
||||
.catch Ljava/lang/Throwable; {:try_start .. :try_end} :swallow
|
||||
|
||||
:swallow
|
||||
sget-object v0, Lkotlin/u;->a:Lkotlin/u; # Unit
|
||||
sget-object v0, Lkotlin/u;->a:Lkotlin/u; # Unit MARKER: R8 Lkotlin/u;
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
# static fields
|
||||
.field public static progressState:Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
.field public static volatile vm:Lgh/j;
|
||||
.field public static volatile vm:Leh/j; # MARKER: R8 Leh/j;
|
||||
|
||||
.field public static volatile sub:Lio/reactivex/disposables/Disposable;
|
||||
|
||||
@@ -57,40 +57,40 @@
|
||||
|
||||
:start_block
|
||||
:try_start
|
||||
sget-object v0, Lradiant/MiniSeekerLine;->vm:Lgh/j; # cached vm
|
||||
sget-object v0, Lradiant/MiniSeekerLine;->vm:Leh/j; # cached vm MARKER: R8 Leh/j;
|
||||
|
||||
if-nez v0, :got_vm # reuse if present
|
||||
|
||||
invoke-static {}, Lcom/aspiro/wamp/App$a;->a()Lcom/aspiro/wamp/App; # app singleton
|
||||
invoke-static {}, Lcom/aspiro/wamp/App$a;->a()Lcom/aspiro/wamp/App; # app singleton MARKER: R8 a
|
||||
|
||||
move-result-object v0 # app
|
||||
|
||||
invoke-virtual {v0}, Lcom/aspiro/wamp/App;->e()Le5/c; # dagger component
|
||||
invoke-virtual {v0}, Lcom/aspiro/wamp/App;->e()Le5/c; # dagger component MARKER: R8 Le5/c; e
|
||||
|
||||
move-result-object v0 # component
|
||||
|
||||
check-cast v0, Le5/z$n2; # narrow type
|
||||
check-cast v0, Le5/d0$t2; # narrow type MARKER: R8 Le5/d0$t2;
|
||||
|
||||
iget-object v0, v0, Le5/z$n2;->z0:Ldagger/internal/j; # playqueue provider
|
||||
iget-object v0, v0, Le5/d0$t2;->e1:Ldagger/internal/j; # playqueue provider MARKER: R8 Le5/d0$t2; Ldagger/internal/j; z0
|
||||
|
||||
invoke-interface {v0}, Lql0/a;->get()Ljava/lang/Object; # resolve
|
||||
invoke-interface {v0}, Lol0/a;->get()Ljava/lang/Object; # resolve MARKER: R8 Lol0/a;
|
||||
|
||||
move-result-object v0 # playqueue
|
||||
|
||||
check-cast v0, Lcom/aspiro/wamp/playqueue/d1; # narrow type
|
||||
check-cast v0, Lcom/aspiro/wamp/playqueue/v0; # narrow type MARKER: R8 Lcom/aspiro/wamp/playqueue/v0;
|
||||
|
||||
new-instance v1, Lgh/j; # build vm
|
||||
new-instance v1, Leh/j; # build vm MARKER: R8 Leh/j;
|
||||
|
||||
invoke-direct {v1, v0}, Lgh/j;-><init>(Lcom/aspiro/wamp/playqueue/d1;)V # ctor
|
||||
invoke-direct {v1, v0}, Leh/j;-><init>(Lcom/aspiro/wamp/playqueue/v0;)V # ctor MARKER: R8 Leh/j; Lcom/aspiro/wamp/playqueue/v0;
|
||||
|
||||
sput-object v1, Lradiant/MiniSeekerLine;->vm:Lgh/j; # cache
|
||||
sput-object v1, Lradiant/MiniSeekerLine;->vm:Leh/j; # cache MARKER: R8 Leh/j;
|
||||
|
||||
:got_vm
|
||||
sget-object v0, Lradiant/MiniSeekerLine;->vm:Lgh/j; # vm ref
|
||||
sget-object v0, Lradiant/MiniSeekerLine;->vm:Leh/j; # vm ref MARKER: R8 Leh/j;
|
||||
|
||||
invoke-virtual {v0}, Lgh/j;->a()V # activate emission
|
||||
invoke-virtual {v0}, Leh/j;->a()V # activate emission MARKER: R8 Leh/j; a
|
||||
|
||||
iget-object v0, v0, Lgh/j;->d:Lio/reactivex/subjects/BehaviorSubject; # position subject
|
||||
iget-object v0, v0, Leh/j;->d:Lio/reactivex/subjects/BehaviorSubject; # position subject MARKER: R8 Leh/j; d
|
||||
|
||||
invoke-static {}, Lio/reactivex/android/schedulers/AndroidSchedulers;->mainThread()Lio/reactivex/Scheduler; # main scheduler
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
.class public final Lradiant/NoOp;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Lam0/a;
|
||||
.implements Lyl0/a; # MARKER: R8 Lyl0/a;
|
||||
|
||||
|
||||
# static fields
|
||||
@@ -33,7 +33,7 @@
|
||||
.method public final invoke()Ljava/lang/Object;
|
||||
.locals 1
|
||||
|
||||
sget-object v0, Lkotlin/u;->a:Lkotlin/u;
|
||||
sget-object v0, Lkotlin/u;->a:Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
@@ -0,0 +1,56 @@
|
||||
.class Lradiant/PebbleBridge$1;
|
||||
.super Ljava/lang/Object;
|
||||
|
||||
# interfaces
|
||||
.implements Ljava/lang/Runnable;
|
||||
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingMethod;
|
||||
value = Lradiant/PebbleBridge;->onPosition(J)V
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
accessFlags = 0x0
|
||||
name = null
|
||||
.end annotation
|
||||
|
||||
|
||||
# instance fields
|
||||
.field final synthetic val$at:J
|
||||
|
||||
.field final synthetic val$position:J
|
||||
|
||||
|
||||
# direct methods
|
||||
.method constructor <init>(JJ)V
|
||||
.registers 5
|
||||
.annotation system Ldalvik/annotation/Signature;
|
||||
value = {
|
||||
"()V"
|
||||
}
|
||||
.end annotation
|
||||
|
||||
iput-wide p1, p0, Lradiant/PebbleBridge$1;->val$position:J
|
||||
|
||||
iput-wide p3, p0, Lradiant/PebbleBridge$1;->val$at:J
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public run()V
|
||||
.registers 5
|
||||
|
||||
iget-wide v0, p0, Lradiant/PebbleBridge$1;->val$position:J
|
||||
|
||||
iget-wide v2, p0, Lradiant/PebbleBridge$1;->val$at:J
|
||||
|
||||
# invokes: Lradiant/PebbleBridge;->onSample(JJ)V
|
||||
invoke-static {v0, v1, v2, v3}, Lradiant/PebbleBridge;->access$000(JJ)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -0,0 +1,50 @@
|
||||
.class Lradiant/PebbleBridge$2;
|
||||
.super Ljava/lang/Object;
|
||||
|
||||
# interfaces
|
||||
.implements Ljava/lang/Runnable;
|
||||
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingMethod;
|
||||
value = Lradiant/PebbleBridge;->onLyrics(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
accessFlags = 0x0
|
||||
name = null
|
||||
.end annotation
|
||||
|
||||
|
||||
# direct methods
|
||||
.method constructor <init>()V
|
||||
.registers 1
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public run()V
|
||||
.registers 2
|
||||
|
||||
# getter for: Lradiant/PebbleBridge;->instance:Lradiant/PebbleBridge;
|
||||
invoke-static {}, Lradiant/PebbleBridge;->access$100()Lradiant/PebbleBridge;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
if-eqz v0, :cond_d
|
||||
|
||||
# getter for: Lradiant/PebbleBridge;->instance:Lradiant/PebbleBridge;
|
||||
invoke-static {}, Lradiant/PebbleBridge;->access$100()Lradiant/PebbleBridge;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
# invokes: Lradiant/PebbleBridge;->sendLyrics()V
|
||||
invoke-static {v0}, Lradiant/PebbleBridge;->access$200(Lradiant/PebbleBridge;)V
|
||||
|
||||
:cond_d
|
||||
return-void
|
||||
.end method
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,43 @@
|
||||
.class public final Lradiant/PlayerAction;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Lyl0/a; # MARKER: R8 Lyl0/a;
|
||||
|
||||
# Click lambda that sends a player action
|
||||
|
||||
|
||||
# instance fields
|
||||
.field public final a:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
.field public final b:Ljava/lang/Object;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>(Ljava/lang/Object;Ljava/lang/Object;)V
|
||||
.locals 0
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
check-cast p1, Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
iput-object p1, p0, Lradiant/PlayerAction;->a:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
iput-object p2, p0, Lradiant/PlayerAction;->b:Ljava/lang/Object;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public final invoke()Ljava/lang/Object;
|
||||
.locals 2
|
||||
|
||||
iget-object v0, p0, Lradiant/PlayerAction;->a:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
iget-object v1, p0, Lradiant/PlayerAction;->b:Ljava/lang/Object;
|
||||
|
||||
invoke-interface {v0, v1}, Lyl0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; # MARKER: R8 Lyl0/l;
|
||||
|
||||
sget-object v0, Lkotlin/u;->a:Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
@@ -85,15 +85,15 @@
|
||||
return-object p0
|
||||
.end method
|
||||
|
||||
.method public static style(ILq20/c2;)Lq20/c2;
|
||||
.method public static style(ILw10/c2;)Lw10/c2; # MARKER: R8 Lw10/c2;
|
||||
.registers 16
|
||||
|
||||
invoke-static {p0}, Lradiant/QualityBadge;->textArgb(I)I
|
||||
|
||||
move-result v0
|
||||
new-instance v1, Lf20/a;
|
||||
invoke-direct {v1, v0}, Lf20/a;-><init>(I)V
|
||||
new-instance v0, Lf20/d;
|
||||
new-instance v1, Ll10/a; # MARKER: R8 Ll10/a;
|
||||
invoke-direct {v1, v0}, Ll10/a;-><init>(I)V # MARKER: R8 Ll10/a;
|
||||
new-instance v0, Ll10/d; # MARKER: R8 Ll10/d;
|
||||
const/4 v2, 0x0
|
||||
const/4 v3, 0x0
|
||||
const/4 v4, 0x0
|
||||
@@ -107,7 +107,7 @@
|
||||
const/4 v12, 0x0
|
||||
const/16 v13, 0xffe
|
||||
const/4 v14, 0x0
|
||||
invoke-direct/range {v0 .. v14}, Lf20/d;-><init>(Lf20/a;Lf20/a;Lf20/a;Lf20/a;Lf20/a;Lf20/a;Lf20/a;Lf20/a;Lf20/a;Lf20/a;Lf20/a;Lf20/a;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
invoke-direct/range {v0 .. v14}, Ll10/d;-><init>(Ll10/a;Ll10/a;Ll10/a;Ll10/a;Ll10/a;Ll10/a;Ll10/a;Ll10/a;Ll10/a;Ll10/a;Ll10/a;Ll10/a;ILkotlin/jvm/internal/DefaultConstructorMarker;)V # MARKER: R8 Ll10/d; Ll10/a;
|
||||
|
||||
move-object v9, v0
|
||||
move-object/from16 v0, p1
|
||||
@@ -118,7 +118,7 @@
|
||||
const/4 v5, 0x0
|
||||
const/16 v6, 0x1d
|
||||
const/4 v7, 0x0
|
||||
invoke-static/range {v0 .. v7}, Lq20/c2;->g(Lq20/c2;Lq20/s4;Lf20/d;Lcom/squareup/ui/market/core/text/MarketTextAlignment;Lcom/squareup/ui/market/core/text/MarketTextTransform;Lq20/r4;ILjava/lang/Object;)Lq20/c2;
|
||||
invoke-static/range {v0 .. v7}, Lw10/c2;->g(Lw10/c2;Lw10/s4;Ll10/d;Lcom/squareup/ui/market/core/text/MarketTextAlignment;Lcom/squareup/ui/market/core/text/MarketTextTransform;Lw10/r4;ILjava/lang/Object;)Lw10/c2; # MARKER: R8 Lw10/c2; Lw10/s4; Ll10/d; Lw10/r4; g
|
||||
move-result-object p0
|
||||
return-object p0
|
||||
.end method
|
||||
@@ -223,7 +223,7 @@
|
||||
return-void
|
||||
|
||||
:rl_new_track
|
||||
iget-object v5, p0, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->P:Lkotlinx/coroutines/flow/MutableStateFlow;
|
||||
iget-object v5, p0, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->S:Lkotlinx/coroutines/flow/MutableStateFlow; # MARKER: R8 P
|
||||
|
||||
invoke-interface {v5}, Lkotlinx/coroutines/flow/MutableStateFlow;->getValue()Ljava/lang/Object;
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
|
||||
if-eq p0, v6, :store_keep_open
|
||||
|
||||
iget-object v7, v6, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->P:Lkotlinx/coroutines/flow/MutableStateFlow;
|
||||
iget-object v7, v6, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->S:Lkotlinx/coroutines/flow/MutableStateFlow; # MARKER: R8 P
|
||||
|
||||
invoke-interface {v7}, Lkotlinx/coroutines/flow/MutableStateFlow;->getValue()Ljava/lang/Object;
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
|
||||
iget-object v1, p0, Lradiant/RLAPILyricsWorker;->vm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
|
||||
|
||||
iget-object v2, v1, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->P:Lkotlinx/coroutines/flow/MutableStateFlow;
|
||||
iget-object v2, v1, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->S:Lkotlinx/coroutines/flow/MutableStateFlow; # MARKER: R8 P
|
||||
|
||||
sget-object v3, Ljava/lang/Boolean;->FALSE:Ljava/lang/Boolean;
|
||||
|
||||
@@ -82,15 +82,15 @@
|
||||
|
||||
if-ne v0, v1, :not_current
|
||||
|
||||
iget-object v1, v0, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->a:Lbi/e;
|
||||
iget-object v1, v0, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->a:Lzh/e; # MARKER: R8 Lzh/e; a
|
||||
|
||||
invoke-interface {v1}, Lbi/e;->getCurrentItem()Lcom/aspiro/wamp/playqueue/u0;
|
||||
invoke-interface {v1}, Lzh/e;->getCurrentItem()Lcom/aspiro/wamp/playqueue/q0; # MARKER: R8 Lzh/e; Lcom/aspiro/wamp/playqueue/q0;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
if-eqz v1, :not_current
|
||||
|
||||
invoke-interface {v1}, Lcom/aspiro/wamp/playqueue/u0;->getMediaItem()Lcom/aspiro/wamp/model/MediaItem;
|
||||
invoke-interface {v1}, Lcom/aspiro/wamp/playqueue/q0;->getMediaItem()Lcom/aspiro/wamp/model/MediaItem; # MARKER: R8 Lcom/aspiro/wamp/playqueue/q0;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
@@ -375,7 +375,7 @@
|
||||
.end method
|
||||
|
||||
.method public static parseLines(Ljava/lang/String;)Ljava/util/ArrayList;
|
||||
.locals 11
|
||||
.locals 13
|
||||
|
||||
:try_start
|
||||
new-instance v0, Lorg/json/JSONObject;
|
||||
@@ -466,9 +466,49 @@
|
||||
|
||||
double-to-long v7, v7
|
||||
|
||||
new-instance v4, Lcom/tidal/android/feature/playerscreen/ui/f;
|
||||
# Prefer the first syllable time
|
||||
const-string v6, "syllabus"
|
||||
|
||||
invoke-direct {v4, v5, v7, v8}, Lcom/tidal/android/feature/playerscreen/ui/f;-><init>(Ljava/lang/String;J)V
|
||||
invoke-virtual {v4, v6}, Lorg/json/JSONObject;->optJSONArray(Ljava/lang/String;)Lorg/json/JSONArray;
|
||||
|
||||
move-result-object v6
|
||||
|
||||
if-eqz v6, :no_syl
|
||||
|
||||
invoke-virtual {v6}, Lorg/json/JSONArray;->length()I
|
||||
|
||||
move-result v9
|
||||
|
||||
if-eqz v9, :no_syl
|
||||
|
||||
const/4 v9, 0x0
|
||||
|
||||
invoke-virtual {v6, v9}, Lorg/json/JSONArray;->optJSONObject(I)Lorg/json/JSONObject;
|
||||
|
||||
move-result-object v6
|
||||
|
||||
if-eqz v6, :no_syl
|
||||
|
||||
const-string v9, "time"
|
||||
|
||||
const-wide/16 v11, -0x1
|
||||
|
||||
invoke-virtual {v6, v9, v11, v12}, Lorg/json/JSONObject;->optLong(Ljava/lang/String;J)J
|
||||
|
||||
move-result-wide v11
|
||||
|
||||
const-wide/16 v9, 0x0
|
||||
|
||||
cmp-long v6, v11, v9
|
||||
|
||||
if-ltz v6, :no_syl
|
||||
|
||||
move-wide v7, v11
|
||||
|
||||
:no_syl
|
||||
new-instance v4, Lcom/tidal/android/feature/playerscreen/ui/f; # MARKER: R8 Lcom/tidal/android/feature/playerscreen/ui/f;
|
||||
|
||||
invoke-direct {v4, v5, v7, v8}, Lcom/tidal/android/feature/playerscreen/ui/f;-><init>(Ljava/lang/String;J)V # MARKER: R8 Lcom/tidal/android/feature/playerscreen/ui/f;
|
||||
|
||||
invoke-virtual {v2, v4}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
|
||||
|
||||
@@ -815,9 +855,9 @@
|
||||
|
||||
iget-object v4, p0, Lradiant/RLAPILyricsWorker;->vm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
|
||||
|
||||
iget-object v5, v4, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->O:Lkotlinx/coroutines/flow/MutableStateFlow;
|
||||
iget-object v5, v4, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->R:Lkotlinx/coroutines/flow/MutableStateFlow; # MARKER: R8 O
|
||||
|
||||
invoke-static {v3}, Lvn0/a;->c(Ljava/lang/Iterable;)Lvn0/b;
|
||||
invoke-static {v3}, Ltn0/a;->c(Ljava/lang/Iterable;)Ltn0/b; # MARKER: R8 Ltn0/a; Ltn0/b; c
|
||||
|
||||
move-result-object v6
|
||||
|
||||
@@ -828,13 +868,13 @@
|
||||
const-string v7, ""
|
||||
|
||||
:have_id
|
||||
new-instance v8, Lcom/tidal/android/feature/playerscreen/ui/g$c;
|
||||
new-instance v8, Lcom/tidal/android/feature/playerscreen/ui/g$c; # MARKER: R8 Lcom/tidal/android/feature/playerscreen/ui/g$c;
|
||||
|
||||
const/4 v9, -0x1
|
||||
|
||||
const/4 v10, 0x0
|
||||
|
||||
invoke-direct {v8, v7, v6, v9, v10}, Lcom/tidal/android/feature/playerscreen/ui/g$c;-><init>(Ljava/lang/String;Lvn0/b;IZ)V
|
||||
invoke-direct {v8, v7, v6, v9, v10}, Lcom/tidal/android/feature/playerscreen/ui/g$c;-><init>(Ljava/lang/String;Ltn0/b;IZ)V # MARKER: R8 Lcom/tidal/android/feature/playerscreen/ui/g$c; Ltn0/b;
|
||||
|
||||
const-string v6, "publishing g$c -> K=true (O=true if sticky) N=g$c"
|
||||
|
||||
@@ -846,7 +886,7 @@
|
||||
|
||||
sput-boolean v6, Lradiant/RLAPILyricsHook;->isRlState:Z
|
||||
|
||||
iget-object v6, v4, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->K:Lkotlinx/coroutines/flow/MutableStateFlow;
|
||||
iget-object v6, v4, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->N:Lkotlinx/coroutines/flow/MutableStateFlow; # MARKER: R8 K
|
||||
|
||||
sget-object v7, Ljava/lang/Boolean;->TRUE:Ljava/lang/Boolean;
|
||||
|
||||
@@ -862,7 +902,7 @@
|
||||
|
||||
:open_lyrics
|
||||
|
||||
iget-object v6, v4, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->P:Lkotlinx/coroutines/flow/MutableStateFlow;
|
||||
iget-object v6, v4, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->S:Lkotlinx/coroutines/flow/MutableStateFlow; # MARKER: R8 P
|
||||
|
||||
invoke-interface {v6, v7}, Lkotlinx/coroutines/flow/MutableStateFlow;->setValue(Ljava/lang/Object;)V
|
||||
|
||||
@@ -881,17 +921,23 @@
|
||||
.method public run()V
|
||||
.locals 2
|
||||
|
||||
invoke-static {p0}, Lradiant/SparkleIcons;->rlBegin(Ljava/lang/Object;)V # Spinner while fetching
|
||||
|
||||
:try_start
|
||||
invoke-direct {p0}, Lradiant/RLAPILyricsWorker;->runImpl()V
|
||||
|
||||
:try_end
|
||||
.catchall {:try_start .. :try_end} :catch_all
|
||||
|
||||
invoke-static {p0}, Lradiant/SparkleIcons;->rlEnd(Ljava/lang/Object;)V
|
||||
|
||||
return-void
|
||||
|
||||
:catch_all
|
||||
move-exception v0
|
||||
|
||||
invoke-static {p0}, Lradiant/SparkleIcons;->rlEnd(Ljava/lang/Object;)V
|
||||
|
||||
invoke-virtual {v0}, Ljava/lang/Throwable;->toString()Ljava/lang/String;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
.class public final Lradiant/RoundOutline;
|
||||
.super Landroid/view/ViewOutlineProvider;
|
||||
|
||||
|
||||
# instance fields
|
||||
.field private final radius:F
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>(F)V
|
||||
.registers 2
|
||||
|
||||
invoke-direct {p0}, Landroid/view/ViewOutlineProvider;-><init>()V
|
||||
|
||||
iput p1, p0, Lradiant/RoundOutline;->radius:F
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public getOutline(Landroid/view/View;Landroid/graphics/Outline;)V
|
||||
.registers 9
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/View;->getWidth()I
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/View;->getHeight()I
|
||||
|
||||
move-result v4
|
||||
|
||||
iget v5, p0, Lradiant/RoundOutline;->radius:F
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
const/4 v2, 0x0
|
||||
|
||||
move-object v0, p2
|
||||
|
||||
invoke-virtual/range {v0 .. v5}, Landroid/graphics/Outline;->setRoundRect(IIIIF)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -20,13 +20,13 @@
|
||||
|
||||
if-eqz p1, :ret # null guard
|
||||
|
||||
instance-of v0, p1, Lgh/b; # type guard
|
||||
instance-of v0, p1, Leh/b; # type guard MARKER: R8 Leh/b;
|
||||
|
||||
if-eqz v0, :ret # skip if wrong type
|
||||
|
||||
check-cast p1, Lgh/b; # narrow type
|
||||
check-cast p1, Leh/b; # narrow type MARKER: R8 Leh/b;
|
||||
|
||||
iget v0, p1, Lgh/b;->b:F # raw progress
|
||||
iget v0, p1, Leh/b;->b:F # raw progress MARKER: R8 Leh/b; b
|
||||
|
||||
invoke-static {v0}, Ljava/lang/Float;->isNaN(F)Z # nan check
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public static final a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lam0/a;)V
|
||||
.method public static final a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lyl0/a;)V # MARKER: R8 Lyl0/a;
|
||||
.locals 21
|
||||
.annotation build Landroidx/compose/runtime/Composable;
|
||||
.end annotation
|
||||
@@ -94,11 +94,11 @@
|
||||
invoke-static {v2, v3, v4, v5}, Landroidx/compose/runtime/ComposerKt;->traceEventStart(IIILjava/lang/String;)V
|
||||
|
||||
:cond_3
|
||||
sget-object v2, Lcom/squareup/ui/market/core/theme/k;->e:Lcom/squareup/ui/market/core/theme/k$a;
|
||||
sget-object v2, Lcom/squareup/ui/market/core/theme/k;->e:Lcom/squareup/ui/market/core/theme/k$a; # MARKER: R8 Lcom/squareup/ui/market/core/theme/k; Lcom/squareup/ui/market/core/theme/k$a; e
|
||||
|
||||
const/4 v4, 0x6
|
||||
|
||||
invoke-static {v2, v11, v4}, Lcom/squareup/ui/market/core/theme/z;->t(Lcom/squareup/ui/market/core/theme/k$a;Landroidx/compose/runtime/Composer;I)Lcom/squareup/ui/market/core/theme/MarketStylesheet;
|
||||
invoke-static {v2, v11, v4}, Lcom/squareup/ui/market/core/theme/d0;->t(Lcom/squareup/ui/market/core/theme/k$a;Landroidx/compose/runtime/Composer;I)Lcom/squareup/ui/market/core/theme/MarketStylesheet; # MARKER: R8 Lcom/squareup/ui/market/core/theme/d0; Lcom/squareup/ui/market/core/theme/k$a; t
|
||||
|
||||
move-result-object v15
|
||||
|
||||
@@ -131,7 +131,7 @@
|
||||
|
||||
const/16 v18, 0x0
|
||||
|
||||
invoke-static/range {v15 .. v20}, Lcom/squareup/ui/market/components/MarketIconButtonKt;->P(Lcom/squareup/ui/market/core/theme/MarketStylesheet;Lcom/squareup/ui/market/core/components/properties/IconButton$Size;Lcom/squareup/ui/market/core/components/properties/IconButton$Rank;Lcom/squareup/ui/market/core/components/properties/IconButton$Variant;ILjava/lang/Object;)Lq20/u1;
|
||||
invoke-static/range {v15 .. v20}, Lcom/squareup/ui/market/components/MarketIconButtonKt;->P(Lcom/squareup/ui/market/core/theme/MarketStylesheet;Lcom/squareup/ui/market/core/components/properties/IconButton$Size;Lcom/squareup/ui/market/core/components/properties/IconButton$Rank;Lcom/squareup/ui/market/core/components/properties/IconButton$Variant;ILjava/lang/Object;)Lw10/u1; # MARKER: R8 Lw10/u1; P
|
||||
|
||||
move-result-object v4
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
:cond_5
|
||||
move-object v9, v4
|
||||
|
||||
check-cast v9, Lq20/u1;
|
||||
check-cast v9, Lw10/u1; # MARKER: R8 Lw10/u1;
|
||||
|
||||
sget v2, Lcom/tidal/android/feature/playerscreen/ui/R$string;->lyrics:I
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
|
||||
move v4, v3
|
||||
|
||||
invoke-static {v14}, Lcom/tidal/android/feature/playerscreen/ui/composables/anim/BouncePressKt;->a(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
|
||||
invoke-static {v14}, Lcom/tidal/android/feature/playerscreen/ui/composables/anim/BouncePressKt;->a(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # MARKER: R8 a
|
||||
|
||||
move-result-object v3
|
||||
|
||||
@@ -160,19 +160,32 @@
|
||||
|
||||
and-int/lit8 v12, v4, 0xe
|
||||
|
||||
const/16 v13, 0xf8
|
||||
const/16 v13, 0xe8 # Pass enabled ourselves
|
||||
|
||||
const/4 v4, 0x0
|
||||
|
||||
sget v5, Lradiant/SparkleIcons;->currentMode:I # Sparkle mode from PlayerScreen
|
||||
|
||||
iput v5, v10, Lradiant/SparkleContent;->m:I
|
||||
|
||||
if-nez v5, :rl_disabled # Grey out while loading or no lyrics
|
||||
|
||||
const/4 v5, 0x1 # enabled
|
||||
|
||||
goto :rl_enabled_set
|
||||
|
||||
:rl_disabled
|
||||
const/4 v5, 0x0
|
||||
|
||||
:rl_enabled_set
|
||||
|
||||
const/4 v6, 0x0
|
||||
|
||||
const/4 v7, 0x0
|
||||
|
||||
const/4 v8, 0x0
|
||||
|
||||
invoke-static/range {v1 .. v13}, Lcom/squareup/ui/market/components/MarketIconButtonKt;->b(Lam0/a;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLcom/squareup/ui/market/components/n;Lam0/a;Ljava/lang/String;Lq20/u1;Lam0/p;Landroidx/compose/runtime/Composer;II)V
|
||||
invoke-static/range {v1 .. v13}, Lcom/squareup/ui/market/components/MarketIconButtonKt;->c(Lyl0/a;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLcom/squareup/ui/market/components/n;Lyl0/a;Ljava/lang/String;Lw10/u1;Lyl0/p;Landroidx/compose/runtime/Composer;II)V # MARKER: R8 Lyl0/a; Lcom/squareup/ui/market/components/n; Lw10/u1; Lyl0/p; b
|
||||
|
||||
invoke-static {}, Landroidx/compose/runtime/ComposerKt;->isTraceInProgress()Z
|
||||
|
||||
|
||||
@@ -3,7 +3,11 @@
|
||||
.source "SourceFile"
|
||||
|
||||
# interfaces
|
||||
.implements Lam0/p;
|
||||
.implements Lyl0/p; # MARKER: R8 Lyl0/p;
|
||||
|
||||
|
||||
# instance fields
|
||||
.field public m:I # Sparkle mode
|
||||
|
||||
|
||||
# virtual methods
|
||||
@@ -35,7 +39,7 @@
|
||||
invoke-static {v0, p2, v1, v2}, Landroidx/compose/runtime/ComposerKt;->traceEventStart(IIILjava/lang/String;)V
|
||||
|
||||
:cond_0
|
||||
const p2, 0x7f080522
|
||||
sget p2, Lcom/aspiro/wamp/R$drawable;->ic_sparkle:I # By name, ids change every build
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
@@ -52,6 +56,12 @@
|
||||
invoke-static {}, Landroidx/compose/runtime/ComposerKt;->traceEventEnd()V
|
||||
|
||||
:cond_1
|
||||
iget v0, p0, Lradiant/SparkleContent;->m:I
|
||||
|
||||
invoke-static {p2, v0, p1}, Lradiant/SparkleIcons;->forMode(Landroidx/compose/ui/graphics/painter/Painter;ILandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/painter/Painter;
|
||||
|
||||
move-result-object p2
|
||||
|
||||
invoke-interface {p1}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V
|
||||
|
||||
return-object p2
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1,6 +1,6 @@
|
||||
.class public final Lradiant/SpvFactory;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Lam0/l;
|
||||
.implements Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
|
||||
# static fields
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
.super Ljava/lang/Object;
|
||||
|
||||
# interfaces
|
||||
.implements Lam0/l;
|
||||
.implements Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
# Remembers where each line's glyphs landed
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
|
||||
# One reusable callback per line
|
||||
.method public static cb(I)Lam0/l;
|
||||
.method public static cb(I)Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
.locals 5
|
||||
|
||||
if-gez p0, :have_idx
|
||||
@@ -258,7 +258,7 @@
|
||||
aput-object p1, v1, v0
|
||||
|
||||
:ret
|
||||
sget-object v0, Lkotlin/u;->a:Lkotlin/u;
|
||||
sget-object v0, Lkotlin/u;->a:Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
@@ -1,521 +0,0 @@
|
||||
.class public final Lradiant/gestures/MiniPlayerGestures$Gesture;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Lam0/l;
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
||||
value = Lradiant/gestures/MiniPlayerGestures;
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
accessFlags = 0x19
|
||||
name = "Gesture"
|
||||
.end annotation
|
||||
|
||||
|
||||
# instance fields
|
||||
.field public final a:Lam0/l;
|
||||
|
||||
# Y at ACTION_DOWN
|
||||
.field public b:F
|
||||
|
||||
# Last Y seen (on this pointer stream)
|
||||
.field public c:F
|
||||
|
||||
# True while this listener owns an active pointer stream
|
||||
.field public d:Z
|
||||
|
||||
# True when sheet drag has started
|
||||
.field public e:Z
|
||||
|
||||
.field public final f:Landroidx/compose/material3/SheetState;
|
||||
|
||||
.field public g:F
|
||||
|
||||
# X at ACTION_DOWN
|
||||
.field public i:F
|
||||
|
||||
# True once horizontal movement wins (prevents later vertical start)
|
||||
.field public j:Z
|
||||
|
||||
# Drag option enabled
|
||||
.field public final k:Z
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>(Lam0/l;Landroidx/compose/material3/SheetState;Z)V
|
||||
.locals 0
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->a:Lam0/l;
|
||||
|
||||
iput-object p2, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
|
||||
|
||||
iput-boolean p3, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->k:Z
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private static dp(F)F
|
||||
.locals 1
|
||||
|
||||
invoke-static {}, Landroid/content/res/Resources;->getSystem()Landroid/content/res/Resources;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
invoke-virtual {v0}, Landroid/content/res/Resources;->getDisplayMetrics()Landroid/util/DisplayMetrics;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
iget v0, v0, Landroid/util/DisplayMetrics;->density:F
|
||||
|
||||
mul-float/2addr p0, v0
|
||||
|
||||
return p0
|
||||
.end method
|
||||
|
||||
.method private dragSheet(FJ)V
|
||||
.locals 1
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
|
||||
|
||||
invoke-static {v0, p1, p2, p3}, Lradiant/gestures/MiniPlayerGestures;->updateDragTimed(Landroidx/compose/material3/SheetState;FJ)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private finishSheet(F)V
|
||||
.locals 2
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
|
||||
|
||||
iget-object v1, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->a:Lam0/l;
|
||||
|
||||
invoke-static {v0, v1, p1}, Lradiant/gestures/MiniPlayerGestures;->finishDrag(Landroidx/compose/material3/SheetState;Lam0/l;F)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private openPlayer()V
|
||||
.locals 2
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->a:Lam0/l;
|
||||
|
||||
sget-object v1, Lcom/tidal/android/feature/appscaffold/ui/b$b;->a:Lcom/tidal/android/feature/appscaffold/ui/b$b;
|
||||
|
||||
invoke-interface {v0, v1}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private reset()V
|
||||
.locals 1
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->d:Z
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->e:Z
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->j:Z
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
iput v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->i:F
|
||||
|
||||
iput v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->g:F
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private startSheet(FJ)V
|
||||
.locals 2
|
||||
|
||||
# empty player guard
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->hasMiniPlayerMedia()Z
|
||||
|
||||
move-result v0
|
||||
|
||||
if-nez v0, :start_guard
|
||||
|
||||
return-void
|
||||
|
||||
:start_guard
|
||||
|
||||
# avoid starting twice
|
||||
iget-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->e:Z
|
||||
|
||||
if-eqz v0, :start
|
||||
|
||||
return-void
|
||||
|
||||
:start
|
||||
const/4 v0, 0x1
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->e:Z
|
||||
|
||||
iget-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->k:Z
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
iget-object v1, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
|
||||
|
||||
iget v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->b:F
|
||||
|
||||
invoke-static {v1, p1, v0, p2, p3}, Lradiant/gestures/MiniPlayerGestures;->beginDrag(Landroidx/compose/material3/SheetState;FFJ)V
|
||||
|
||||
invoke-direct {p0}, Lradiant/gestures/MiniPlayerGestures$Gesture;->openPlayer()V
|
||||
|
||||
:done
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
# Listens for MotionEvents
|
||||
.method public final invoke(Landroid/view/MotionEvent;)Lkotlin/u;
|
||||
.locals 11
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getActionMasked()I
|
||||
|
||||
move-result v0
|
||||
|
||||
if-eqz v0, :down
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
if-eq v0, v1, :up
|
||||
|
||||
const/4 v1, 0x2
|
||||
|
||||
if-eq v0, v1, :move
|
||||
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-eq v0, v1, :cancel
|
||||
|
||||
goto :done
|
||||
|
||||
# ACTION_DOWN
|
||||
:down
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->resetGestureLock()V
|
||||
|
||||
invoke-static {p1}, Lradiant/gestures/MiniPlayerGestures;->beginMotion(Landroid/view/MotionEvent;)V
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v0
|
||||
|
||||
iput v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->b:F
|
||||
|
||||
iput v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->c:F
|
||||
|
||||
const/4 v0, 0x1
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->d:Z
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->e:Z
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
iput v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->g:F
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawX()F
|
||||
|
||||
move-result v0
|
||||
|
||||
iput v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->i:F
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->j:Z
|
||||
|
||||
iget v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->b:F
|
||||
|
||||
invoke-static {v0}, Lradiant/gestures/MiniPlayerGestures;->beginSwipeGesture(F)V
|
||||
|
||||
:skip_feedback_down
|
||||
|
||||
goto :done
|
||||
|
||||
# ACTION_MOVE
|
||||
:move
|
||||
iget-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->d:Z
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
invoke-static {p1}, Lradiant/gestures/MiniPlayerGestures;->trackMotion(Landroid/view/MotionEvent;)V
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v0
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getEventTime()J
|
||||
|
||||
move-result-wide v5
|
||||
|
||||
iget v1, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->c:F
|
||||
|
||||
sub-float v1, v0, v1
|
||||
|
||||
iput v1, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->g:F
|
||||
|
||||
iget v2, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->b:F
|
||||
|
||||
sub-float v2, v0, v2
|
||||
|
||||
iget-boolean v3, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->e:Z
|
||||
|
||||
if-eqz v3, :maybe_start
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->suppressHorizontalGestures()V
|
||||
|
||||
iget-boolean v3, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->k:Z
|
||||
|
||||
if-eqz v3, :feedback_active
|
||||
|
||||
invoke-direct {p0, v2, v5, v6}, Lradiant/gestures/MiniPlayerGestures$Gesture;->dragSheet(FJ)V
|
||||
|
||||
:feedback_active
|
||||
invoke-static {v2}, Lradiant/gestures/MiniPlayerGestures;->setSwipeFeedbackFromDrag(F)V
|
||||
|
||||
goto :store_last
|
||||
|
||||
:maybe_start
|
||||
iget-boolean v3, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->j:Z
|
||||
|
||||
if-eqz v3, :axis_check
|
||||
|
||||
goto :store_last
|
||||
|
||||
:axis_check
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawX()F
|
||||
|
||||
move-result v7
|
||||
|
||||
iget v8, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->i:F
|
||||
|
||||
sub-float/2addr v7, v8
|
||||
|
||||
invoke-static {v7}, Ljava/lang/Math;->abs(F)F
|
||||
|
||||
move-result v7
|
||||
|
||||
invoke-static {v2}, Ljava/lang/Math;->abs(F)F
|
||||
|
||||
move-result v8
|
||||
|
||||
const/high16 v9, 0x40c00000 # 6.0f axis deadzone
|
||||
|
||||
invoke-static {v9}, Lradiant/gestures/MiniPlayerGestures$Gesture;->dp(F)F
|
||||
|
||||
move-result v9
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->isHorizontalGestureLocked()Z
|
||||
|
||||
move-result v10
|
||||
|
||||
if-eqz v10, :horizontal_check
|
||||
|
||||
const/4 v10, 0x0
|
||||
|
||||
invoke-static {v10}, Lradiant/gestures/MiniPlayerGestures;->setSwipeFeedbackDirect(F)V
|
||||
|
||||
goto :store_last
|
||||
|
||||
:horizontal_check
|
||||
|
||||
cmpg-float v10, v7, v9
|
||||
|
||||
if-gez v10, :horizontal_dominance
|
||||
|
||||
goto :vertical_check
|
||||
|
||||
:horizontal_dominance
|
||||
|
||||
const v10, 0x3f8ccccd # 1.1f
|
||||
|
||||
mul-float/2addr v10, v8
|
||||
|
||||
cmpg-float v10, v7, v10
|
||||
|
||||
if-gez v10, :horizontal_wins
|
||||
|
||||
goto :vertical_check
|
||||
|
||||
:horizontal_wins
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->lockHorizontalGesture()Z
|
||||
|
||||
move-result v10
|
||||
|
||||
if-eqz v10, :store_last
|
||||
|
||||
const/4 v10, 0x1
|
||||
|
||||
iput-boolean v10, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->j:Z
|
||||
|
||||
const/4 v10, 0x0
|
||||
|
||||
invoke-static {v10}, Lradiant/gestures/MiniPlayerGestures;->setSwipeFeedbackDirect(F)V
|
||||
|
||||
goto :store_last
|
||||
|
||||
# At least 16dp up to open the player
|
||||
:vertical_check
|
||||
neg-float v9, v9
|
||||
|
||||
cmpg-float v10, v2, v9
|
||||
|
||||
if-lez v10, :vertical_dominance
|
||||
|
||||
invoke-static {v2}, Lradiant/gestures/MiniPlayerGestures;->setSwipeFeedbackFromDrag(F)V
|
||||
|
||||
goto :store_last
|
||||
|
||||
:vertical_dominance
|
||||
const v10, 0x3f8ccccd # 1.1f -> early vertical axis lock
|
||||
|
||||
mul-float/2addr v7, v10
|
||||
|
||||
cmpl-float v10, v8, v7
|
||||
|
||||
if-gtz v10, :begin
|
||||
|
||||
goto :store_last
|
||||
|
||||
:begin
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->lockVerticalGesture()Z
|
||||
|
||||
move-result v10
|
||||
|
||||
if-eqz v10, :store_last
|
||||
|
||||
invoke-direct {p0, v2, v5, v6}, Lradiant/gestures/MiniPlayerGestures$Gesture;->startSheet(FJ)V
|
||||
|
||||
iget-boolean v10, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->e:Z
|
||||
|
||||
if-eqz v10, :store_last
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->suppressHorizontalGestures()V
|
||||
|
||||
iget-boolean v10, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->k:Z
|
||||
|
||||
if-eqz v10, :feedback_begin
|
||||
|
||||
invoke-direct {p0, v2, v5, v6}, Lradiant/gestures/MiniPlayerGestures$Gesture;->dragSheet(FJ)V
|
||||
|
||||
:feedback_begin
|
||||
invoke-static {v2}, Lradiant/gestures/MiniPlayerGestures;->setSwipeFeedbackFromDrag(F)V
|
||||
|
||||
|
||||
:store_last
|
||||
iput v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->c:F
|
||||
|
||||
goto :done
|
||||
|
||||
# ACTION_UP
|
||||
:up
|
||||
iget-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->d:Z
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
iget-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->e:Z
|
||||
|
||||
if-eqz v0, :up_no_drag
|
||||
|
||||
iget-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->k:Z
|
||||
|
||||
if-eqz v0, :open_simple
|
||||
|
||||
invoke-static {p1}, Lradiant/gestures/MiniPlayerGestures;->trackMotion(Landroid/view/MotionEvent;)V
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v0
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getEventTime()J
|
||||
|
||||
move-result-wide v5
|
||||
|
||||
iget-object v1, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
|
||||
|
||||
invoke-static {v1, v0, v5, v6}, Lradiant/gestures/MiniPlayerGestures;->updateDragToYTimed(Landroidx/compose/material3/SheetState;FJ)V
|
||||
|
||||
invoke-static {v1}, Lradiant/gestures/MiniPlayerGestures;->releaseVelocity(Landroidx/compose/material3/SheetState;)F
|
||||
|
||||
move-result v0
|
||||
|
||||
invoke-direct {p0, v0}, Lradiant/gestures/MiniPlayerGestures$Gesture;->finishSheet(F)V
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->animateSwipeFeedbackReset()V
|
||||
|
||||
goto :finish
|
||||
|
||||
:up_no_drag
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->animateSwipeFeedbackReset()V
|
||||
|
||||
goto :finish
|
||||
|
||||
:open_simple
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->suppressHorizontalGestures()V
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v0
|
||||
|
||||
iget-object v1, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->a:Lam0/l;
|
||||
|
||||
invoke-static {v1, v0}, Lradiant/gestures/MiniPlayerGestures;->completeSimpleSwipe(Lam0/l;F)Z
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->animateSwipeFeedbackReset()V
|
||||
|
||||
|
||||
:finish
|
||||
invoke-direct {p0}, Lradiant/gestures/MiniPlayerGestures$Gesture;->reset()V
|
||||
|
||||
goto :done
|
||||
|
||||
# ACTION_CANCEL
|
||||
:cancel
|
||||
iget-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->e:Z
|
||||
|
||||
if-eqz v0, :cancel_no_active
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->animateSwipeFeedbackReset()V
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
|
||||
|
||||
iget-object v1, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->a:Lam0/l;
|
||||
|
||||
invoke-static {v0, v1}, Lradiant/gestures/MiniPlayerGestures;->cancelDrag(Landroidx/compose/material3/SheetState;Lam0/l;)V
|
||||
|
||||
goto :cancel_reset
|
||||
|
||||
:cancel_no_active
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->animateSwipeFeedbackReset()V
|
||||
|
||||
:cancel_reset
|
||||
invoke-direct {p0}, Lradiant/gestures/MiniPlayerGestures$Gesture;->reset()V
|
||||
|
||||
|
||||
:done
|
||||
sget-object p1, Lkotlin/u;->a:Lkotlin/u;
|
||||
|
||||
return-object p1
|
||||
.end method
|
||||
|
||||
.method public bridge synthetic invoke(Ljava/lang/Object;)Ljava/lang/Object;
|
||||
.locals 0
|
||||
|
||||
check-cast p1, Landroid/view/MotionEvent;
|
||||
|
||||
invoke-virtual {p0, p1}, Lradiant/gestures/MiniPlayerGestures$Gesture;->invoke(Landroid/view/MotionEvent;)Lkotlin/u;
|
||||
|
||||
move-result-object p1
|
||||
|
||||
return-object p1
|
||||
.end method
|
||||
@@ -1,178 +0,0 @@
|
||||
.class public final Lradiant/gestures/MiniPlayerGestures$RootGesture;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Lam0/l;
|
||||
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
||||
value = Lradiant/gestures/MiniPlayerGestures;
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
accessFlags = 0x19
|
||||
name = "RootGesture"
|
||||
.end annotation
|
||||
|
||||
|
||||
# instance fields
|
||||
.field public final a:Lam0/l;
|
||||
|
||||
.field public final b:Landroidx/compose/material3/SheetState;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>(Lam0/l;Landroidx/compose/material3/SheetState;)V
|
||||
.locals 0
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/MiniPlayerGestures$RootGesture;->a:Lam0/l;
|
||||
|
||||
iput-object p2, p0, Lradiant/gestures/MiniPlayerGestures$RootGesture;->b:Landroidx/compose/material3/SheetState;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public final invoke(Landroid/view/MotionEvent;)Lkotlin/u;
|
||||
.locals 6
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/MiniPlayerGestures$RootGesture;->b:Landroidx/compose/material3/SheetState;
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getActionMasked()I
|
||||
|
||||
move-result v1
|
||||
|
||||
invoke-static {v0}, Lradiant/gestures/MiniPlayerGestures;->isDragging(Landroidx/compose/material3/SheetState;)Z
|
||||
|
||||
move-result v2
|
||||
|
||||
if-eqz v2, :maybe_reset_only
|
||||
|
||||
const/4 v2, 0x1
|
||||
|
||||
if-eq v1, v2, :up
|
||||
|
||||
const/4 v2, 0x2
|
||||
|
||||
if-eq v1, v2, :move
|
||||
|
||||
const/4 v2, 0x3
|
||||
|
||||
if-eq v1, v2, :cancel
|
||||
|
||||
goto :done
|
||||
|
||||
:maybe_reset_only
|
||||
const/4 v2, 0x1
|
||||
|
||||
if-eq v1, v2, :simple_up
|
||||
|
||||
const/4 v2, 0x3
|
||||
|
||||
if-eq v1, v2, :reset_only
|
||||
|
||||
const/4 v2, 0x2
|
||||
|
||||
if-eq v1, v2, :simple_move
|
||||
|
||||
goto :done
|
||||
|
||||
:reset_only
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->resetGestureLock()V
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->animateSwipeFeedbackReset()V
|
||||
|
||||
goto :done
|
||||
|
||||
:simple_move
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v1
|
||||
|
||||
invoke-static {v1}, Lradiant/gestures/MiniPlayerGestures;->updateSimpleSwipe(F)Z
|
||||
|
||||
goto :done
|
||||
|
||||
:simple_up
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v1
|
||||
|
||||
iget-object v2, p0, Lradiant/gestures/MiniPlayerGestures$RootGesture;->a:Lam0/l;
|
||||
|
||||
invoke-static {v2, v1}, Lradiant/gestures/MiniPlayerGestures;->completeSimpleSwipe(Lam0/l;F)Z
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->animateSwipeFeedbackReset()V
|
||||
|
||||
goto :done
|
||||
|
||||
|
||||
# ACTION_MOVE
|
||||
:move
|
||||
invoke-static {p1}, Lradiant/gestures/MiniPlayerGestures;->trackMotion(Landroid/view/MotionEvent;)V
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v2
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getEventTime()J
|
||||
|
||||
move-result-wide v4
|
||||
|
||||
invoke-static {v0, v2, v4, v5}, Lradiant/gestures/MiniPlayerGestures;->updateDragToYTimed(Landroidx/compose/material3/SheetState;FJ)V
|
||||
|
||||
goto :done
|
||||
|
||||
# ACTION_UP
|
||||
:up
|
||||
invoke-static {p1}, Lradiant/gestures/MiniPlayerGestures;->trackMotion(Landroid/view/MotionEvent;)V
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v1
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getEventTime()J
|
||||
|
||||
move-result-wide v4
|
||||
|
||||
invoke-static {v0, v1, v4, v5}, Lradiant/gestures/MiniPlayerGestures;->updateDragToYTimed(Landroidx/compose/material3/SheetState;FJ)V
|
||||
|
||||
invoke-static {v0}, Lradiant/gestures/MiniPlayerGestures;->releaseVelocity(Landroidx/compose/material3/SheetState;)F
|
||||
|
||||
move-result v1
|
||||
|
||||
iget-object v2, p0, Lradiant/gestures/MiniPlayerGestures$RootGesture;->a:Lam0/l;
|
||||
|
||||
invoke-static {v0, v2, v1}, Lradiant/gestures/MiniPlayerGestures;->finishDrag(Landroidx/compose/material3/SheetState;Lam0/l;F)V
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->animateSwipeFeedbackReset()V
|
||||
|
||||
goto :done
|
||||
|
||||
# ACTION_CANCEL
|
||||
:cancel
|
||||
iget-object v2, p0, Lradiant/gestures/MiniPlayerGestures$RootGesture;->a:Lam0/l;
|
||||
|
||||
invoke-static {v0, v2}, Lradiant/gestures/MiniPlayerGestures;->cancelDrag(Landroidx/compose/material3/SheetState;Lam0/l;)V
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->animateSwipeFeedbackReset()V
|
||||
|
||||
:done
|
||||
sget-object p1, Lkotlin/u;->a:Lkotlin/u;
|
||||
|
||||
return-object p1
|
||||
.end method
|
||||
|
||||
.method public bridge synthetic invoke(Ljava/lang/Object;)Ljava/lang/Object;
|
||||
.locals 0
|
||||
|
||||
check-cast p1, Landroid/view/MotionEvent;
|
||||
|
||||
invoke-virtual {p0, p1}, Lradiant/gestures/MiniPlayerGestures$RootGesture;->invoke(Landroid/view/MotionEvent;)Lkotlin/u;
|
||||
|
||||
move-result-object p1
|
||||
|
||||
return-object p1
|
||||
.end method
|
||||
@@ -1,70 +0,0 @@
|
||||
.class public final Lradiant/gestures/MiniPlayerTrackGestures$OffsetLayer;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Lam0/l;
|
||||
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
||||
value = Lradiant/gestures/MiniPlayerTrackGestures;
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
accessFlags = 0x19
|
||||
name = "OffsetLayer"
|
||||
.end annotation
|
||||
|
||||
|
||||
# static fields
|
||||
.field public static final INSTANCE:Lradiant/gestures/MiniPlayerTrackGestures$OffsetLayer;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method static constructor <clinit>()V
|
||||
.locals 1
|
||||
|
||||
new-instance v0, Lradiant/gestures/MiniPlayerTrackGestures$OffsetLayer;
|
||||
|
||||
invoke-direct {v0}, Lradiant/gestures/MiniPlayerTrackGestures$OffsetLayer;-><init>()V
|
||||
|
||||
sput-object v0, Lradiant/gestures/MiniPlayerTrackGestures$OffsetLayer;->INSTANCE:Lradiant/gestures/MiniPlayerTrackGestures$OffsetLayer;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private constructor <init>()V
|
||||
.locals 0
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public final invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/u;
|
||||
.locals 1
|
||||
|
||||
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
invoke-interface {v0}, Landroidx/compose/runtime/MutableFloatState;->getFloatValue()F
|
||||
|
||||
move-result v0
|
||||
|
||||
invoke-interface {p1, v0}, Landroidx/compose/ui/graphics/GraphicsLayerScope;->setTranslationX(F)V
|
||||
|
||||
sget-object p1, Lkotlin/u;->a:Lkotlin/u;
|
||||
|
||||
return-object p1
|
||||
.end method
|
||||
|
||||
.method public bridge synthetic invoke(Ljava/lang/Object;)Ljava/lang/Object;
|
||||
.locals 0
|
||||
|
||||
check-cast p1, Landroidx/compose/ui/graphics/GraphicsLayerScope;
|
||||
|
||||
invoke-virtual {p0, p1}, Lradiant/gestures/MiniPlayerTrackGestures$OffsetLayer;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/u;
|
||||
|
||||
move-result-object p1
|
||||
|
||||
return-object p1
|
||||
.end method
|
||||
+6
-6
@@ -1,4 +1,4 @@
|
||||
.class public final Lradiant/gestures/LyricsDrag$Guard;
|
||||
.class public final Lradiant/gestures/lyrics/LyricsDrag$Guard;
|
||||
.super Ljava/lang/Object;
|
||||
|
||||
# interfaces
|
||||
@@ -9,17 +9,17 @@
|
||||
|
||||
# static state
|
||||
|
||||
.field public static final INSTANCE:Lradiant/gestures/LyricsDrag$Guard;
|
||||
.field public static final INSTANCE:Lradiant/gestures/lyrics/LyricsDrag$Guard;
|
||||
|
||||
|
||||
.method static constructor <clinit>()V
|
||||
.locals 1
|
||||
|
||||
new-instance v0, Lradiant/gestures/LyricsDrag$Guard;
|
||||
new-instance v0, Lradiant/gestures/lyrics/LyricsDrag$Guard;
|
||||
|
||||
invoke-direct {v0}, Lradiant/gestures/LyricsDrag$Guard;-><init>()V
|
||||
invoke-direct {v0}, Lradiant/gestures/lyrics/LyricsDrag$Guard;-><init>()V
|
||||
|
||||
sput-object v0, Lradiant/gestures/LyricsDrag$Guard;->INSTANCE:Lradiant/gestures/LyricsDrag$Guard;
|
||||
sput-object v0, Lradiant/gestures/lyrics/LyricsDrag$Guard;->INSTANCE:Lradiant/gestures/lyrics/LyricsDrag$Guard;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -42,7 +42,7 @@
|
||||
return-wide p3
|
||||
.end method
|
||||
|
||||
.method public onPostFling-RZ2iAVY(JJLkotlin/coroutines/e;)Ljava/lang/Object;
|
||||
.method public onPostFling-RZ2iAVY(JJLkotlin/coroutines/e;)Ljava/lang/Object; # MARKER: R8 Lkotlin/coroutines/e;
|
||||
.locals 2
|
||||
|
||||
invoke-static {p3, p4}, Landroidx/compose/ui/unit/Velocity;->box-impl(J)Landroidx/compose/ui/unit/Velocity;
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
.class public final Lradiant/gestures/LyricsDrag;
|
||||
.class public final Lradiant/gestures/lyrics/LyricsDrag;
|
||||
.super Ljava/lang/Object;
|
||||
|
||||
# Stops lyrics scroll dismissing the player
|
||||
@@ -16,7 +16,7 @@
|
||||
.method public static wrap(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
|
||||
.locals 2
|
||||
|
||||
sget-object v0, Lradiant/gestures/LyricsDrag$Guard;->INSTANCE:Lradiant/gestures/LyricsDrag$Guard;
|
||||
sget-object v0, Lradiant/gestures/lyrics/LyricsDrag$Guard;->INSTANCE:Lradiant/gestures/lyrics/LyricsDrag$Guard;
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
+9
-9
@@ -1,10 +1,10 @@
|
||||
.class public final Lradiant/gestures/MiniPlayerGestures$ApplyPending;
|
||||
.class public final Lradiant/gestures/miniplayer/MiniPlayerGestures$ApplyPending;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Ljava/lang/Runnable;
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
||||
value = Lradiant/gestures/MiniPlayerGestures;
|
||||
value = Lradiant/gestures/miniplayer/MiniPlayerGestures;
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
@@ -25,9 +25,9 @@
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/MiniPlayerGestures$ApplyPending;->a:Landroidx/compose/material3/SheetState;
|
||||
iput-object p1, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$ApplyPending;->a:Landroidx/compose/material3/SheetState;
|
||||
|
||||
iput p2, p0, Lradiant/gestures/MiniPlayerGestures$ApplyPending;->b:I
|
||||
iput p2, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$ApplyPending;->b:I
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -39,23 +39,23 @@
|
||||
.method public final run()V
|
||||
.locals 3
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/MiniPlayerGestures$ApplyPending;->a:Landroidx/compose/material3/SheetState;
|
||||
iget-object v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$ApplyPending;->a:Landroidx/compose/material3/SheetState;
|
||||
|
||||
invoke-static {v0}, Lradiant/gestures/MiniPlayerGestures;->applyPendingDrag(Landroidx/compose/material3/SheetState;)V
|
||||
invoke-static {v0}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->applyPendingDrag(Landroidx/compose/material3/SheetState;)V
|
||||
|
||||
iget v1, p0, Lradiant/gestures/MiniPlayerGestures$ApplyPending;->b:I
|
||||
iget v1, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$ApplyPending;->b:I
|
||||
|
||||
add-int/lit8 v1, v1, -0x1
|
||||
|
||||
if-lez v1, :done
|
||||
|
||||
invoke-static {v0}, Lradiant/gestures/MiniPlayerGestures;->needsApply(Landroidx/compose/material3/SheetState;)Z
|
||||
invoke-static {v0}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->needsApply(Landroidx/compose/material3/SheetState;)Z
|
||||
|
||||
move-result v2
|
||||
|
||||
if-eqz v2, :done
|
||||
|
||||
invoke-static {v0, v1}, Lradiant/gestures/MiniPlayerGestures;->scheduleApply(Landroidx/compose/material3/SheetState;I)V
|
||||
invoke-static {v0, v1}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->scheduleApply(Landroidx/compose/material3/SheetState;I)V
|
||||
|
||||
:done
|
||||
return-void
|
||||
+11
-11
@@ -1,11 +1,11 @@
|
||||
.class public final Lradiant/gestures/MiniPlayerGestures$FeedbackLayer;
|
||||
.class public final Lradiant/gestures/miniplayer/MiniPlayerGestures$FeedbackLayer;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Lam0/l;
|
||||
.implements Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
||||
value = Lradiant/gestures/MiniPlayerGestures;
|
||||
value = Lradiant/gestures/miniplayer/MiniPlayerGestures;
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
@@ -15,18 +15,18 @@
|
||||
|
||||
|
||||
# static fields
|
||||
.field public static final INSTANCE:Lradiant/gestures/MiniPlayerGestures$FeedbackLayer;
|
||||
.field public static final INSTANCE:Lradiant/gestures/miniplayer/MiniPlayerGestures$FeedbackLayer;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method static constructor <clinit>()V
|
||||
.locals 1
|
||||
|
||||
new-instance v0, Lradiant/gestures/MiniPlayerGestures$FeedbackLayer;
|
||||
new-instance v0, Lradiant/gestures/miniplayer/MiniPlayerGestures$FeedbackLayer;
|
||||
|
||||
invoke-direct {v0}, Lradiant/gestures/MiniPlayerGestures$FeedbackLayer;-><init>()V
|
||||
invoke-direct {v0}, Lradiant/gestures/miniplayer/MiniPlayerGestures$FeedbackLayer;-><init>()V
|
||||
|
||||
sput-object v0, Lradiant/gestures/MiniPlayerGestures$FeedbackLayer;->INSTANCE:Lradiant/gestures/MiniPlayerGestures$FeedbackLayer;
|
||||
sput-object v0, Lradiant/gestures/miniplayer/MiniPlayerGestures$FeedbackLayer;->INSTANCE:Lradiant/gestures/miniplayer/MiniPlayerGestures$FeedbackLayer;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -41,10 +41,10 @@
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public final invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/u;
|
||||
.method public final invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
.locals 1
|
||||
|
||||
sget-object v0, Lradiant/gestures/MiniPlayerGestures;->v:Landroidx/compose/runtime/MutableFloatState;
|
||||
sget-object v0, Lradiant/gestures/miniplayer/MiniPlayerGestures;->v:Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
invoke-interface {v0}, Landroidx/compose/runtime/MutableFloatState;->getFloatValue()F
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
|
||||
invoke-interface {p1, v0}, Landroidx/compose/ui/graphics/GraphicsLayerScope;->setTranslationY(F)V
|
||||
|
||||
sget-object p1, Lkotlin/u;->a:Lkotlin/u;
|
||||
sget-object p1, Lkotlin/u;->a:Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
return-object p1
|
||||
.end method
|
||||
@@ -62,7 +62,7 @@
|
||||
|
||||
check-cast p1, Landroidx/compose/ui/graphics/GraphicsLayerScope;
|
||||
|
||||
invoke-virtual {p0, p1}, Lradiant/gestures/MiniPlayerGestures$FeedbackLayer;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/u;
|
||||
invoke-virtual {p0, p1}, Lradiant/gestures/miniplayer/MiniPlayerGestures$FeedbackLayer;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
move-result-object p1
|
||||
|
||||
+4
-4
@@ -1,11 +1,11 @@
|
||||
.class public final Lradiant/gestures/MiniPlayerGestures$FeedbackResetAnimator;
|
||||
.class public final Lradiant/gestures/miniplayer/MiniPlayerGestures$FeedbackResetAnimator;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Landroid/animation/ValueAnimator$AnimatorUpdateListener;
|
||||
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
||||
value = Lradiant/gestures/MiniPlayerGestures;
|
||||
value = Lradiant/gestures/miniplayer/MiniPlayerGestures;
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
move-result v1
|
||||
|
||||
invoke-static {v1}, Lradiant/gestures/MiniPlayerGestures;->setSwipeFeedbackDirect(F)V
|
||||
invoke-static {v1}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->setSwipeFeedbackDirect(F)V
|
||||
|
||||
invoke-virtual {v0}, Landroid/animation/ValueAnimator;->getAnimatedFraction()F
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
|
||||
if-gez v1, :done
|
||||
|
||||
invoke-static {v0}, Lradiant/gestures/MiniPlayerGestures;->clearSwipeFeedbackAnimator(Landroid/animation/ValueAnimator;)V
|
||||
invoke-static {v0}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->clearSwipeFeedbackAnimator(Landroid/animation/ValueAnimator;)V
|
||||
|
||||
:done
|
||||
return-void
|
||||
@@ -0,0 +1,521 @@
|
||||
.class public final Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
||||
value = Lradiant/gestures/miniplayer/MiniPlayerGestures;
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
accessFlags = 0x19
|
||||
name = "Gesture"
|
||||
.end annotation
|
||||
|
||||
|
||||
# instance fields
|
||||
.field public final a:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
# Y at ACTION_DOWN
|
||||
.field public b:F
|
||||
|
||||
# Last Y seen (on this pointer stream)
|
||||
.field public c:F
|
||||
|
||||
# True while this listener owns an active pointer stream
|
||||
.field public d:Z
|
||||
|
||||
# True when sheet drag has started
|
||||
.field public e:Z
|
||||
|
||||
.field public final f:Landroidx/compose/material3/SheetState;
|
||||
|
||||
.field public g:F
|
||||
|
||||
# X at ACTION_DOWN
|
||||
.field public i:F
|
||||
|
||||
# True once horizontal movement wins (prevents later vertical start)
|
||||
.field public j:Z
|
||||
|
||||
# Drag option enabled
|
||||
.field public final k:Z
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>(Lyl0/l;Landroidx/compose/material3/SheetState;Z)V # MARKER: R8 Lyl0/l;
|
||||
.locals 0
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->a:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
iput-object p2, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
|
||||
|
||||
iput-boolean p3, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->k:Z
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private static dp(F)F
|
||||
.locals 1
|
||||
|
||||
invoke-static {}, Landroid/content/res/Resources;->getSystem()Landroid/content/res/Resources;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
invoke-virtual {v0}, Landroid/content/res/Resources;->getDisplayMetrics()Landroid/util/DisplayMetrics;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
iget v0, v0, Landroid/util/DisplayMetrics;->density:F
|
||||
|
||||
mul-float/2addr p0, v0
|
||||
|
||||
return p0
|
||||
.end method
|
||||
|
||||
.method private dragSheet(FJ)V
|
||||
.locals 1
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
|
||||
|
||||
invoke-static {v0, p1, p2, p3}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->updateDragTimed(Landroidx/compose/material3/SheetState;FJ)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private finishSheet(F)V
|
||||
.locals 2
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
|
||||
|
||||
iget-object v1, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->a:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
invoke-static {v0, v1, p1}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->finishDrag(Landroidx/compose/material3/SheetState;Lyl0/l;F)V # MARKER: R8 Lyl0/l;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private openPlayer()V
|
||||
.locals 2
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->a:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
sget-object v1, Lcom/tidal/android/feature/appscaffold/ui/b$b;->a:Lcom/tidal/android/feature/appscaffold/ui/b$b; # MARKER: R8 Lcom/tidal/android/feature/appscaffold/ui/b$b; a
|
||||
|
||||
invoke-interface {v0, v1}, Lyl0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; # MARKER: R8 Lyl0/l;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private reset()V
|
||||
.locals 1
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->d:Z
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->e:Z
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->j:Z
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
iput v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->i:F
|
||||
|
||||
iput v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->g:F
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private startSheet(FJ)V
|
||||
.locals 2
|
||||
|
||||
# empty player guard
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->hasMiniPlayerMedia()Z
|
||||
|
||||
move-result v0
|
||||
|
||||
if-nez v0, :start_guard
|
||||
|
||||
return-void
|
||||
|
||||
:start_guard
|
||||
|
||||
# avoid starting twice
|
||||
iget-boolean v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->e:Z
|
||||
|
||||
if-eqz v0, :start
|
||||
|
||||
return-void
|
||||
|
||||
:start
|
||||
const/4 v0, 0x1
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->e:Z
|
||||
|
||||
iget-boolean v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->k:Z
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
iget-object v1, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
|
||||
|
||||
iget v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->b:F
|
||||
|
||||
invoke-static {v1, p1, v0, p2, p3}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->beginDrag(Landroidx/compose/material3/SheetState;FFJ)V
|
||||
|
||||
invoke-direct {p0}, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->openPlayer()V
|
||||
|
||||
:done
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
# Listens for MotionEvents
|
||||
.method public final invoke(Landroid/view/MotionEvent;)Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
.locals 11
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getActionMasked()I
|
||||
|
||||
move-result v0
|
||||
|
||||
if-eqz v0, :down
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
if-eq v0, v1, :up
|
||||
|
||||
const/4 v1, 0x2
|
||||
|
||||
if-eq v0, v1, :move
|
||||
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-eq v0, v1, :cancel
|
||||
|
||||
goto :done
|
||||
|
||||
# ACTION_DOWN
|
||||
:down
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->resetGestureLock()V
|
||||
|
||||
invoke-static {p1}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->beginMotion(Landroid/view/MotionEvent;)V
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v0
|
||||
|
||||
iput v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->b:F
|
||||
|
||||
iput v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->c:F
|
||||
|
||||
const/4 v0, 0x1
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->d:Z
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->e:Z
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
iput v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->g:F
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawX()F
|
||||
|
||||
move-result v0
|
||||
|
||||
iput v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->i:F
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->j:Z
|
||||
|
||||
iget v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->b:F
|
||||
|
||||
invoke-static {v0}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->beginSwipeGesture(F)V
|
||||
|
||||
:skip_feedback_down
|
||||
|
||||
goto :done
|
||||
|
||||
# ACTION_MOVE
|
||||
:move
|
||||
iget-boolean v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->d:Z
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
invoke-static {p1}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->trackMotion(Landroid/view/MotionEvent;)V
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v0
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getEventTime()J
|
||||
|
||||
move-result-wide v5
|
||||
|
||||
iget v1, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->c:F
|
||||
|
||||
sub-float v1, v0, v1
|
||||
|
||||
iput v1, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->g:F
|
||||
|
||||
iget v2, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->b:F
|
||||
|
||||
sub-float v2, v0, v2
|
||||
|
||||
iget-boolean v3, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->e:Z
|
||||
|
||||
if-eqz v3, :maybe_start
|
||||
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->suppressHorizontalGestures()V
|
||||
|
||||
iget-boolean v3, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->k:Z
|
||||
|
||||
if-eqz v3, :feedback_active
|
||||
|
||||
invoke-direct {p0, v2, v5, v6}, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->dragSheet(FJ)V
|
||||
|
||||
:feedback_active
|
||||
invoke-static {v2}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->setSwipeFeedbackFromDrag(F)V
|
||||
|
||||
goto :store_last
|
||||
|
||||
:maybe_start
|
||||
iget-boolean v3, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->j:Z
|
||||
|
||||
if-eqz v3, :axis_check
|
||||
|
||||
goto :store_last
|
||||
|
||||
:axis_check
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawX()F
|
||||
|
||||
move-result v7
|
||||
|
||||
iget v8, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->i:F
|
||||
|
||||
sub-float/2addr v7, v8
|
||||
|
||||
invoke-static {v7}, Ljava/lang/Math;->abs(F)F
|
||||
|
||||
move-result v7
|
||||
|
||||
invoke-static {v2}, Ljava/lang/Math;->abs(F)F
|
||||
|
||||
move-result v8
|
||||
|
||||
const/high16 v9, 0x40c00000 # 6.0f axis deadzone
|
||||
|
||||
invoke-static {v9}, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->dp(F)F
|
||||
|
||||
move-result v9
|
||||
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->isHorizontalGestureLocked()Z
|
||||
|
||||
move-result v10
|
||||
|
||||
if-eqz v10, :horizontal_check
|
||||
|
||||
const/4 v10, 0x0
|
||||
|
||||
invoke-static {v10}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->setSwipeFeedbackDirect(F)V
|
||||
|
||||
goto :store_last
|
||||
|
||||
:horizontal_check
|
||||
|
||||
cmpg-float v10, v7, v9
|
||||
|
||||
if-gez v10, :horizontal_dominance
|
||||
|
||||
goto :vertical_check
|
||||
|
||||
:horizontal_dominance
|
||||
|
||||
const v10, 0x3f8ccccd # 1.1f
|
||||
|
||||
mul-float/2addr v10, v8
|
||||
|
||||
cmpg-float v10, v7, v10
|
||||
|
||||
if-gez v10, :horizontal_wins
|
||||
|
||||
goto :vertical_check
|
||||
|
||||
:horizontal_wins
|
||||
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->lockHorizontalGesture()Z
|
||||
|
||||
move-result v10
|
||||
|
||||
if-eqz v10, :store_last
|
||||
|
||||
const/4 v10, 0x1
|
||||
|
||||
iput-boolean v10, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->j:Z
|
||||
|
||||
const/4 v10, 0x0
|
||||
|
||||
invoke-static {v10}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->setSwipeFeedbackDirect(F)V
|
||||
|
||||
goto :store_last
|
||||
|
||||
# At least 16dp up to open the player
|
||||
:vertical_check
|
||||
neg-float v9, v9
|
||||
|
||||
cmpg-float v10, v2, v9
|
||||
|
||||
if-lez v10, :vertical_dominance
|
||||
|
||||
invoke-static {v2}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->setSwipeFeedbackFromDrag(F)V
|
||||
|
||||
goto :store_last
|
||||
|
||||
:vertical_dominance
|
||||
const v10, 0x3f8ccccd # 1.1f -> early vertical axis lock
|
||||
|
||||
mul-float/2addr v7, v10
|
||||
|
||||
cmpl-float v10, v8, v7
|
||||
|
||||
if-gtz v10, :begin
|
||||
|
||||
goto :store_last
|
||||
|
||||
:begin
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->lockVerticalGesture()Z
|
||||
|
||||
move-result v10
|
||||
|
||||
if-eqz v10, :store_last
|
||||
|
||||
invoke-direct {p0, v2, v5, v6}, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->startSheet(FJ)V
|
||||
|
||||
iget-boolean v10, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->e:Z
|
||||
|
||||
if-eqz v10, :store_last
|
||||
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->suppressHorizontalGestures()V
|
||||
|
||||
iget-boolean v10, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->k:Z
|
||||
|
||||
if-eqz v10, :feedback_begin
|
||||
|
||||
invoke-direct {p0, v2, v5, v6}, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->dragSheet(FJ)V
|
||||
|
||||
:feedback_begin
|
||||
invoke-static {v2}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->setSwipeFeedbackFromDrag(F)V
|
||||
|
||||
|
||||
:store_last
|
||||
iput v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->c:F
|
||||
|
||||
goto :done
|
||||
|
||||
# ACTION_UP
|
||||
:up
|
||||
iget-boolean v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->d:Z
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
iget-boolean v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->e:Z
|
||||
|
||||
if-eqz v0, :up_no_drag
|
||||
|
||||
iget-boolean v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->k:Z
|
||||
|
||||
if-eqz v0, :open_simple
|
||||
|
||||
invoke-static {p1}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->trackMotion(Landroid/view/MotionEvent;)V
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v0
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getEventTime()J
|
||||
|
||||
move-result-wide v5
|
||||
|
||||
iget-object v1, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
|
||||
|
||||
invoke-static {v1, v0, v5, v6}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->updateDragToYTimed(Landroidx/compose/material3/SheetState;FJ)V
|
||||
|
||||
invoke-static {v1}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->releaseVelocity(Landroidx/compose/material3/SheetState;)F
|
||||
|
||||
move-result v0
|
||||
|
||||
invoke-direct {p0, v0}, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->finishSheet(F)V
|
||||
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->animateSwipeFeedbackReset()V
|
||||
|
||||
goto :finish
|
||||
|
||||
:up_no_drag
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->animateSwipeFeedbackReset()V
|
||||
|
||||
goto :finish
|
||||
|
||||
:open_simple
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->suppressHorizontalGestures()V
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v0
|
||||
|
||||
iget-object v1, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->a:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
invoke-static {v1, v0}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->completeSimpleSwipe(Lyl0/l;F)Z # MARKER: R8 Lyl0/l;
|
||||
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->animateSwipeFeedbackReset()V
|
||||
|
||||
|
||||
:finish
|
||||
invoke-direct {p0}, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->reset()V
|
||||
|
||||
goto :done
|
||||
|
||||
# ACTION_CANCEL
|
||||
:cancel
|
||||
iget-boolean v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->e:Z
|
||||
|
||||
if-eqz v0, :cancel_no_active
|
||||
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->animateSwipeFeedbackReset()V
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
|
||||
|
||||
iget-object v1, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->a:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
invoke-static {v0, v1}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->cancelDrag(Landroidx/compose/material3/SheetState;Lyl0/l;)V # MARKER: R8 Lyl0/l;
|
||||
|
||||
goto :cancel_reset
|
||||
|
||||
:cancel_no_active
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->animateSwipeFeedbackReset()V
|
||||
|
||||
:cancel_reset
|
||||
invoke-direct {p0}, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->reset()V
|
||||
|
||||
|
||||
:done
|
||||
sget-object p1, Lkotlin/u;->a:Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
return-object p1
|
||||
.end method
|
||||
|
||||
.method public bridge synthetic invoke(Ljava/lang/Object;)Ljava/lang/Object;
|
||||
.locals 0
|
||||
|
||||
check-cast p1, Landroid/view/MotionEvent;
|
||||
|
||||
invoke-virtual {p0, p1}, Lradiant/gestures/miniplayer/MiniPlayerGestures$Gesture;->invoke(Landroid/view/MotionEvent;)Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
move-result-object p1
|
||||
|
||||
return-object p1
|
||||
.end method
|
||||
@@ -0,0 +1,178 @@
|
||||
.class public final Lradiant/gestures/miniplayer/MiniPlayerGestures$RootGesture;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
||||
value = Lradiant/gestures/miniplayer/MiniPlayerGestures;
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
accessFlags = 0x19
|
||||
name = "RootGesture"
|
||||
.end annotation
|
||||
|
||||
|
||||
# instance fields
|
||||
.field public final a:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
.field public final b:Landroidx/compose/material3/SheetState;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>(Lyl0/l;Landroidx/compose/material3/SheetState;)V # MARKER: R8 Lyl0/l;
|
||||
.locals 0
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$RootGesture;->a:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
iput-object p2, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$RootGesture;->b:Landroidx/compose/material3/SheetState;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public final invoke(Landroid/view/MotionEvent;)Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
.locals 6
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$RootGesture;->b:Landroidx/compose/material3/SheetState;
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getActionMasked()I
|
||||
|
||||
move-result v1
|
||||
|
||||
invoke-static {v0}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->isDragging(Landroidx/compose/material3/SheetState;)Z
|
||||
|
||||
move-result v2
|
||||
|
||||
if-eqz v2, :maybe_reset_only
|
||||
|
||||
const/4 v2, 0x1
|
||||
|
||||
if-eq v1, v2, :up
|
||||
|
||||
const/4 v2, 0x2
|
||||
|
||||
if-eq v1, v2, :move
|
||||
|
||||
const/4 v2, 0x3
|
||||
|
||||
if-eq v1, v2, :cancel
|
||||
|
||||
goto :done
|
||||
|
||||
:maybe_reset_only
|
||||
const/4 v2, 0x1
|
||||
|
||||
if-eq v1, v2, :simple_up
|
||||
|
||||
const/4 v2, 0x3
|
||||
|
||||
if-eq v1, v2, :reset_only
|
||||
|
||||
const/4 v2, 0x2
|
||||
|
||||
if-eq v1, v2, :simple_move
|
||||
|
||||
goto :done
|
||||
|
||||
:reset_only
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->resetGestureLock()V
|
||||
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->animateSwipeFeedbackReset()V
|
||||
|
||||
goto :done
|
||||
|
||||
:simple_move
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v1
|
||||
|
||||
invoke-static {v1}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->updateSimpleSwipe(F)Z
|
||||
|
||||
goto :done
|
||||
|
||||
:simple_up
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v1
|
||||
|
||||
iget-object v2, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$RootGesture;->a:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
invoke-static {v2, v1}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->completeSimpleSwipe(Lyl0/l;F)Z # MARKER: R8 Lyl0/l;
|
||||
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->animateSwipeFeedbackReset()V
|
||||
|
||||
goto :done
|
||||
|
||||
|
||||
# ACTION_MOVE
|
||||
:move
|
||||
invoke-static {p1}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->trackMotion(Landroid/view/MotionEvent;)V
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v2
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getEventTime()J
|
||||
|
||||
move-result-wide v4
|
||||
|
||||
invoke-static {v0, v2, v4, v5}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->updateDragToYTimed(Landroidx/compose/material3/SheetState;FJ)V
|
||||
|
||||
goto :done
|
||||
|
||||
# ACTION_UP
|
||||
:up
|
||||
invoke-static {p1}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->trackMotion(Landroid/view/MotionEvent;)V
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v1
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getEventTime()J
|
||||
|
||||
move-result-wide v4
|
||||
|
||||
invoke-static {v0, v1, v4, v5}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->updateDragToYTimed(Landroidx/compose/material3/SheetState;FJ)V
|
||||
|
||||
invoke-static {v0}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->releaseVelocity(Landroidx/compose/material3/SheetState;)F
|
||||
|
||||
move-result v1
|
||||
|
||||
iget-object v2, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$RootGesture;->a:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
invoke-static {v0, v2, v1}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->finishDrag(Landroidx/compose/material3/SheetState;Lyl0/l;F)V # MARKER: R8 Lyl0/l;
|
||||
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->animateSwipeFeedbackReset()V
|
||||
|
||||
goto :done
|
||||
|
||||
# ACTION_CANCEL
|
||||
:cancel
|
||||
iget-object v2, p0, Lradiant/gestures/miniplayer/MiniPlayerGestures$RootGesture;->a:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
invoke-static {v0, v2}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->cancelDrag(Landroidx/compose/material3/SheetState;Lyl0/l;)V # MARKER: R8 Lyl0/l;
|
||||
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->animateSwipeFeedbackReset()V
|
||||
|
||||
:done
|
||||
sget-object p1, Lkotlin/u;->a:Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
return-object p1
|
||||
.end method
|
||||
|
||||
.method public bridge synthetic invoke(Ljava/lang/Object;)Ljava/lang/Object;
|
||||
.locals 0
|
||||
|
||||
check-cast p1, Landroid/view/MotionEvent;
|
||||
|
||||
invoke-virtual {p0, p1}, Lradiant/gestures/miniplayer/MiniPlayerGestures$RootGesture;->invoke(Landroid/view/MotionEvent;)Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
move-result-object p1
|
||||
|
||||
return-object p1
|
||||
.end method
|
||||
+193
-193
File diff suppressed because it is too large.
Load diff
+23
-23
@@ -1,11 +1,11 @@
|
||||
.class public final Lradiant/gestures/MiniPlayerTrackGestures$Gesture;
|
||||
.class public final Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$Gesture;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Lam0/l;
|
||||
.implements Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
||||
value = Lradiant/gestures/MiniPlayerTrackGestures;
|
||||
value = Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
@@ -15,16 +15,16 @@
|
||||
|
||||
|
||||
# instance fields
|
||||
.field public final a:Lam0/l;
|
||||
.field public final a:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>(Lam0/l;)V
|
||||
.method public constructor <init>(Lyl0/l;)V # MARKER: R8 Lyl0/l;
|
||||
.locals 0
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/MiniPlayerTrackGestures$Gesture;->a:Lam0/l;
|
||||
iput-object p1, p0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$Gesture;->a:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -32,11 +32,11 @@
|
||||
.method private nextTrack()V
|
||||
.locals 2
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/MiniPlayerTrackGestures$Gesture;->a:Lam0/l;
|
||||
iget-object v0, p0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$Gesture;->a:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
sget-object v1, Lcom/tidal/android/feature/appscaffold/ui/r$a;->a:Lcom/tidal/android/feature/appscaffold/ui/r$a; # Tidal's built-in next track mini-player event
|
||||
sget-object v1, Lcom/tidal/android/feature/appscaffold/ui/r$a;->a:Lcom/tidal/android/feature/appscaffold/ui/r$a; # Tidal's built-in next track mini-player event MARKER: R8 Lcom/tidal/android/feature/appscaffold/ui/r$a; a
|
||||
|
||||
invoke-interface {v0, v1}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
|
||||
invoke-interface {v0, v1}, Lyl0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; # MARKER: R8 Lyl0/l;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -44,18 +44,18 @@
|
||||
.method private previousTrack()V
|
||||
.locals 2
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/MiniPlayerTrackGestures$Gesture;->a:Lam0/l;
|
||||
iget-object v0, p0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$Gesture;->a:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
sget-object v1, Lcom/tidal/android/feature/appscaffold/ui/r$c;->a:Lcom/tidal/android/feature/appscaffold/ui/r$c; # Our synthetic previous track event
|
||||
sget-object v1, Lcom/tidal/android/feature/appscaffold/ui/r$c;->a:Lcom/tidal/android/feature/appscaffold/ui/r$c; # Our synthetic previous track event MARKER: R8 Lcom/tidal/android/feature/appscaffold/ui/r$c; a
|
||||
|
||||
invoke-interface {v0, v1}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
|
||||
invoke-interface {v0, v1}, Lyl0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; # MARKER: R8 Lyl0/l;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public final invoke(Landroid/view/MotionEvent;)Lkotlin/u;
|
||||
.method public final invoke(Landroid/view/MotionEvent;)Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
.locals 3
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getActionMasked()I
|
||||
@@ -86,7 +86,7 @@
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v1
|
||||
invoke-static {v0, v1}, Lradiant/gestures/MiniPlayerTrackGestures;->beginDrag(FF)V
|
||||
invoke-static {v0, v1}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->beginDrag(FF)V
|
||||
goto :done
|
||||
|
||||
# ACTION_MOVE
|
||||
@@ -97,7 +97,7 @@
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v1
|
||||
invoke-static {v0, v1}, Lradiant/gestures/MiniPlayerTrackGestures;->moveDrag(FF)V
|
||||
invoke-static {v0, v1}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->moveDrag(FF)V
|
||||
goto :done
|
||||
|
||||
# ACTION_UP
|
||||
@@ -108,7 +108,7 @@
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v1
|
||||
invoke-static {v0, v1}, Lradiant/gestures/MiniPlayerTrackGestures;->finishDrag(FF)I
|
||||
invoke-static {v0, v1}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->finishDrag(FF)I
|
||||
|
||||
move-result v0
|
||||
|
||||
@@ -117,22 +117,22 @@
|
||||
# Negative result = swipe left -> next. Positive result = swipe right -> previous
|
||||
if-gez v0, :previous
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->suppressTapOpen()V
|
||||
invoke-direct {p0}, Lradiant/gestures/MiniPlayerTrackGestures$Gesture;->nextTrack()V
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->suppressTapOpen()V
|
||||
invoke-direct {p0}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$Gesture;->nextTrack()V
|
||||
goto :done
|
||||
|
||||
:previous
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->suppressTapOpen()V
|
||||
invoke-direct {p0}, Lradiant/gestures/MiniPlayerTrackGestures$Gesture;->previousTrack()V
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->suppressTapOpen()V
|
||||
invoke-direct {p0}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$Gesture;->previousTrack()V
|
||||
goto :done
|
||||
|
||||
# ACTION_CANCEL
|
||||
:cancel
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->cancelDrag()V
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->cancelDrag()V
|
||||
|
||||
:done
|
||||
sget-object p1, Lkotlin/u;->a:Lkotlin/u;
|
||||
sget-object p1, Lkotlin/u;->a:Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
return-object p1
|
||||
.end method
|
||||
@@ -142,7 +142,7 @@
|
||||
|
||||
check-cast p1, Landroid/view/MotionEvent;
|
||||
|
||||
invoke-virtual {p0, p1}, Lradiant/gestures/MiniPlayerTrackGestures$Gesture;->invoke(Landroid/view/MotionEvent;)Lkotlin/u;
|
||||
invoke-virtual {p0, p1}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$Gesture;->invoke(Landroid/view/MotionEvent;)Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
move-result-object p1
|
||||
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
.class public final Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$OffsetLayer;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
||||
value = Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
accessFlags = 0x19
|
||||
name = "OffsetLayer"
|
||||
.end annotation
|
||||
|
||||
|
||||
# static fields
|
||||
.field public static final INSTANCE:Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$OffsetLayer;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method static constructor <clinit>()V
|
||||
.locals 1
|
||||
|
||||
new-instance v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$OffsetLayer;
|
||||
|
||||
invoke-direct {v0}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$OffsetLayer;-><init>()V
|
||||
|
||||
sput-object v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$OffsetLayer;->INSTANCE:Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$OffsetLayer;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private constructor <init>()V
|
||||
.locals 0
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public final invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
.locals 1
|
||||
|
||||
sget-object v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
invoke-interface {v0}, Landroidx/compose/runtime/MutableFloatState;->getFloatValue()F
|
||||
|
||||
move-result v0
|
||||
|
||||
invoke-interface {p1, v0}, Landroidx/compose/ui/graphics/GraphicsLayerScope;->setTranslationX(F)V
|
||||
|
||||
sget-object p1, Lkotlin/u;->a:Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
return-object p1
|
||||
.end method
|
||||
|
||||
.method public bridge synthetic invoke(Ljava/lang/Object;)Ljava/lang/Object;
|
||||
.locals 0
|
||||
|
||||
check-cast p1, Landroidx/compose/ui/graphics/GraphicsLayerScope;
|
||||
|
||||
invoke-virtual {p0, p1}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$OffsetLayer;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
move-result-object p1
|
||||
|
||||
return-object p1
|
||||
.end method
|
||||
+4
-4
@@ -1,11 +1,11 @@
|
||||
.class public final Lradiant/gestures/MiniPlayerTrackGestures$ResetAnimator;
|
||||
.class public final Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$ResetAnimator;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Landroid/animation/ValueAnimator$AnimatorUpdateListener;
|
||||
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
||||
value = Lradiant/gestures/MiniPlayerTrackGestures;
|
||||
value = Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
move-result v1
|
||||
|
||||
invoke-static {v1}, Lradiant/gestures/MiniPlayerTrackGestures;->setDragOffsetDirect(F)V
|
||||
invoke-static {v1}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->setDragOffsetDirect(F)V
|
||||
|
||||
invoke-virtual {v0}, Landroid/animation/ValueAnimator;->getAnimatedFraction()F
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
|
||||
if-gez v1, :done
|
||||
|
||||
invoke-static {v0}, Lradiant/gestures/MiniPlayerTrackGestures;->clearResetAnimator(Landroid/animation/ValueAnimator;)V
|
||||
invoke-static {v0}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->clearResetAnimator(Landroid/animation/ValueAnimator;)V
|
||||
|
||||
:done
|
||||
|
||||
+11
-11
@@ -1,11 +1,11 @@
|
||||
.class public final Lradiant/gestures/MiniPlayerTrackGestures$TextDraw;
|
||||
.class public final Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$TextDraw;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Lam0/l;
|
||||
.implements Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
||||
value = Lradiant/gestures/MiniPlayerTrackGestures;
|
||||
value = Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
@@ -15,18 +15,18 @@
|
||||
|
||||
|
||||
# static fields
|
||||
.field public static final INSTANCE:Lradiant/gestures/MiniPlayerTrackGestures$TextDraw;
|
||||
.field public static final INSTANCE:Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$TextDraw;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method static constructor <clinit>()V
|
||||
.locals 1
|
||||
|
||||
new-instance v0, Lradiant/gestures/MiniPlayerTrackGestures$TextDraw;
|
||||
new-instance v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$TextDraw;
|
||||
|
||||
invoke-direct {v0}, Lradiant/gestures/MiniPlayerTrackGestures$TextDraw;-><init>()V
|
||||
invoke-direct {v0}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$TextDraw;-><init>()V
|
||||
|
||||
sput-object v0, Lradiant/gestures/MiniPlayerTrackGestures$TextDraw;->INSTANCE:Lradiant/gestures/MiniPlayerTrackGestures$TextDraw;
|
||||
sput-object v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$TextDraw;->INSTANCE:Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$TextDraw;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -41,10 +41,10 @@
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public final invoke(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)Lkotlin/u;
|
||||
.method public final invoke(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
.locals 12
|
||||
|
||||
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
|
||||
sget-object v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
invoke-interface {v0}, Landroidx/compose/runtime/MutableFloatState;->getFloatValue()F
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
|
||||
invoke-interface {v7, v8, v9}, Landroidx/compose/ui/graphics/drawscope/DrawContext;->setSize-uvyYCjk(J)V
|
||||
|
||||
sget-object p1, Lkotlin/u;->a:Lkotlin/u;
|
||||
sget-object p1, Lkotlin/u;->a:Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
return-object p1
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
|
||||
check-cast p1, Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;
|
||||
|
||||
invoke-virtual {p0, p1}, Lradiant/gestures/MiniPlayerTrackGestures$TextDraw;->invoke(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)Lkotlin/u;
|
||||
invoke-virtual {p0, p1}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$TextDraw;->invoke(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
move-result-object p1
|
||||
|
||||
+72
-72
@@ -1,4 +1,4 @@
|
||||
.class public final Lradiant/gestures/MiniPlayerTrackGestures;
|
||||
.class public final Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;
|
||||
.super Ljava/lang/Object;
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
move-result-object v0
|
||||
|
||||
sput-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
|
||||
sput-object v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -48,7 +48,7 @@
|
||||
.method public static animateReset()V
|
||||
.locals 7
|
||||
|
||||
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
sget-object v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
|
||||
if-eqz v0, :read_offset
|
||||
|
||||
@@ -56,10 +56,10 @@
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
sput-object v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
|
||||
:read_offset
|
||||
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
|
||||
sget-object v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
invoke-interface {v0}, Landroidx/compose/runtime/MutableFloatState;->getFloatValue()F
|
||||
|
||||
@@ -105,20 +105,20 @@
|
||||
|
||||
invoke-virtual {v1, v0}, Landroid/animation/ValueAnimator;->setInterpolator(Landroid/animation/TimeInterpolator;)V
|
||||
|
||||
new-instance v0, Lradiant/gestures/MiniPlayerTrackGestures$ResetAnimator;
|
||||
new-instance v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$ResetAnimator;
|
||||
|
||||
invoke-direct {v0}, Lradiant/gestures/MiniPlayerTrackGestures$ResetAnimator;-><init>()V
|
||||
invoke-direct {v0}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$ResetAnimator;-><init>()V
|
||||
|
||||
invoke-virtual {v1, v0}, Landroid/animation/ValueAnimator;->addUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)V
|
||||
|
||||
sput-object v1, Lradiant/gestures/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
sput-object v1, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
|
||||
invoke-virtual {v1}, Landroid/animation/ValueAnimator;->start()V
|
||||
|
||||
return-void
|
||||
|
||||
:snap_zero
|
||||
invoke-static {v3}, Lradiant/gestures/MiniPlayerTrackGestures;->setDragOffsetDirect(F)V
|
||||
invoke-static {v3}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->setDragOffsetDirect(F)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -126,21 +126,21 @@
|
||||
.method public static beginDrag(FF)V
|
||||
.locals 2
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->resetGestureLock()V
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->resetGestureLock()V
|
||||
|
||||
sput p0, Lradiant/gestures/MiniPlayerTrackGestures;->e:F
|
||||
sput p0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->e:F
|
||||
|
||||
sput p1, Lradiant/gestures/MiniPlayerTrackGestures;->f:F
|
||||
sput p1, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->f:F
|
||||
|
||||
const/4 v0, 0x1
|
||||
|
||||
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->g:Z
|
||||
sput-boolean v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->g:Z
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->h:Z
|
||||
sput-boolean v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->h:Z
|
||||
|
||||
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
sget-object v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
|
||||
if-eqz v0, :zero
|
||||
|
||||
@@ -148,12 +148,12 @@
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
sput-object v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
|
||||
:zero
|
||||
const/4 v0, 0x0
|
||||
|
||||
invoke-static {v0}, Lradiant/gestures/MiniPlayerTrackGestures;->setDragOffsetDirect(F)V
|
||||
invoke-static {v0}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->setDragOffsetDirect(F)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -163,11 +163,11 @@
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->g:Z
|
||||
sput-boolean v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->g:Z
|
||||
|
||||
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->h:Z
|
||||
sput-boolean v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->h:Z
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->animateReset()V
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->animateReset()V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -175,13 +175,13 @@
|
||||
.method public static clearResetAnimator(Landroid/animation/ValueAnimator;)V
|
||||
.locals 1
|
||||
|
||||
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
sget-object v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
|
||||
if-ne v0, p0, :done
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
sput-object v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
|
||||
:done
|
||||
return-void
|
||||
@@ -190,7 +190,7 @@
|
||||
.method public static finishDrag(FF)I
|
||||
.locals 5
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->isAnyDragging()Z
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->isAnyDragging()Z
|
||||
|
||||
move-result v0
|
||||
|
||||
@@ -198,17 +198,17 @@
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->g:Z
|
||||
sput-boolean v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->g:Z
|
||||
|
||||
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->h:Z
|
||||
sput-boolean v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->h:Z
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->animateReset()V
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->animateReset()V
|
||||
|
||||
return v0
|
||||
|
||||
:check_active
|
||||
|
||||
sget-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->g:Z
|
||||
sget-boolean v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->g:Z
|
||||
|
||||
if-nez v0, :active
|
||||
|
||||
@@ -219,26 +219,26 @@
|
||||
:active
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->g:Z
|
||||
sput-boolean v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->g:Z
|
||||
|
||||
sget-boolean v1, Lradiant/gestures/MiniPlayerTrackGestures;->h:Z
|
||||
sget-boolean v1, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->h:Z
|
||||
|
||||
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->h:Z
|
||||
sput-boolean v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->h:Z
|
||||
|
||||
sget v2, Lradiant/gestures/MiniPlayerTrackGestures;->e:F
|
||||
sget v2, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->e:F
|
||||
|
||||
sub-float/2addr p0, v2
|
||||
|
||||
sget v2, Lradiant/gestures/MiniPlayerTrackGestures;->f:F
|
||||
sget v2, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->f:F
|
||||
|
||||
sub-float/2addr p1, v2
|
||||
|
||||
if-eqz v1, :reset
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->suppressTapOpen()V
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->suppressTapOpen()V
|
||||
|
||||
:reset
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->animateReset()V
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->animateReset()V
|
||||
|
||||
invoke-static {p0}, Ljava/lang/Math;->abs(F)F
|
||||
|
||||
@@ -246,7 +246,7 @@
|
||||
|
||||
const/high16 v2, 0x42400000 # 48.0f -> at least 48dp horizontal swipe
|
||||
|
||||
invoke-static {v2}, Lradiant/gestures/MiniPlayerTrackGestures;->dp(F)F
|
||||
invoke-static {v2}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->dp(F)F
|
||||
|
||||
move-result v2
|
||||
|
||||
@@ -291,11 +291,11 @@
|
||||
.method public static moveDrag(FF)V
|
||||
.locals 6
|
||||
|
||||
sget-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->g:Z
|
||||
sget-boolean v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->g:Z
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->isAnyDragging()Z
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->isAnyDragging()Z
|
||||
|
||||
move-result v0
|
||||
|
||||
@@ -303,20 +303,20 @@
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->g:Z
|
||||
sput-boolean v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->g:Z
|
||||
|
||||
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->h:Z
|
||||
sput-boolean v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->h:Z
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->animateReset()V
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->animateReset()V
|
||||
|
||||
goto :done
|
||||
|
||||
:move_continue
|
||||
sget v0, Lradiant/gestures/MiniPlayerTrackGestures;->e:F
|
||||
sget v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->e:F
|
||||
|
||||
sub-float/2addr p0, v0
|
||||
|
||||
sget v0, Lradiant/gestures/MiniPlayerTrackGestures;->f:F
|
||||
sget v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->f:F
|
||||
|
||||
sub-float/2addr p1, v0
|
||||
|
||||
@@ -328,13 +328,13 @@
|
||||
|
||||
move-result v1
|
||||
|
||||
sget-boolean v2, Lradiant/gestures/MiniPlayerTrackGestures;->h:Z
|
||||
sget-boolean v2, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->h:Z
|
||||
|
||||
if-nez v2, :publish
|
||||
|
||||
const/high16 v2, 0x40c00000 # 6.0f dp dead zone
|
||||
|
||||
invoke-static {v2}, Lradiant/gestures/MiniPlayerTrackGestures;->dp(F)F
|
||||
invoke-static {v2}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->dp(F)F
|
||||
|
||||
move-result v2
|
||||
|
||||
@@ -356,7 +356,7 @@
|
||||
goto :done
|
||||
|
||||
:accept
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->lockHorizontalGesture()Z
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->lockHorizontalGesture()Z
|
||||
|
||||
move-result v2
|
||||
|
||||
@@ -364,16 +364,16 @@
|
||||
|
||||
const/4 v2, 0x1
|
||||
|
||||
sput-boolean v2, Lradiant/gestures/MiniPlayerTrackGestures;->h:Z
|
||||
sput-boolean v2, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->h:Z
|
||||
|
||||
:publish
|
||||
const/4 v2, 0x0
|
||||
|
||||
invoke-static {v2}, Lradiant/gestures/MiniPlayerGestures;->setSwipeFeedbackDirect(F)V
|
||||
invoke-static {v2}, Lradiant/gestures/miniplayer/MiniPlayerGestures;->setSwipeFeedbackDirect(F)V
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->suppressTapOpen()V
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->suppressTapOpen()V
|
||||
|
||||
invoke-static {p0}, Lradiant/gestures/MiniPlayerTrackGestures;->setDragOffset(F)V
|
||||
invoke-static {p0}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->setDragOffset(F)V
|
||||
|
||||
:done
|
||||
return-void
|
||||
@@ -381,11 +381,11 @@
|
||||
:cancel_locked
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->g:Z
|
||||
sput-boolean v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->g:Z
|
||||
|
||||
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->h:Z
|
||||
sput-boolean v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->h:Z
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->animateReset()V
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->animateReset()V
|
||||
|
||||
goto :done
|
||||
.end method
|
||||
@@ -417,9 +417,9 @@
|
||||
|
||||
move-result-object p0
|
||||
|
||||
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures$OffsetLayer;->INSTANCE:Lradiant/gestures/MiniPlayerTrackGestures$OffsetLayer;
|
||||
sget-object v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$OffsetLayer;->INSTANCE:Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$OffsetLayer;
|
||||
|
||||
invoke-static {p0, v0}, Landroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer(Landroidx/compose/ui/Modifier;Lam0/l;)Landroidx/compose/ui/Modifier;
|
||||
invoke-static {p0, v0}, Landroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer(Landroidx/compose/ui/Modifier;Lyl0/l;)Landroidx/compose/ui/Modifier; # MARKER: R8 Lyl0/l;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
@@ -429,9 +429,9 @@
|
||||
.method public static textFeedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
|
||||
.locals 1
|
||||
|
||||
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures$TextDraw;->INSTANCE:Lradiant/gestures/MiniPlayerTrackGestures$TextDraw; # text clip on right only
|
||||
sget-object v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$TextDraw;->INSTANCE:Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$TextDraw; # text clip on right only
|
||||
|
||||
invoke-static {p0, v0}, Landroidx/compose/ui/draw/DrawModifierKt;->drawWithContent(Landroidx/compose/ui/Modifier;Lam0/l;)Landroidx/compose/ui/Modifier;
|
||||
invoke-static {p0, v0}, Landroidx/compose/ui/draw/DrawModifierKt;->drawWithContent(Landroidx/compose/ui/Modifier;Lyl0/l;)Landroidx/compose/ui/Modifier; # MARKER: R8 Lyl0/l;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
@@ -441,7 +441,7 @@
|
||||
.method public static onRenderedItem(Ljava/lang/Object;)V
|
||||
.locals 2
|
||||
|
||||
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->d:Ljava/lang/Object;
|
||||
sget-object v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->d:Ljava/lang/Object;
|
||||
|
||||
if-eqz v0, :store_initial
|
||||
|
||||
@@ -451,14 +451,14 @@
|
||||
|
||||
if-nez v1, :done
|
||||
|
||||
sput-object p0, Lradiant/gestures/MiniPlayerTrackGestures;->d:Ljava/lang/Object;
|
||||
sput-object p0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->d:Ljava/lang/Object;
|
||||
|
||||
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->animateReset()V
|
||||
invoke-static {}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->animateReset()V
|
||||
|
||||
return-void
|
||||
|
||||
:store_initial
|
||||
sput-object p0, Lradiant/gestures/MiniPlayerTrackGestures;->d:Ljava/lang/Object;
|
||||
sput-object p0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->d:Ljava/lang/Object;
|
||||
|
||||
:done
|
||||
return-void
|
||||
@@ -467,7 +467,7 @@
|
||||
.method public static consumeTapOpenSuppression()Z
|
||||
.locals 5
|
||||
|
||||
sget-wide v0, Lradiant/gestures/MiniPlayerTrackGestures;->a:J
|
||||
sget-wide v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->a:J
|
||||
|
||||
const-wide/16 v2, 0x0
|
||||
|
||||
@@ -480,7 +480,7 @@
|
||||
return v0
|
||||
|
||||
:check_time
|
||||
sput-wide v2, Lradiant/gestures/MiniPlayerTrackGestures;->a:J
|
||||
sput-wide v2, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->a:J
|
||||
|
||||
invoke-static {}, Landroid/os/SystemClock;->uptimeMillis()J
|
||||
|
||||
@@ -511,7 +511,7 @@
|
||||
|
||||
add-long/2addr v0, v2
|
||||
|
||||
sput-wide v0, Lradiant/gestures/MiniPlayerTrackGestures;->a:J
|
||||
sput-wide v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->a:J
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -519,7 +519,7 @@
|
||||
.method public static setDragOffset(F)V
|
||||
.locals 5
|
||||
|
||||
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
sget-object v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
|
||||
if-eqz v0, :rubber_band
|
||||
|
||||
@@ -527,7 +527,7 @@
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
sput-object v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
|
||||
:rubber_band
|
||||
invoke-static {p0}, Ljava/lang/Math;->abs(F)F
|
||||
@@ -536,7 +536,7 @@
|
||||
|
||||
const/high16 v1, 0x42800000 # 64.0f dp free travel
|
||||
|
||||
invoke-static {v1}, Lradiant/gestures/MiniPlayerTrackGestures;->dp(F)F
|
||||
invoke-static {v1}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->dp(F)F
|
||||
|
||||
move-result v1
|
||||
|
||||
@@ -575,7 +575,7 @@
|
||||
|
||||
|
||||
:publish
|
||||
invoke-static {p0}, Lradiant/gestures/MiniPlayerTrackGestures;->setDragOffsetDirect(F)V
|
||||
invoke-static {p0}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->setDragOffsetDirect(F)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -583,21 +583,21 @@
|
||||
.method public static setDragOffsetDirect(F)V
|
||||
.locals 1
|
||||
|
||||
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
|
||||
sget-object v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
invoke-interface {v0, p0}, Landroidx/compose/runtime/MutableFloatState;->setFloatValue(F)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static trackModifier(Landroidx/compose/ui/Modifier;Lam0/l;)Landroidx/compose/ui/Modifier;
|
||||
.method public static trackModifier(Landroidx/compose/ui/Modifier;Lyl0/l;)Landroidx/compose/ui/Modifier; # MARKER: R8 Lyl0/l;
|
||||
.locals 1
|
||||
|
||||
new-instance v0, Lradiant/gestures/MiniPlayerTrackGestures$Gesture;
|
||||
new-instance v0, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$Gesture;
|
||||
|
||||
invoke-direct {v0, p1}, Lradiant/gestures/MiniPlayerTrackGestures$Gesture;-><init>(Lam0/l;)V
|
||||
invoke-direct {v0, p1}, Lradiant/gestures/miniplayer/MiniPlayerTrackGestures$Gesture;-><init>(Lyl0/l;)V # MARKER: R8 Lyl0/l;
|
||||
|
||||
invoke-static {p0, v0}, Landroidx/compose/ui/input/pointer/PointerInteropFilter_androidKt;->motionEventSpy(Landroidx/compose/ui/Modifier;Lam0/l;)Landroidx/compose/ui/Modifier;
|
||||
invoke-static {p0, v0}, Landroidx/compose/ui/input/pointer/PointerInteropFilter_androidKt;->motionEventSpy(Landroidx/compose/ui/Modifier;Lyl0/l;)Landroidx/compose/ui/Modifier; # MARKER: R8 Lyl0/l;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
@@ -0,0 +1,217 @@
|
||||
.class public final Lradiant/gestures/queue/AlbumItemQueueAction;
|
||||
.super Ljava/lang/Object;
|
||||
.source "AlbumItemQueueAction.smali"
|
||||
|
||||
# interfaces
|
||||
.implements Lradiant/gestures/queue/ComposeSwipeAction;
|
||||
|
||||
|
||||
# instance fields
|
||||
.field private final callback:Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$a; # MARKER: R8 Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$a;
|
||||
|
||||
.field private context:Landroid/content/Context;
|
||||
|
||||
.field private final mediaItemId:I
|
||||
|
||||
.field private final moduleId:Ljava/lang/String;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>(Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a;)V # MARKER: R8 Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a;
|
||||
.locals 2
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
iget-object v0, p1, Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a;->a:Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$a; # MARKER: R8 Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a; Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$a; a
|
||||
|
||||
iput-object v0, p0, Lradiant/gestures/queue/AlbumItemQueueAction;->callback:Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$a; # MARKER: R8 Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$a;
|
||||
|
||||
iget-object v0, p1, Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a;->c:Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$b; # MARKER: R8 Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a; Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$b; c
|
||||
|
||||
iget v1, v0, Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$b;->s:I # MARKER: R8 Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$b; r
|
||||
|
||||
iput v1, p0, Lradiant/gestures/queue/AlbumItemQueueAction;->mediaItemId:I
|
||||
|
||||
iget-object v0, v0, Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$b;->t:Ljava/lang/String; # MARKER: R8 Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$b; s
|
||||
|
||||
iput-object v0, p0, Lradiant/gestures/queue/AlbumItemQueueAction;->moduleId:Ljava/lang/String;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public invoke(I)Ljava/lang/Object;
|
||||
.locals 10
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/queue/AlbumItemQueueAction;->callback:Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$a; # MARKER: R8 Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$a;
|
||||
|
||||
iget v1, p0, Lradiant/gestures/queue/AlbumItemQueueAction;->mediaItemId:I
|
||||
|
||||
iget-object v2, p0, Lradiant/gestures/queue/AlbumItemQueueAction;->moduleId:Ljava/lang/String;
|
||||
|
||||
const/4 v3, 0x3
|
||||
|
||||
if-eq p1, v3, :active_queue
|
||||
|
||||
invoke-static {}, Lradiant/gestures/queue/QueueExecutor;->hasActiveQueue()Z
|
||||
|
||||
move-result v3
|
||||
|
||||
if-nez v3, :active_queue
|
||||
|
||||
invoke-interface {v0, v1, v2}, Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$a;->g(ILjava/lang/String;)V # MARKER: R8 Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/b$a$a; g
|
||||
|
||||
goto :done
|
||||
|
||||
:active_queue
|
||||
iget-object v3, p0, Lradiant/gestures/queue/AlbumItemQueueAction;->context:Landroid/content/Context;
|
||||
|
||||
if-eqz v3, :done
|
||||
|
||||
instance-of v4, v0, Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/n; # MARKER: R8 Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/n;
|
||||
|
||||
if-eqz v4, :done
|
||||
|
||||
check-cast v0, Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/n; # MARKER: R8 Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/n;
|
||||
|
||||
invoke-virtual {v0, v2}, Lk5/f;->l(Ljava/lang/String;)Lcom/aspiro/wamp/dynamicpages/data/model/Module; # MARKER: R8 Lk5/f; l
|
||||
|
||||
move-result-object v4
|
||||
|
||||
instance-of v5, v4, Lcom/aspiro/wamp/dynamicpages/data/model/collection/AlbumItemCollectionModule;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
check-cast v4, Lcom/aspiro/wamp/dynamicpages/data/model/collection/AlbumItemCollectionModule;
|
||||
|
||||
invoke-virtual {v4}, Lcom/aspiro/wamp/dynamicpages/data/model/collection/AlbumItemCollectionModule;->getMediaItemParents()Ljava/util/List;
|
||||
|
||||
move-result-object v5
|
||||
|
||||
invoke-interface {v5}, Ljava/lang/Iterable;->iterator()Ljava/util/Iterator;
|
||||
|
||||
move-result-object v5
|
||||
|
||||
:find_item
|
||||
invoke-interface {v5}, Ljava/util/Iterator;->hasNext()Z
|
||||
|
||||
move-result v6
|
||||
|
||||
if-eqz v6, :done
|
||||
|
||||
invoke-interface {v5}, Ljava/util/Iterator;->next()Ljava/lang/Object;
|
||||
|
||||
move-result-object v6
|
||||
|
||||
check-cast v6, Lcom/aspiro/wamp/model/MediaItemParent;
|
||||
|
||||
invoke-virtual {v6}, Lcom/aspiro/wamp/model/MediaItemParent;->getMediaItem()Lcom/aspiro/wamp/model/MediaItem;
|
||||
|
||||
move-result-object v7
|
||||
|
||||
if-eqz v7, :find_item
|
||||
|
||||
invoke-virtual {v7}, Lcom/aspiro/wamp/model/MediaItem;->getId()I
|
||||
|
||||
move-result v8
|
||||
|
||||
if-ne v8, v1, :find_item
|
||||
|
||||
instance-of v8, v7, Lcom/aspiro/wamp/model/Track;
|
||||
|
||||
if-eqz v8, :done
|
||||
|
||||
check-cast v7, Lcom/aspiro/wamp/model/Track;
|
||||
|
||||
iget-object v8, v0, Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/n;->h:Lcom/aspiro/wamp/model/AvailabilityInteractor; # MARKER: R8 Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/n; h
|
||||
|
||||
invoke-interface {v8, v7}, Lcom/aspiro/wamp/model/AvailabilityInteractor;->getAvailability(Lcom/aspiro/wamp/model/MediaItem;)Lcom/aspiro/wamp/model/Availability$MediaItem;
|
||||
|
||||
move-result-object v8
|
||||
|
||||
invoke-virtual {v8}, Lcom/aspiro/wamp/model/Availability$MediaItem;->isAvailable()Z
|
||||
|
||||
move-result v8
|
||||
|
||||
if-eqz v8, :done
|
||||
|
||||
new-instance v5, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;
|
||||
|
||||
invoke-virtual {v4}, Lcom/aspiro/wamp/dynamicpages/data/model/Module;->getPageId()Ljava/lang/String;
|
||||
|
||||
move-result-object v6
|
||||
|
||||
invoke-virtual {v4}, Lcom/aspiro/wamp/dynamicpages/data/model/Module;->getId()Ljava/lang/String;
|
||||
|
||||
move-result-object v8
|
||||
|
||||
invoke-virtual {v4}, Lcom/aspiro/wamp/dynamicpages/data/model/Module;->getPosition()I
|
||||
|
||||
move-result v9
|
||||
|
||||
invoke-static {v9}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
|
||||
|
||||
move-result-object v9
|
||||
|
||||
invoke-direct {v5, v6, v8, v9}, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
|
||||
|
||||
invoke-virtual {v7}, Lcom/aspiro/wamp/model/MediaItem;->getAlbum()Lcom/aspiro/wamp/model/Album;
|
||||
|
||||
move-result-object v6
|
||||
|
||||
if-eqz v6, :done
|
||||
|
||||
iget-object v8, v0, Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/n;->j:Lcom/tidal/android/navigation/NavigationInfo; # MARKER: R8 Lcom/aspiro/wamp/dynamicpages/modules/albumitemcollection/n; j
|
||||
|
||||
invoke-static {v6, v8}, Lcom/aspiro/wamp/playqueue/source/model/b;->c(Lcom/aspiro/wamp/model/Album;Lcom/tidal/android/navigation/NavigationInfo;)Lcom/aspiro/wamp/playqueue/source/model/AlbumSource; # MARKER: R8 Lcom/aspiro/wamp/playqueue/source/model/b; c
|
||||
|
||||
move-result-object v6
|
||||
|
||||
invoke-virtual {v6, v7}, Lcom/aspiro/wamp/playqueue/source/model/Source;->addSourceItem(Lcom/aspiro/wamp/model/MediaItem;)V
|
||||
|
||||
const/4 v8, 0x1
|
||||
|
||||
if-ne p1, v8, :check_add_to_playlist
|
||||
|
||||
invoke-static {v3, v7, v5, v6}, Lradiant/gestures/queue/QueueExecutor;->playNextTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z
|
||||
|
||||
goto :done
|
||||
|
||||
:check_add_to_playlist
|
||||
const/4 v8, 0x3
|
||||
|
||||
if-ne p1, v8, :append_track
|
||||
|
||||
invoke-static {v3, v7, v5, v6}, Lradiant/gestures/queue/QueueExecutor;->addToPlaylistTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)V
|
||||
|
||||
goto :done
|
||||
|
||||
:append_track
|
||||
invoke-static {v3, v7, v5, v6}, Lradiant/gestures/queue/QueueExecutor;->track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z
|
||||
|
||||
:done
|
||||
sget-object v0, Lkotlin/u;->a:Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
|
||||
.method public invoke()Ljava/lang/Object;
|
||||
.locals 1
|
||||
|
||||
const/4 v0, 0x2
|
||||
|
||||
invoke-virtual {p0, v0}, Lradiant/gestures/queue/AlbumItemQueueAction;->invoke(I)Ljava/lang/Object;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
|
||||
.method public setContext(Landroid/content/Context;)V
|
||||
.locals 0
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/queue/AlbumItemQueueAction;->context:Landroid/content/Context;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -0,0 +1,181 @@
|
||||
.class public final Lradiant/gestures/queue/ArtistTrackCreditsQueue;
|
||||
.super Ljava/lang/Object;
|
||||
.source "ArtistTrackCreditsQueue.smali"
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public static handle(Lcom/tidal/android/dynamicpages/ui/modules/artisttrackcredits/ArtistTrackCreditsModuleManager;Lradiant/gestures/queue/ArtistTrackCreditsQueueEvent;)V
|
||||
.locals 11
|
||||
|
||||
if-eqz p0, :done
|
||||
|
||||
if-eqz p1, :done
|
||||
|
||||
iget-object v0, p1, Lradiant/gestures/queue/ArtistTrackCreditsQueueEvent;->pageId:Ljava/lang/String;
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
invoke-virtual {v0}, Ljava/lang/String;->length()I
|
||||
|
||||
move-result v1
|
||||
|
||||
if-lez v1, :done
|
||||
|
||||
iget-object v1, p1, Lradiant/gestures/queue/ArtistTrackCreditsQueueEvent;->moduleUuid:Ljava/lang/String;
|
||||
|
||||
if-eqz v1, :done
|
||||
|
||||
invoke-virtual {v1}, Ljava/lang/String;->length()I
|
||||
|
||||
move-result v2
|
||||
|
||||
if-lez v2, :done
|
||||
|
||||
iget-wide v2, p1, Lradiant/gestures/queue/ArtistTrackCreditsQueueEvent;->trackId:J
|
||||
|
||||
const-wide/16 v4, 0x0
|
||||
|
||||
cmp-long v4, v2, v4
|
||||
|
||||
if-lez v4, :done
|
||||
|
||||
invoke-virtual {p0, v1}, Lq50/c;->c(Ljava/lang/String;)Li50/j; # MARKER: R8 Lq50/c; Li50/j; c
|
||||
|
||||
move-result-object v4
|
||||
|
||||
instance-of v5, v4, Li50/d; # MARKER: R8 Li50/d;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
check-cast v4, Li50/d; # MARKER: R8 Li50/d;
|
||||
|
||||
iget-object v5, v4, Li50/d;->b:Ljava/lang/String; # MARKER: R8 Li50/d; b
|
||||
|
||||
invoke-virtual {v1, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
|
||||
|
||||
move-result v1
|
||||
|
||||
if-eqz v1, :done
|
||||
|
||||
iget-object v1, v4, Li50/d;->f:Ljava/util/ArrayList; # MARKER: R8 Li50/d; f
|
||||
|
||||
if-eqz v1, :done
|
||||
|
||||
invoke-virtual {v1}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
:find_track
|
||||
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
|
||||
|
||||
move-result v5
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
|
||||
|
||||
move-result-object v5
|
||||
|
||||
instance-of v6, v5, Li50/u$b; # MARKER: R8 Li50/u$b;
|
||||
|
||||
if-eqz v6, :find_track
|
||||
|
||||
check-cast v5, Li50/u$b; # MARKER: R8 Li50/u$b;
|
||||
|
||||
iget-object v5, v5, Li50/u$b;->a:Ln30/o; # MARKER: R8 Li50/u$b; Ln30/o; a
|
||||
|
||||
instance-of v6, v5, Ln30/p; # MARKER: R8 Ln30/p;
|
||||
|
||||
if-eqz v6, :find_track
|
||||
|
||||
check-cast v5, Ln30/p; # MARKER: R8 Ln30/p;
|
||||
|
||||
iget-wide v6, v5, Ln30/p;->a:J # MARKER: R8 Ln30/p; a
|
||||
|
||||
cmp-long v6, v6, v2
|
||||
|
||||
if-nez v6, :find_track
|
||||
|
||||
iget-object v1, p0, Lcom/tidal/android/dynamicpages/ui/modules/artisttrackcredits/ArtistTrackCreditsModuleManager;->b:Lcom/tidal/android/dynamicpages/ui/b; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/b; b
|
||||
|
||||
instance-of v2, v1, Lcom/tidal/android/dynamicpages/ui/c; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c;
|
||||
|
||||
if-eqz v2, :done
|
||||
|
||||
check-cast v1, Lcom/tidal/android/dynamicpages/ui/c; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c;
|
||||
|
||||
iget-object v6, v1, Lcom/tidal/android/dynamicpages/ui/c;->b:Lcom/tidal/android/navigation/NavigationInfo; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c; b
|
||||
|
||||
if-eqz v6, :done
|
||||
|
||||
iget-object v1, p1, Lradiant/gestures/queue/ArtistTrackCreditsQueueEvent;->context:Landroid/content/Context;
|
||||
|
||||
if-eqz v1, :done
|
||||
|
||||
invoke-static {v5}, Lae0/i;->c(Ln30/p;)Lcom/aspiro/wamp/model/Track; # MARKER: R8 Lae0/i; Ln30/p; a
|
||||
|
||||
move-result-object v7
|
||||
|
||||
if-eqz v7, :done
|
||||
|
||||
iget-object v2, v4, Li50/d;->a:Ljava/lang/String; # MARKER: R8 Li50/d; a
|
||||
|
||||
if-eqz v2, :done
|
||||
|
||||
new-instance v8, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;
|
||||
|
||||
iget v3, v4, Li50/d;->e:I # MARKER: R8 Li50/d; e
|
||||
|
||||
invoke-static {v3}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
|
||||
|
||||
move-result-object v3
|
||||
|
||||
invoke-direct {v8, v0, v2, v3}, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
|
||||
|
||||
iget-wide v2, p1, Lradiant/gestures/queue/ArtistTrackCreditsQueueEvent;->trackId:J
|
||||
|
||||
invoke-static {v2, v3}, Ljava/lang/String;->valueOf(J)Ljava/lang/String;
|
||||
|
||||
move-result-object v2
|
||||
|
||||
iget-object v3, v4, Li50/d;->c:Ljava/lang/String; # MARKER: R8 Li50/d; c
|
||||
|
||||
iget-object v10, v4, Li50/d;->g:Ljava/lang/String; # MARKER: R8 Li50/d; g
|
||||
|
||||
invoke-static {v10}, Lcom/aspiro/wamp/playqueue/source/model/ItemSource$NavigationType$a;->a(Ljava/lang/String;)Lcom/aspiro/wamp/playqueue/source/model/ItemSource$NavigationType; # MARKER: R8 a
|
||||
|
||||
move-result-object v4
|
||||
|
||||
invoke-static {v2, v3, v6, v4}, Lcom/aspiro/wamp/playqueue/source/model/b;->j(Ljava/lang/String;Ljava/lang/String;Lcom/tidal/android/navigation/NavigationInfo;Lcom/aspiro/wamp/playqueue/source/model/ItemSource$NavigationType;)Lcom/aspiro/wamp/playqueue/source/model/ItemSource; # MARKER: R8 Lcom/aspiro/wamp/playqueue/source/model/b; j
|
||||
|
||||
move-result-object v9
|
||||
|
||||
if-eqz v9, :done
|
||||
|
||||
invoke-virtual {v9, v7}, Lcom/aspiro/wamp/playqueue/source/model/Source;->addSourceItem(Lcom/aspiro/wamp/model/MediaItem;)V
|
||||
|
||||
iget v0, p1, Lradiant/gestures/queue/ArtistTrackCreditsQueueEvent;->action:I
|
||||
|
||||
const/4 v2, 0x1
|
||||
|
||||
if-ne v0, v2, :check_add_to_playlist
|
||||
|
||||
invoke-static {v1, v7, v8, v9}, Lradiant/gestures/queue/QueueExecutor;->playNextTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z
|
||||
|
||||
goto :done
|
||||
|
||||
:check_add_to_playlist
|
||||
const/4 v2, 0x3
|
||||
|
||||
if-ne v0, v2, :append
|
||||
|
||||
invoke-static {v1, v7, v8, v9}, Lradiant/gestures/queue/QueueExecutor;->addToPlaylistTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)V
|
||||
|
||||
goto :done
|
||||
|
||||
:append
|
||||
invoke-static {v1, v7, v8, v9}, Lradiant/gestures/queue/QueueExecutor;->track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z
|
||||
|
||||
:done
|
||||
return-void
|
||||
.end method
|
||||
@@ -0,0 +1,113 @@
|
||||
.class public final Lradiant/gestures/queue/ArtistTrackCreditsQueueAction;
|
||||
.super Ljava/lang/Object;
|
||||
.source "ArtistTrackCreditsQueueAction.smali"
|
||||
|
||||
# interfaces
|
||||
.implements Lradiant/gestures/queue/ComposeSwipeAction;
|
||||
|
||||
|
||||
# instance fields
|
||||
.field private final callback:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
.field private context:Landroid/content/Context;
|
||||
|
||||
.field private final moduleUuid:Ljava/lang/String;
|
||||
|
||||
.field private final pageId:Ljava/lang/String;
|
||||
|
||||
.field private final trackId:J
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>(Lyl0/l;Ljava/lang/String;Ljava/lang/String;Ls30/e$e;)V # MARKER: R8 Lyl0/l; Ls30/e$e;
|
||||
.locals 2
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/queue/ArtistTrackCreditsQueueAction;->callback:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
iput-object p2, p0, Lradiant/gestures/queue/ArtistTrackCreditsQueueAction;->pageId:Ljava/lang/String;
|
||||
|
||||
iput-object p3, p0, Lradiant/gestures/queue/ArtistTrackCreditsQueueAction;->moduleUuid:Ljava/lang/String;
|
||||
|
||||
iget-wide v0, p4, Ls30/e$e;->a:J # MARKER: R8 Ls30/e$e; a
|
||||
|
||||
iput-wide v0, p0, Lradiant/gestures/queue/ArtistTrackCreditsQueueAction;->trackId:J
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public invoke(I)Ljava/lang/Object;
|
||||
.locals 8
|
||||
|
||||
iget-wide v1, p0, Lradiant/gestures/queue/ArtistTrackCreditsQueueAction;->trackId:J
|
||||
|
||||
const/4 v0, 0x3
|
||||
|
||||
if-eq p1, v0, :active_queue
|
||||
|
||||
invoke-static {}, Lradiant/gestures/queue/QueueExecutor;->hasActiveQueue()Z
|
||||
|
||||
move-result v0
|
||||
|
||||
if-nez v0, :active_queue
|
||||
|
||||
new-instance v0, Lcom/tidal/android/dynamicpages/ui/modules/artisttrackcredits/b$a; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/modules/artisttrackcredits/b$a;
|
||||
|
||||
iget-object v3, p0, Lradiant/gestures/queue/ArtistTrackCreditsQueueAction;->pageId:Ljava/lang/String;
|
||||
|
||||
iget-object v4, p0, Lradiant/gestures/queue/ArtistTrackCreditsQueueAction;->moduleUuid:Ljava/lang/String;
|
||||
|
||||
invoke-direct {v0, v3, v4, v1, v2}, Lcom/tidal/android/dynamicpages/ui/modules/artisttrackcredits/b$a;-><init>(Ljava/lang/String;Ljava/lang/String;J)V # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/modules/artisttrackcredits/b$a;
|
||||
|
||||
goto :emit
|
||||
|
||||
:active_queue
|
||||
new-instance v0, Lradiant/gestures/queue/ArtistTrackCreditsQueueEvent;
|
||||
|
||||
iget-object v1, p0, Lradiant/gestures/queue/ArtistTrackCreditsQueueAction;->context:Landroid/content/Context;
|
||||
|
||||
if-eqz v1, :done
|
||||
|
||||
iget-object v2, p0, Lradiant/gestures/queue/ArtistTrackCreditsQueueAction;->pageId:Ljava/lang/String;
|
||||
|
||||
iget-object v3, p0, Lradiant/gestures/queue/ArtistTrackCreditsQueueAction;->moduleUuid:Ljava/lang/String;
|
||||
|
||||
iget-wide v4, p0, Lradiant/gestures/queue/ArtistTrackCreditsQueueAction;->trackId:J
|
||||
|
||||
move v6, p1
|
||||
|
||||
invoke-direct/range {v0 .. v6}, Lradiant/gestures/queue/ArtistTrackCreditsQueueEvent;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;JI)V
|
||||
|
||||
:emit
|
||||
iget-object v7, p0, Lradiant/gestures/queue/ArtistTrackCreditsQueueAction;->callback:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
invoke-interface {v7, v0}, Lyl0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; # MARKER: R8 Lyl0/l;
|
||||
|
||||
:done
|
||||
sget-object v0, Lkotlin/u;->a:Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
|
||||
.method public invoke()Ljava/lang/Object;
|
||||
.locals 1
|
||||
|
||||
const/4 v0, 0x2
|
||||
|
||||
invoke-virtual {p0, v0}, Lradiant/gestures/queue/ArtistTrackCreditsQueueAction;->invoke(I)Ljava/lang/Object;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
|
||||
.method public setContext(Landroid/content/Context;)V
|
||||
.locals 0
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/queue/ArtistTrackCreditsQueueAction;->context:Landroid/content/Context;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -0,0 +1,38 @@
|
||||
.class public final Lradiant/gestures/queue/ArtistTrackCreditsQueueEvent;
|
||||
.super Ljava/lang/Object;
|
||||
.source "ArtistTrackCreditsQueueEvent.smali"
|
||||
|
||||
# interfaces
|
||||
.implements Lcom/tidal/android/dynamicpages/ui/modules/artisttrackcredits/b; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/modules/artisttrackcredits/b;
|
||||
|
||||
|
||||
# instance fields
|
||||
.field public final action:I
|
||||
|
||||
.field public final context:Landroid/content/Context;
|
||||
|
||||
.field public final moduleUuid:Ljava/lang/String;
|
||||
|
||||
.field public final pageId:Ljava/lang/String;
|
||||
|
||||
.field public final trackId:J
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;JI)V
|
||||
.locals 0
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/queue/ArtistTrackCreditsQueueEvent;->context:Landroid/content/Context;
|
||||
|
||||
iput-object p2, p0, Lradiant/gestures/queue/ArtistTrackCreditsQueueEvent;->pageId:Ljava/lang/String;
|
||||
|
||||
iput-object p3, p0, Lradiant/gestures/queue/ArtistTrackCreditsQueueEvent;->moduleUuid:Ljava/lang/String;
|
||||
|
||||
iput-wide p4, p0, Lradiant/gestures/queue/ArtistTrackCreditsQueueEvent;->trackId:J
|
||||
|
||||
iput p6, p0, Lradiant/gestures/queue/ArtistTrackCreditsQueueEvent;->action:I
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -0,0 +1,281 @@
|
||||
.class public final Lradiant/gestures/queue/CompactGridMediaQueueAction;
|
||||
.super Ljava/lang/Object;
|
||||
.source "CompactGridMediaQueueAction.smali"
|
||||
|
||||
# interfaces
|
||||
.implements Lradiant/gestures/queue/ComposeSwipeAction;
|
||||
|
||||
|
||||
# instance fields
|
||||
.field private final callback:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
.field private context:Landroid/content/Context;
|
||||
|
||||
.field private final itemId:Ljava/lang/String;
|
||||
|
||||
.field private final mediaType:I
|
||||
|
||||
.field private final moduleUuid:Ljava/lang/String;
|
||||
|
||||
.field private final pageId:Ljava/lang/String;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>(Lyl0/l;Ljava/lang/String;Ljava/lang/String;Ls30/e;)V # MARKER: R8 Lyl0/l; Ls30/e;
|
||||
.locals 3
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/queue/CompactGridMediaQueueAction;->callback:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
iput-object p2, p0, Lradiant/gestures/queue/CompactGridMediaQueueAction;->pageId:Ljava/lang/String;
|
||||
|
||||
iput-object p3, p0, Lradiant/gestures/queue/CompactGridMediaQueueAction;->moduleUuid:Ljava/lang/String;
|
||||
|
||||
instance-of v0, p4, Ls30/e$a; # MARKER: R8 Ls30/e$a;
|
||||
|
||||
if-eqz v0, :mix
|
||||
|
||||
check-cast p4, Ls30/e$a; # MARKER: R8 Ls30/e$a;
|
||||
|
||||
iget-wide v0, p4, Ls30/e$a;->a:J # MARKER: R8 Ls30/e$a; a
|
||||
|
||||
invoke-static {v0, v1}, Ljava/lang/String;->valueOf(J)Ljava/lang/String;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
goto :store
|
||||
|
||||
:mix
|
||||
instance-of v0, p4, Ls30/e$c; # MARKER: R8 Ls30/e$c;
|
||||
|
||||
if-eqz v0, :playlist
|
||||
|
||||
check-cast p4, Ls30/e$c; # MARKER: R8 Ls30/e$c;
|
||||
|
||||
iget-object v0, p4, Ls30/e$c;->a:Ljava/lang/String; # MARKER: R8 Ls30/e$c; a
|
||||
|
||||
const/4 v1, 0x2
|
||||
|
||||
goto :store
|
||||
|
||||
:playlist
|
||||
instance-of v0, p4, Ls30/e$d; # MARKER: R8 Ls30/e$d;
|
||||
|
||||
if-eqz v0, :track
|
||||
|
||||
check-cast p4, Ls30/e$d; # MARKER: R8 Ls30/e$d;
|
||||
|
||||
iget-object v0, p4, Ls30/e$d;->a:Ljava/lang/String; # MARKER: R8 Ls30/e$d; a
|
||||
|
||||
const/4 v1, 0x3
|
||||
|
||||
goto :store
|
||||
|
||||
:track
|
||||
instance-of v0, p4, Ls30/e$e; # MARKER: R8 Ls30/e$e;
|
||||
|
||||
if-eqz v0, :unsupported
|
||||
|
||||
check-cast p4, Ls30/e$e; # MARKER: R8 Ls30/e$e;
|
||||
|
||||
iget-wide v0, p4, Ls30/e$e;->a:J # MARKER: R8 Ls30/e$e; a
|
||||
|
||||
invoke-static {v0, v1}, Ljava/lang/String;->valueOf(J)Ljava/lang/String;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
const/4 v1, 0x4
|
||||
|
||||
goto :store
|
||||
|
||||
:unsupported
|
||||
const/4 v0, 0x0
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
:store
|
||||
iput-object v0, p0, Lradiant/gestures/queue/CompactGridMediaQueueAction;->itemId:Ljava/lang/String;
|
||||
|
||||
iput v1, p0, Lradiant/gestures/queue/CompactGridMediaQueueAction;->mediaType:I
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static isEligible(Ls30/e;)Z # MARKER: R8 Ls30/e;
|
||||
.locals 1
|
||||
|
||||
instance-of v0, p0, Ls30/e$a; # MARKER: R8 Ls30/e$a;
|
||||
|
||||
if-eqz v0, :mix
|
||||
|
||||
check-cast p0, Ls30/e$a; # MARKER: R8 Ls30/e$a;
|
||||
|
||||
iget-boolean p0, p0, Ls30/e$a;->e:Z # MARKER: R8 Ls30/e$a; e
|
||||
|
||||
return p0
|
||||
|
||||
:mix
|
||||
instance-of v0, p0, Ls30/e$c; # MARKER: R8 Ls30/e$c;
|
||||
|
||||
if-eqz v0, :playlist
|
||||
|
||||
check-cast p0, Ls30/e$c; # MARKER: R8 Ls30/e$c;
|
||||
|
||||
iget-boolean p0, p0, Ls30/e$c;->h:Z # MARKER: R8 Ls30/e$c; h
|
||||
|
||||
return p0
|
||||
|
||||
:playlist
|
||||
instance-of v0, p0, Ls30/e$d; # MARKER: R8 Ls30/e$d;
|
||||
|
||||
if-eqz v0, :track
|
||||
|
||||
check-cast p0, Ls30/e$d; # MARKER: R8 Ls30/e$d;
|
||||
|
||||
iget-boolean p0, p0, Ls30/e$d;->g:Z # MARKER: R8 Ls30/e$d; g
|
||||
|
||||
return p0
|
||||
|
||||
:track
|
||||
instance-of v0, p0, Ls30/e$e; # MARKER: R8 Ls30/e$e;
|
||||
|
||||
if-eqz v0, :invalid
|
||||
|
||||
check-cast p0, Ls30/e$e; # MARKER: R8 Ls30/e$e;
|
||||
|
||||
iget-boolean p0, p0, Ls30/e$e;->j:Z # MARKER: R8 Ls30/e$e; j
|
||||
|
||||
return p0
|
||||
|
||||
:invalid
|
||||
const/4 p0, 0x0
|
||||
|
||||
return p0
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public invoke(I)Ljava/lang/Object;
|
||||
.locals 8
|
||||
|
||||
iget-object v7, p0, Lradiant/gestures/queue/CompactGridMediaQueueAction;->callback:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
if-eqz v7, :done
|
||||
|
||||
iget-object v4, p0, Lradiant/gestures/queue/CompactGridMediaQueueAction;->itemId:Ljava/lang/String;
|
||||
|
||||
if-eqz v4, :done
|
||||
|
||||
iget v5, p0, Lradiant/gestures/queue/CompactGridMediaQueueAction;->mediaType:I
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-eq p1, v1, :queue_event
|
||||
|
||||
const/4 v1, 0x4
|
||||
|
||||
if-ne v5, v1, :queue_event
|
||||
|
||||
invoke-static {}, Lradiant/gestures/queue/QueueExecutor;->hasActiveQueue()Z
|
||||
|
||||
move-result v1
|
||||
|
||||
if-nez v1, :queue_event
|
||||
|
||||
move-object v1, v4
|
||||
|
||||
goto :emit
|
||||
|
||||
:queue_event
|
||||
iget-object v1, p0, Lradiant/gestures/queue/CompactGridMediaQueueAction;->context:Landroid/content/Context;
|
||||
|
||||
if-eqz v1, :done
|
||||
|
||||
new-instance v0, Lradiant/gestures/queue/DynamicMediaQueueEvent;
|
||||
|
||||
iget-object v2, p0, Lradiant/gestures/queue/CompactGridMediaQueueAction;->pageId:Ljava/lang/String;
|
||||
|
||||
iget-object v3, p0, Lradiant/gestures/queue/CompactGridMediaQueueAction;->moduleUuid:Ljava/lang/String;
|
||||
|
||||
move v6, p1
|
||||
|
||||
invoke-direct/range {v0 .. v6}, Lradiant/gestures/queue/DynamicMediaQueueEvent;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V
|
||||
|
||||
move-object v1, v0
|
||||
|
||||
:emit
|
||||
invoke-interface {v7, v1}, Lyl0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; # MARKER: R8 Lyl0/l;
|
||||
|
||||
:done
|
||||
sget-object v0, Lkotlin/u;->a:Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
|
||||
.method public invoke()Ljava/lang/Object;
|
||||
.locals 1
|
||||
|
||||
const/4 v0, 0x2
|
||||
|
||||
invoke-virtual {p0, v0}, Lradiant/gestures/queue/CompactGridMediaQueueAction;->invoke(I)Ljava/lang/Object;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
|
||||
.method public setContext(Landroid/content/Context;)V
|
||||
.locals 0
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/queue/CompactGridMediaQueueAction;->context:Landroid/content/Context;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public stableKey()Ljava/lang/String;
|
||||
.locals 3
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/queue/CompactGridMediaQueueAction;->itemId:Ljava/lang/String;
|
||||
|
||||
if-eqz v0, :invalid
|
||||
|
||||
new-instance v1, Ljava/lang/StringBuilder;
|
||||
|
||||
const-string v2, "cgc:"
|
||||
|
||||
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
|
||||
|
||||
iget-object v2, p0, Lradiant/gestures/queue/CompactGridMediaQueueAction;->moduleUuid:Ljava/lang/String;
|
||||
|
||||
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
const/16 v2, 0x3a
|
||||
|
||||
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
|
||||
|
||||
iget v2, p0, Lradiant/gestures/queue/CompactGridMediaQueueAction;->mediaType:I
|
||||
|
||||
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
|
||||
|
||||
const/16 v2, 0x3a
|
||||
|
||||
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
|
||||
|
||||
invoke-virtual {v1, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
return-object v0
|
||||
|
||||
:invalid
|
||||
const/4 v0, 0x0
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
@@ -0,0 +1,367 @@
|
||||
.class public final Lradiant/gestures/queue/ComposeSearchQueue;
|
||||
.super Ljava/lang/Object;
|
||||
.source "ComposeSearchQueue.smali"
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public static handle(Lcom/tidal/android/feature/search/ui/SearchScreenViewModel;Lradiant/gestures/queue/ComposeSearchQueueEvent;)V
|
||||
.locals 10
|
||||
|
||||
if-eqz p0, :done
|
||||
|
||||
if-eqz p1, :done
|
||||
|
||||
iget v0, p1, Lradiant/gestures/queue/ComposeSearchQueueEvent;->action:I
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
if-lt v0, v1, :done
|
||||
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-gt v0, v1, :done
|
||||
|
||||
iget-object v8, p1, Lradiant/gestures/queue/ComposeSearchQueueEvent;->context:Landroid/content/Context;
|
||||
|
||||
if-eqz v8, :done
|
||||
|
||||
iget-object v2, p1, Lradiant/gestures/queue/ComposeSearchQueueEvent;->id:Ljava/lang/String;
|
||||
|
||||
if-eqz v2, :done
|
||||
|
||||
iget v4, p1, Lradiant/gestures/queue/ComposeSearchQueueEvent;->type:I
|
||||
|
||||
const/4 v0, 0x1
|
||||
|
||||
if-lt v4, v0, :done
|
||||
|
||||
const/4 v0, 0x4
|
||||
|
||||
if-gt v4, v0, :done
|
||||
|
||||
iget-object v0, p0, Lcom/tidal/android/feature/search/ui/SearchScreenViewModel;->n:Ljava/util/List; # MARKER: R8 n
|
||||
|
||||
invoke-interface {v0}, Ljava/lang/Iterable;->iterator()Ljava/util/Iterator;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
:find_row
|
||||
invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z
|
||||
|
||||
move-result v1
|
||||
|
||||
if-eqz v1, :done
|
||||
|
||||
invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
check-cast v1, Leb0/e; # MARKER: R8 Leb0/e;
|
||||
|
||||
invoke-static {v1}, Lcom/squareup/experiments/x;->c(Leb0/e;)Ljava/lang/String; # MARKER: R8 Lmb0/f; Leb0/e; a
|
||||
|
||||
move-result-object v9
|
||||
|
||||
invoke-virtual {v2, v9}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
|
||||
|
||||
move-result v9
|
||||
|
||||
if-eqz v9, :find_row
|
||||
|
||||
instance-of v9, v1, Leb0/a; # MARKER: R8 Leb0/a;
|
||||
|
||||
if-eqz v9, :find_row
|
||||
|
||||
check-cast v1, Leb0/a; # MARKER: R8 Leb0/a;
|
||||
|
||||
iget-object v3, v1, Leb0/a;->a:Ln30/o; # MARKER: R8 Leb0/a; Ln30/o; a
|
||||
|
||||
const/4 v9, 0x1
|
||||
|
||||
if-ne v4, v9, :check_album
|
||||
|
||||
instance-of v9, v3, Ln30/p; # MARKER: R8 Ln30/p;
|
||||
|
||||
if-eqz v9, :find_row
|
||||
|
||||
goto :recover_dependencies
|
||||
|
||||
:check_album
|
||||
const/4 v9, 0x2
|
||||
|
||||
if-ne v4, v9, :check_playlist
|
||||
|
||||
instance-of v9, v3, Ln30/a; # MARKER: R8 Ln30/a;
|
||||
|
||||
if-eqz v9, :find_row
|
||||
|
||||
goto :recover_dependencies
|
||||
|
||||
:check_playlist
|
||||
const/4 v9, 0x3
|
||||
|
||||
if-ne v4, v9, :check_mix
|
||||
|
||||
instance-of v9, v3, Ln30/k; # MARKER: R8 Ln30/k;
|
||||
|
||||
if-eqz v9, :find_row
|
||||
|
||||
goto :recover_dependencies
|
||||
|
||||
:check_mix
|
||||
instance-of v9, v3, Ln30/j; # MARKER: R8 Ln30/j;
|
||||
|
||||
if-eqz v9, :find_row
|
||||
|
||||
:recover_dependencies
|
||||
iget-object v9, p0, Lcom/tidal/android/feature/search/ui/SearchScreenViewModel;->d:Lcom/tidal/android/feature/search/ui/e; # MARKER: R8 Lcom/tidal/android/feature/search/ui/e; d
|
||||
|
||||
instance-of v0, v9, Lu9/d; # MARKER: R8 Lu9/d;
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
check-cast v9, Lu9/d; # MARKER: R8 Lu9/d;
|
||||
|
||||
iget-object v5, v9, Lu9/d;->b:Lcom/tidal/android/navigation/NavigationInfo; # MARKER: R8 Lu9/d; b
|
||||
|
||||
iget-object v9, v9, Lu9/d;->a:Lcom/aspiro/wamp/core/l; # MARKER: R8 Lu9/d; Lcom/aspiro/wamp/core/l; a
|
||||
|
||||
const/4 v6, 0x0
|
||||
|
||||
const/4 v0, 0x2
|
||||
|
||||
if-eq v4, v0, :recover_menu
|
||||
|
||||
const/4 v0, 0x4
|
||||
|
||||
if-ne v4, v0, :dependencies_ready
|
||||
|
||||
:recover_menu
|
||||
|
||||
instance-of v0, v9, Lg9/u1; # MARKER: R8 Lg9/u1;
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
check-cast v9, Lg9/u1; # MARKER: R8 Lg9/u1;
|
||||
|
||||
iget-object v9, v9, Lg9/u1;->b:Ld40/a; # MARKER: R8 Lg9/u1; Ld40/a; b
|
||||
|
||||
instance-of v0, v9, Lh4/a; # MARKER: R8 Lh4/a;
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
move-object v6, v9
|
||||
|
||||
check-cast v6, Lh4/a; # MARKER: R8 Lh4/a;
|
||||
|
||||
:dependencies_ready
|
||||
|
||||
new-instance v7, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;
|
||||
|
||||
const-string v0, "search"
|
||||
|
||||
invoke-direct {v7, v0, v2}, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;-><init>(Ljava/lang/String;Ljava/lang/String;)V
|
||||
|
||||
const/4 v0, 0x1
|
||||
|
||||
if-ne v4, v0, :album
|
||||
|
||||
check-cast v3, Ln30/p; # MARKER: R8 Ln30/p;
|
||||
|
||||
iget v0, p1, Lradiant/gestures/queue/ComposeSearchQueueEvent;->action:I
|
||||
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-eq v0, v1, :queue_track
|
||||
|
||||
invoke-static {}, Lradiant/gestures/queue/QueueExecutor;->hasActiveQueue()Z
|
||||
|
||||
move-result v0
|
||||
|
||||
if-eqz v0, :play_track
|
||||
|
||||
:queue_track
|
||||
invoke-static {v3}, Lae0/i;->c(Ln30/p;)Lcom/aspiro/wamp/model/Track; # MARKER: R8 Lae0/i; Ln30/p; a
|
||||
|
||||
move-result-object v9
|
||||
|
||||
iget-object v4, p0, Lcom/tidal/android/feature/search/ui/SearchScreenViewModel;->m:Lkotlinx/coroutines/flow/MutableStateFlow; # MARKER: R8 m
|
||||
|
||||
invoke-interface {v4}, Lkotlinx/coroutines/flow/MutableStateFlow;->getValue()Ljava/lang/Object;
|
||||
|
||||
move-result-object v4
|
||||
|
||||
check-cast v4, Lcom/tidal/android/feature/search/ui/SearchQuery;
|
||||
|
||||
iget-object v4, v4, Lcom/tidal/android/feature/search/ui/SearchQuery;->a:Ljava/lang/String; # MARKER: R8 a
|
||||
|
||||
if-nez v4, :track_query_ready
|
||||
|
||||
const-string v4, ""
|
||||
|
||||
:track_query_ready
|
||||
const/4 v1, 0x0
|
||||
|
||||
if-eqz v5, :track_navigation_ready
|
||||
|
||||
invoke-static {v5}, Lcom/tidal/android/navigation/a;->b(Lcom/tidal/android/navigation/NavigationInfo;)Lcom/tidal/android/navigation/NavigationInfo$Node; # MARKER: R8 Lcom/tidal/android/navigation/a; b
|
||||
|
||||
move-result-object v1
|
||||
|
||||
:track_navigation_ready
|
||||
invoke-static {v1, v2, v4}, Lcom/aspiro/wamp/playqueue/source/model/b;->o(Lcom/tidal/android/navigation/NavigationInfo;Ljava/lang/String;Ljava/lang/String;)Lcom/aspiro/wamp/playqueue/source/model/ItemSource; # MARKER: R8 Lcom/aspiro/wamp/playqueue/source/model/b; o
|
||||
|
||||
move-result-object v4
|
||||
|
||||
invoke-virtual {v4, v9}, Lcom/aspiro/wamp/playqueue/source/model/Source;->addSourceItem(Lcom/aspiro/wamp/model/MediaItem;)V
|
||||
|
||||
iget v0, p1, Lradiant/gestures/queue/ComposeSearchQueueEvent;->action:I
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
if-ne v0, v1, :check_add_track_to_playlist
|
||||
|
||||
invoke-static {v8, v9, v7, v4}, Lradiant/gestures/queue/QueueExecutor;->playNextTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z
|
||||
|
||||
goto :done
|
||||
|
||||
:check_add_track_to_playlist
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-ne v0, v1, :append_track
|
||||
|
||||
invoke-static {v8, v9, v7, v4}, Lradiant/gestures/queue/QueueExecutor;->addToPlaylistTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)V
|
||||
|
||||
goto :done
|
||||
|
||||
:append_track
|
||||
invoke-static {v8, v9, v7, v4}, Lradiant/gestures/queue/QueueExecutor;->track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z
|
||||
|
||||
goto :done
|
||||
|
||||
:play_track
|
||||
iget-object v5, p0, Lcom/tidal/android/feature/search/ui/SearchScreenViewModel;->m:Lkotlinx/coroutines/flow/MutableStateFlow; # MARKER: R8 m
|
||||
|
||||
invoke-interface {v5}, Lkotlinx/coroutines/flow/MutableStateFlow;->getValue()Ljava/lang/Object;
|
||||
|
||||
move-result-object v5
|
||||
|
||||
check-cast v5, Lcom/tidal/android/feature/search/ui/SearchQuery;
|
||||
|
||||
iget-object v5, v5, Lcom/tidal/android/feature/search/ui/SearchQuery;->a:Ljava/lang/String; # MARKER: R8 a
|
||||
|
||||
if-nez v5, :play_query_ready
|
||||
|
||||
const-string v5, ""
|
||||
|
||||
:play_query_ready
|
||||
iget-object v9, p0, Lcom/tidal/android/feature/search/ui/SearchScreenViewModel;->f:Lcom/tidal/android/feature/search/ui/f; # MARKER: R8 Lcom/tidal/android/feature/search/ui/f; f
|
||||
|
||||
iget-wide v0, v3, Ln30/p;->a:J # MARKER: R8 Ln30/p; a
|
||||
|
||||
invoke-interface {v9, v0, v1, v3, v5}, Lcom/tidal/android/feature/search/ui/f;->a(JLn30/p;Ljava/lang/String;)V # MARKER: R8 Lcom/tidal/android/feature/search/ui/f; Ln30/p; a
|
||||
|
||||
goto :done
|
||||
|
||||
:album
|
||||
const/4 v0, 0x2
|
||||
|
||||
if-ne v4, v0, :playlist
|
||||
|
||||
check-cast v3, Ln30/a; # MARKER: R8 Ln30/a;
|
||||
|
||||
invoke-static {v3}, Lae0/a;->b(Ln30/a;)Lcom/aspiro/wamp/model/Album; # MARKER: R8 Lae0/a; Ln30/a; a
|
||||
|
||||
move-result-object v9
|
||||
|
||||
iget v0, p1, Lradiant/gestures/queue/ComposeSearchQueueEvent;->action:I
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
if-ne v0, v1, :check_add_album_to_playlist
|
||||
|
||||
invoke-static {v8, v9, v7, v5, v6}, Lradiant/gestures/queue/QueueExecutor;->playNextAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; # MARKER: R8 Lh4/a;
|
||||
|
||||
goto :done
|
||||
|
||||
:check_add_album_to_playlist
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-ne v0, v1, :append_album
|
||||
|
||||
invoke-static {v8, v9, v7, v5, v6}, Lradiant/gestures/queue/QueueExecutor;->addToPlaylistAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V # MARKER: R8 Lh4/a;
|
||||
|
||||
goto :done
|
||||
|
||||
:append_album
|
||||
invoke-static {v8, v9, v7, v5, v6}, Lradiant/gestures/queue/QueueExecutor;->album(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; # MARKER: R8 Lh4/a;
|
||||
|
||||
goto :done
|
||||
|
||||
:playlist
|
||||
const/4 v0, 0x3
|
||||
|
||||
if-ne v4, v0, :mix
|
||||
|
||||
check-cast v3, Ln30/k; # MARKER: R8 Ln30/k;
|
||||
|
||||
invoke-static {v3}, Lae0/h;->a(Ln30/k;)Lcom/aspiro/wamp/model/Playlist; # MARKER: R8 Lae0/h; Ln30/k; a
|
||||
|
||||
move-result-object v9
|
||||
|
||||
iget v0, p1, Lradiant/gestures/queue/ComposeSearchQueueEvent;->action:I
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
if-ne v0, v1, :check_add_playlist_to_playlist
|
||||
|
||||
invoke-static {v8, v9, v7, v5}, Lradiant/gestures/queue/QueueExecutor;->playNextPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
|
||||
|
||||
goto :done
|
||||
|
||||
:check_add_playlist_to_playlist
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-ne v0, v1, :append_playlist
|
||||
|
||||
invoke-static {v8, v9, v7, v5}, Lradiant/gestures/queue/QueueExecutor;->addToPlaylistPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
|
||||
|
||||
goto :done
|
||||
|
||||
:append_playlist
|
||||
invoke-static {v8, v9, v7, v5}, Lradiant/gestures/queue/QueueExecutor;->playlist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
|
||||
|
||||
goto :done
|
||||
|
||||
:mix
|
||||
check-cast v3, Ln30/j; # MARKER: R8 Ln30/j;
|
||||
|
||||
invoke-static {v3}, Lae0/g;->b(Ln30/j;)Lcom/aspiro/wamp/mix/model/Mix; # MARKER: R8 Lae0/g; Ln30/j; b
|
||||
|
||||
move-result-object v9
|
||||
|
||||
iget v0, p1, Lradiant/gestures/queue/ComposeSearchQueueEvent;->action:I
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
if-ne v0, v1, :check_add_mix_to_playlist
|
||||
|
||||
invoke-static {v8, v9, v7, v5, v6}, Lradiant/gestures/queue/QueueExecutor;->playNextMix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; # MARKER: R8 Lh4/a;
|
||||
|
||||
goto :done
|
||||
|
||||
:check_add_mix_to_playlist
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-ne v0, v1, :append_mix
|
||||
|
||||
invoke-static {v8, v9, v7, v5, v6}, Lradiant/gestures/queue/QueueExecutor;->addToPlaylistMix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V # MARKER: R8 Lh4/a;
|
||||
|
||||
goto :done
|
||||
|
||||
:append_mix
|
||||
invoke-static {v8, v9, v7, v5, v6}, Lradiant/gestures/queue/QueueExecutor;->mix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; # MARKER: R8 Lh4/a;
|
||||
|
||||
:done
|
||||
return-void
|
||||
.end method
|
||||
@@ -0,0 +1,232 @@
|
||||
.class public final Lradiant/gestures/queue/ComposeSearchQueueAction;
|
||||
.super Ljava/lang/Object;
|
||||
.source "ComposeSearchQueueAction.smali"
|
||||
|
||||
# interfaces
|
||||
.implements Lradiant/gestures/queue/ComposeSwipeAction;
|
||||
|
||||
|
||||
# instance fields
|
||||
.field private final callback:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
.field private context:Landroid/content/Context;
|
||||
|
||||
.field private final id:Ljava/lang/String;
|
||||
|
||||
.field private final type:I
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>(Lyl0/l;Lhb0/b;)V # MARKER: R8 Lyl0/l; Lhb0/b;
|
||||
.locals 1
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/queue/ComposeSearchQueueAction;->callback:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
invoke-static {p2}, Lradiant/gestures/queue/ComposeSearchQueueAction;->key(Lhb0/b;)Ljava/lang/String; # MARKER: R8 Lhb0/b;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
iput-object v0, p0, Lradiant/gestures/queue/ComposeSearchQueueAction;->id:Ljava/lang/String;
|
||||
|
||||
invoke-static {p2}, Lradiant/gestures/queue/ComposeSearchQueueAction;->type(Lhb0/b;)I # MARKER: R8 Lhb0/b;
|
||||
|
||||
move-result p1
|
||||
|
||||
iput p1, p0, Lradiant/gestures/queue/ComposeSearchQueueAction;->type:I
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static key(Lhb0/b;)Ljava/lang/String; # MARKER: R8 Lhb0/b;
|
||||
.locals 2
|
||||
|
||||
instance-of v0, p0, Lhb0/b$i; # MARKER: R8 Lhb0/b$i;
|
||||
|
||||
if-eqz v0, :album
|
||||
|
||||
check-cast p0, Lhb0/b$i; # MARKER: R8 Lhb0/b$i;
|
||||
|
||||
iget-wide v0, p0, Lhb0/b$i;->a:J # MARKER: R8 Lhb0/b$i; a
|
||||
|
||||
invoke-static {v0, v1}, Ljava/lang/String;->valueOf(J)Ljava/lang/String;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
return-object p0
|
||||
|
||||
:album
|
||||
instance-of v0, p0, Lhb0/b$a; # MARKER: R8 Lhb0/b$a;
|
||||
|
||||
if-eqz v0, :playlist
|
||||
|
||||
check-cast p0, Lhb0/b$a; # MARKER: R8 Lhb0/b$a;
|
||||
|
||||
iget-wide v0, p0, Lhb0/b$a;->a:J # MARKER: R8 Lhb0/b$a; a
|
||||
|
||||
invoke-static {v0, v1}, Ljava/lang/String;->valueOf(J)Ljava/lang/String;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
return-object p0
|
||||
|
||||
:playlist
|
||||
instance-of v0, p0, Lhb0/b$f; # MARKER: R8 Lhb0/b$f;
|
||||
|
||||
if-eqz v0, :mix
|
||||
|
||||
check-cast p0, Lhb0/b$f; # MARKER: R8 Lhb0/b$f;
|
||||
|
||||
iget-object p0, p0, Lhb0/b$f;->a:Ljava/lang/String; # MARKER: R8 Lhb0/b$f; a
|
||||
|
||||
return-object p0
|
||||
|
||||
:mix
|
||||
instance-of v0, p0, Lhb0/b$e; # MARKER: R8 Lhb0/b$e;
|
||||
|
||||
if-eqz v0, :invalid
|
||||
|
||||
check-cast p0, Lhb0/b$e; # MARKER: R8 Lhb0/b$e;
|
||||
|
||||
iget-object p0, p0, Lhb0/b$e;->a:Ljava/lang/String; # MARKER: R8 Lhb0/b$e; a
|
||||
|
||||
return-object p0
|
||||
|
||||
:invalid
|
||||
const/4 p0, 0x0
|
||||
|
||||
return-object p0
|
||||
.end method
|
||||
|
||||
.method public stableKey()Ljava/lang/String;
|
||||
.locals 3
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/queue/ComposeSearchQueueAction;->id:Ljava/lang/String;
|
||||
|
||||
if-eqz v0, :invalid
|
||||
|
||||
iget v1, p0, Lradiant/gestures/queue/ComposeSearchQueueAction;->type:I
|
||||
|
||||
if-eqz v1, :invalid
|
||||
|
||||
new-instance v2, Ljava/lang/StringBuilder;
|
||||
|
||||
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
|
||||
|
||||
invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
|
||||
|
||||
const/16 v1, 0x3a
|
||||
|
||||
invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
|
||||
|
||||
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
return-object v0
|
||||
|
||||
:invalid
|
||||
const/4 v0, 0x0
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
|
||||
.method private static type(Lhb0/b;)I # MARKER: R8 Lhb0/b;
|
||||
.locals 1
|
||||
|
||||
instance-of v0, p0, Lhb0/b$i; # MARKER: R8 Lhb0/b$i;
|
||||
|
||||
if-eqz v0, :album
|
||||
|
||||
const/4 p0, 0x1
|
||||
|
||||
return p0
|
||||
|
||||
:album
|
||||
instance-of v0, p0, Lhb0/b$a; # MARKER: R8 Lhb0/b$a;
|
||||
|
||||
if-eqz v0, :playlist
|
||||
|
||||
const/4 p0, 0x2
|
||||
|
||||
return p0
|
||||
|
||||
:playlist
|
||||
instance-of v0, p0, Lhb0/b$f; # MARKER: R8 Lhb0/b$f;
|
||||
|
||||
if-eqz v0, :mix
|
||||
|
||||
const/4 p0, 0x3
|
||||
|
||||
return p0
|
||||
|
||||
:mix
|
||||
instance-of p0, p0, Lhb0/b$e; # MARKER: R8 Lhb0/b$e;
|
||||
|
||||
if-eqz p0, :invalid
|
||||
|
||||
const/4 p0, 0x4
|
||||
|
||||
return p0
|
||||
|
||||
:invalid
|
||||
const/4 p0, 0x0
|
||||
|
||||
return p0
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public invoke(I)Ljava/lang/Object;
|
||||
.locals 4
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/queue/ComposeSearchQueueAction;->callback:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
iget-object v1, p0, Lradiant/gestures/queue/ComposeSearchQueueAction;->context:Landroid/content/Context;
|
||||
|
||||
if-eqz v1, :done
|
||||
|
||||
iget-object v2, p0, Lradiant/gestures/queue/ComposeSearchQueueAction;->id:Ljava/lang/String;
|
||||
|
||||
if-eqz v2, :done
|
||||
|
||||
iget v3, p0, Lradiant/gestures/queue/ComposeSearchQueueAction;->type:I
|
||||
|
||||
if-eqz v3, :done
|
||||
|
||||
new-instance p0, Lradiant/gestures/queue/ComposeSearchQueueEvent;
|
||||
|
||||
invoke-direct {p0, v1, v2, v3, p1}, Lradiant/gestures/queue/ComposeSearchQueueEvent;-><init>(Landroid/content/Context;Ljava/lang/String;II)V
|
||||
|
||||
invoke-interface {v0, p0}, Lyl0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; # MARKER: R8 Lyl0/l;
|
||||
|
||||
:done
|
||||
sget-object v0, Lkotlin/u;->a:Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
|
||||
.method public invoke()Ljava/lang/Object;
|
||||
.locals 1
|
||||
|
||||
const/4 v0, 0x2
|
||||
|
||||
invoke-virtual {p0, v0}, Lradiant/gestures/queue/ComposeSearchQueueAction;->invoke(I)Ljava/lang/Object;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
|
||||
.method public setContext(Landroid/content/Context;)V
|
||||
.locals 0
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/queue/ComposeSearchQueueAction;->context:Landroid/content/Context;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -0,0 +1,44 @@
|
||||
.class public final Lradiant/gestures/queue/ComposeSearchQueueEvent;
|
||||
.super Ljava/lang/Object;
|
||||
.source "ComposeSearchQueueEvent.smali"
|
||||
|
||||
# interfaces
|
||||
.implements Lcom/tidal/android/feature/search/ui/b; # MARKER: R8 Lcom/tidal/android/feature/search/ui/b;
|
||||
|
||||
|
||||
# static fields
|
||||
.field public static final TYPE_ALBUM:I = 0x2
|
||||
|
||||
.field public static final TYPE_MIX:I = 0x4
|
||||
|
||||
.field public static final TYPE_PLAYLIST:I = 0x3
|
||||
|
||||
.field public static final TYPE_TRACK:I = 0x1
|
||||
|
||||
|
||||
# instance fields
|
||||
.field public final action:I
|
||||
|
||||
.field public final context:Landroid/content/Context;
|
||||
|
||||
.field public final id:Ljava/lang/String;
|
||||
|
||||
.field public final type:I
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>(Landroid/content/Context;Ljava/lang/String;II)V
|
||||
.locals 0
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/queue/ComposeSearchQueueEvent;->context:Landroid/content/Context;
|
||||
|
||||
iput-object p2, p0, Lradiant/gestures/queue/ComposeSearchQueueEvent;->id:Ljava/lang/String;
|
||||
|
||||
iput p3, p0, Lradiant/gestures/queue/ComposeSearchQueueEvent;->type:I
|
||||
|
||||
iput p4, p0, Lradiant/gestures/queue/ComposeSearchQueueEvent;->action:I
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -0,0 +1,17 @@
|
||||
.class public interface abstract Lradiant/gestures/queue/ComposeSwipeAction;
|
||||
.super Ljava/lang/Object;
|
||||
.source "ComposeSwipeAction.smali"
|
||||
|
||||
# interfaces
|
||||
.implements Lyl0/a; # MARKER: R8 Lyl0/a;
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public abstract invoke()Ljava/lang/Object;
|
||||
.end method
|
||||
|
||||
.method public abstract invoke(I)Ljava/lang/Object;
|
||||
.end method
|
||||
|
||||
.method public abstract setContext(Landroid/content/Context;)V
|
||||
.end method
|
||||
@@ -0,0 +1,275 @@
|
||||
.class public final Lradiant/gestures/queue/ComposeSwipeState$Draw;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
||||
value = Lradiant/gestures/queue/ComposeSwipeState;
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
accessFlags = 0x19
|
||||
name = "Draw"
|
||||
.end annotation
|
||||
|
||||
|
||||
# instance fields
|
||||
.field private final state:Lradiant/gestures/queue/ComposeSwipeState;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>(Lradiant/gestures/queue/ComposeSwipeState;)V
|
||||
.locals 0
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/queue/ComposeSwipeState$Draw;->state:Lradiant/gestures/queue/ComposeSwipeState;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public invoke(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
.locals 16
|
||||
|
||||
move-object/from16 v0, p1
|
||||
|
||||
move-object/from16 v5, p0
|
||||
|
||||
invoke-interface {v0}, Landroidx/compose/ui/graphics/drawscope/DrawScope;->getSize-NH-jbRc()J
|
||||
|
||||
move-result-wide v1
|
||||
|
||||
invoke-static {v1, v2}, Landroidx/compose/ui/geometry/Size;->getWidth-impl(J)F
|
||||
|
||||
move-result v3
|
||||
|
||||
invoke-static {v1, v2}, Landroidx/compose/ui/geometry/Size;->getHeight-impl(J)F
|
||||
|
||||
move-result v4
|
||||
|
||||
iget-object v5, v5, Lradiant/gestures/queue/ComposeSwipeState$Draw;->state:Lradiant/gestures/queue/ComposeSwipeState;
|
||||
|
||||
iput v3, v5, Lradiant/gestures/queue/ComposeSwipeState;->rowWidth:F
|
||||
|
||||
iget-object v1, v5, Lradiant/gestures/queue/ComposeSwipeState;->translation:Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
invoke-interface {v1}, Landroidx/compose/runtime/MutableFloatState;->getFloatValue()F
|
||||
|
||||
move-result v6
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
cmpl-float v2, v6, v1
|
||||
|
||||
if-eqz v2, :draw_plain
|
||||
|
||||
invoke-interface {v0}, Landroidx/compose/ui/graphics/drawscope/DrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/DrawContext;
|
||||
|
||||
move-result-object v2
|
||||
|
||||
invoke-interface {v2}, Landroidx/compose/ui/graphics/drawscope/DrawContext;->getCanvas()Landroidx/compose/ui/graphics/Canvas;
|
||||
|
||||
move-result-object v2
|
||||
|
||||
invoke-static {v2}, Landroidx/compose/ui/graphics/AndroidCanvas_androidKt;->getNativeCanvas(Landroidx/compose/ui/graphics/Canvas;)Landroid/graphics/Canvas;
|
||||
|
||||
move-result-object v7
|
||||
|
||||
invoke-virtual {v7}, Landroid/graphics/Canvas;->save()I
|
||||
|
||||
move-result v8
|
||||
|
||||
cmpg-float v9, v6, v1
|
||||
|
||||
if-gez v9, :right_exposure
|
||||
|
||||
add-float v9, v3, v6
|
||||
|
||||
invoke-static {v1, v9}, Ljava/lang/Math;->max(FF)F
|
||||
|
||||
move-result v9
|
||||
|
||||
move v10, v3
|
||||
|
||||
goto :exposure_ready
|
||||
|
||||
:right_exposure
|
||||
move v9, v1
|
||||
|
||||
invoke-static {v3, v6}, Ljava/lang/Math;->min(FF)F
|
||||
|
||||
move-result v10
|
||||
|
||||
:exposure_ready
|
||||
invoke-virtual {v7, v9, v1, v10, v4}, Landroid/graphics/Canvas;->clipRect(FFFF)Z
|
||||
|
||||
invoke-virtual {v5, v6}, Lradiant/gestures/queue/ComposeSwipeState;->actionForOffset(F)I
|
||||
|
||||
move-result v11
|
||||
|
||||
const/4 v12, 0x1
|
||||
|
||||
if-ne v11, v12, :add_color
|
||||
|
||||
const v11, __RL_SWIPE_TO_QUEUE_PLAY_NEXT_COLOR__
|
||||
|
||||
goto :color_ready
|
||||
|
||||
:add_color
|
||||
const/4 v12, 0x3
|
||||
|
||||
if-ne v11, v12, :add_to_queue_color
|
||||
|
||||
const v11, __RL_SWIPE_TO_QUEUE_ADD_TO_PLAYLIST_COLOR__
|
||||
|
||||
goto :color_ready
|
||||
|
||||
:add_to_queue_color
|
||||
const v11, __RL_SWIPE_TO_QUEUE_ADD_COLOR__
|
||||
|
||||
:color_ready
|
||||
|
||||
invoke-virtual {v7, v11}, Landroid/graphics/Canvas;->drawColor(I)V
|
||||
|
||||
invoke-virtual {v5, v6}, Lradiant/gestures/queue/ComposeSwipeState;->actionForOffset(F)I
|
||||
|
||||
move-result v11
|
||||
|
||||
const/4 v12, 0x1
|
||||
|
||||
if-ne v11, v12, :add_icon
|
||||
|
||||
iget-object v11, v5, Lradiant/gestures/queue/ComposeSwipeState;->playNextIcon:Landroid/graphics/drawable/Drawable;
|
||||
|
||||
goto :icon_ready
|
||||
|
||||
:add_icon
|
||||
const/4 v12, 0x3
|
||||
|
||||
if-ne v11, v12, :add_to_queue_icon
|
||||
|
||||
iget-object v11, v5, Lradiant/gestures/queue/ComposeSwipeState;->addToPlaylistIcon:Landroid/graphics/drawable/Drawable;
|
||||
|
||||
goto :icon_ready
|
||||
|
||||
:add_to_queue_icon
|
||||
iget-object v11, v5, Lradiant/gestures/queue/ComposeSwipeState;->addIcon:Landroid/graphics/drawable/Drawable;
|
||||
|
||||
:icon_ready
|
||||
|
||||
if-eqz v11, :background_done
|
||||
|
||||
invoke-virtual {v11}, Landroid/graphics/drawable/Drawable;->getIntrinsicWidth()I
|
||||
|
||||
move-result v12
|
||||
|
||||
invoke-virtual {v11}, Landroid/graphics/drawable/Drawable;->getIntrinsicHeight()I
|
||||
|
||||
move-result v13
|
||||
|
||||
if-lez v12, :background_done
|
||||
|
||||
if-lez v13, :background_done
|
||||
|
||||
const/high16 v14, 0x41800000 # 16.0f
|
||||
|
||||
invoke-virtual {v5, v14}, Lradiant/gestures/queue/ComposeSwipeState;->dp(F)F
|
||||
|
||||
move-result v14
|
||||
|
||||
const/4 v15, 0x0
|
||||
|
||||
int-to-float v15, v15
|
||||
|
||||
cmpg-float v15, v6, v15
|
||||
|
||||
if-gez v15, :right_icon
|
||||
|
||||
int-to-float v1, v12
|
||||
|
||||
sub-float v1, v3, v1
|
||||
|
||||
sub-float/2addr v1, v14
|
||||
|
||||
goto :icon_x_ready
|
||||
|
||||
:right_icon
|
||||
move v1, v14
|
||||
|
||||
:icon_x_ready
|
||||
int-to-float v14, v13
|
||||
|
||||
sub-float v14, v4, v14
|
||||
|
||||
const/high16 v15, 0x40000000 # 2.0f
|
||||
|
||||
div-float/2addr v14, v15
|
||||
|
||||
float-to-int v15, v1
|
||||
|
||||
float-to-int v14, v14
|
||||
|
||||
add-int v1, v15, v12
|
||||
|
||||
add-int v12, v14, v13
|
||||
|
||||
invoke-virtual {v11, v15, v14, v1, v12}, Landroid/graphics/drawable/Drawable;->setBounds(IIII)V
|
||||
|
||||
const/16 v1, 0xff
|
||||
|
||||
invoke-virtual {v11, v1}, Landroid/graphics/drawable/Drawable;->setAlpha(I)V
|
||||
|
||||
invoke-virtual {v11, v7}, Landroid/graphics/drawable/Drawable;->draw(Landroid/graphics/Canvas;)V
|
||||
|
||||
:background_done
|
||||
invoke-virtual {v7, v8}, Landroid/graphics/Canvas;->restoreToCount(I)V
|
||||
|
||||
invoke-virtual {v7}, Landroid/graphics/Canvas;->save()I
|
||||
|
||||
move-result v8
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
invoke-virtual {v7, v1, v1, v3, v4}, Landroid/graphics/Canvas;->clipRect(FFFF)Z
|
||||
|
||||
invoke-virtual {v7, v6, v1}, Landroid/graphics/Canvas;->translate(FF)V
|
||||
|
||||
:try_start_0
|
||||
invoke-interface {v0}, Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;->drawContent()V
|
||||
:try_end_0
|
||||
.catchall {:try_start_0 .. :try_end_0} :catchall_0
|
||||
|
||||
invoke-virtual {v7, v8}, Landroid/graphics/Canvas;->restoreToCount(I)V
|
||||
|
||||
goto :done
|
||||
|
||||
:catchall_0
|
||||
move-exception v0
|
||||
|
||||
invoke-virtual {v7, v8}, Landroid/graphics/Canvas;->restoreToCount(I)V
|
||||
|
||||
throw v0
|
||||
|
||||
:draw_plain
|
||||
invoke-interface {v0}, Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;->drawContent()V
|
||||
|
||||
:done
|
||||
sget-object v0, Lkotlin/u;->a:Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
|
||||
.method public bridge synthetic invoke(Ljava/lang/Object;)Ljava/lang/Object;
|
||||
.locals 1
|
||||
|
||||
check-cast p1, Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;
|
||||
|
||||
invoke-virtual {p0, p1}, Lradiant/gestures/queue/ComposeSwipeState$Draw;->invoke(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
@@ -0,0 +1,231 @@
|
||||
.class public final Lradiant/gestures/queue/ComposeSwipeState$Gesture;
|
||||
.super Landroidx/compose/ui/input/pointer/PointerInputFilter;
|
||||
.implements Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
.implements Landroidx/compose/ui/input/pointer/PointerInputModifier;
|
||||
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
||||
value = Lradiant/gestures/queue/ComposeSwipeState;
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
accessFlags = 0x19
|
||||
name = "Gesture"
|
||||
.end annotation
|
||||
|
||||
|
||||
# instance fields
|
||||
.field private consumeAfterDispatch:Z
|
||||
|
||||
.field private final state:Lradiant/gestures/queue/ComposeSwipeState;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>(Lradiant/gestures/queue/ComposeSwipeState;)V
|
||||
.locals 0
|
||||
|
||||
invoke-direct {p0}, Landroidx/compose/ui/input/pointer/PointerInputFilter;-><init>()V
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/queue/ComposeSwipeState$Gesture;->state:Lradiant/gestures/queue/ComposeSwipeState;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public getInterceptOutOfBoundsChildEvents()Z
|
||||
.locals 1
|
||||
|
||||
const/4 v0, 0x1
|
||||
|
||||
return v0
|
||||
.end method
|
||||
|
||||
.method public getPointerInputFilter()Landroidx/compose/ui/input/pointer/PointerInputFilter;
|
||||
.locals 0
|
||||
|
||||
return-object p0
|
||||
.end method
|
||||
|
||||
.method public invoke(Landroid/view/MotionEvent;)Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
.locals 3
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getActionMasked()I
|
||||
|
||||
move-result v0
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
iput-boolean v1, p0, Lradiant/gestures/queue/ComposeSwipeState$Gesture;->consumeAfterDispatch:Z
|
||||
|
||||
if-eqz v0, :down
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
if-eq v0, v1, :up
|
||||
|
||||
const/4 v1, 0x2
|
||||
|
||||
if-eq v0, v1, :move
|
||||
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-eq v0, v1, :cancel
|
||||
|
||||
const/4 v1, 0x5
|
||||
|
||||
if-eq v0, v1, :cancel
|
||||
|
||||
const/4 v1, 0x6
|
||||
|
||||
if-eq v0, v1, :cancel
|
||||
|
||||
goto :done
|
||||
|
||||
:down
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawX()F
|
||||
|
||||
move-result v0
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v1
|
||||
|
||||
iget-object v2, p0, Lradiant/gestures/queue/ComposeSwipeState$Gesture;->state:Lradiant/gestures/queue/ComposeSwipeState;
|
||||
|
||||
invoke-virtual {v2, v0, v1}, Lradiant/gestures/queue/ComposeSwipeState;->begin(FF)V
|
||||
|
||||
goto :done
|
||||
|
||||
:move
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawX()F
|
||||
|
||||
move-result v0
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v1
|
||||
|
||||
iget-object v2, p0, Lradiant/gestures/queue/ComposeSwipeState$Gesture;->state:Lradiant/gestures/queue/ComposeSwipeState;
|
||||
|
||||
invoke-virtual {v2, v0, v1}, Lradiant/gestures/queue/ComposeSwipeState;->move(FF)V
|
||||
|
||||
goto :done
|
||||
|
||||
:up
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawX()F
|
||||
|
||||
move-result v0
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v1
|
||||
|
||||
iget-object v2, p0, Lradiant/gestures/queue/ComposeSwipeState$Gesture;->state:Lradiant/gestures/queue/ComposeSwipeState;
|
||||
|
||||
invoke-virtual {v2, v0, v1}, Lradiant/gestures/queue/ComposeSwipeState;->move(FF)V
|
||||
|
||||
iget-boolean v0, v2, Lradiant/gestures/queue/ComposeSwipeState;->locked:Z
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/queue/ComposeSwipeState$Gesture;->consumeAfterDispatch:Z
|
||||
|
||||
invoke-virtual {v2}, Lradiant/gestures/queue/ComposeSwipeState;->finish()V
|
||||
|
||||
goto :done
|
||||
|
||||
:cancel
|
||||
iget-object v0, p0, Lradiant/gestures/queue/ComposeSwipeState$Gesture;->state:Lradiant/gestures/queue/ComposeSwipeState;
|
||||
|
||||
invoke-virtual {v0}, Lradiant/gestures/queue/ComposeSwipeState;->cancelGesture()V
|
||||
|
||||
:done
|
||||
sget-object p1, Lkotlin/u;->a:Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
return-object p1
|
||||
.end method
|
||||
|
||||
.method public bridge synthetic invoke(Ljava/lang/Object;)Ljava/lang/Object;
|
||||
.locals 1
|
||||
|
||||
check-cast p1, Landroid/view/MotionEvent;
|
||||
|
||||
invoke-virtual {p0, p1}, Lradiant/gestures/queue/ComposeSwipeState$Gesture;->invoke(Landroid/view/MotionEvent;)Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
|
||||
.method public onCancel()V
|
||||
.locals 1
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/queue/ComposeSwipeState$Gesture;->state:Lradiant/gestures/queue/ComposeSwipeState;
|
||||
|
||||
invoke-virtual {v0}, Lradiant/gestures/queue/ComposeSwipeState;->cancelGesture()V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V
|
||||
.locals 4
|
||||
|
||||
sget-object v0, Landroidx/compose/ui/input/pointer/PointerEventPass;->Initial:Landroidx/compose/ui/input/pointer/PointerEventPass;
|
||||
|
||||
if-ne p2, v0, :done
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/queue/ComposeSwipeState$Gesture;->state:Lradiant/gestures/queue/ComposeSwipeState;
|
||||
|
||||
iget-boolean v1, v0, Lradiant/gestures/queue/ComposeSwipeState;->locked:Z
|
||||
|
||||
const/4 v2, 0x0
|
||||
|
||||
iput-boolean v2, p0, Lradiant/gestures/queue/ComposeSwipeState$Gesture;->consumeAfterDispatch:Z
|
||||
|
||||
invoke-virtual {p1}, Landroidx/compose/ui/input/pointer/PointerEvent;->getMotionEvent()Landroid/view/MotionEvent;
|
||||
|
||||
move-result-object v2
|
||||
|
||||
if-eqz v2, :after_dispatch
|
||||
|
||||
invoke-virtual {p0, v2}, Lradiant/gestures/queue/ComposeSwipeState$Gesture;->invoke(Landroid/view/MotionEvent;)Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
:after_dispatch
|
||||
iget-boolean v2, p0, Lradiant/gestures/queue/ComposeSwipeState$Gesture;->consumeAfterDispatch:Z
|
||||
|
||||
or-int/2addr v1, v2
|
||||
|
||||
iget-boolean v2, v0, Lradiant/gestures/queue/ComposeSwipeState;->locked:Z
|
||||
|
||||
or-int/2addr v1, v2
|
||||
|
||||
if-eqz v1, :done
|
||||
|
||||
invoke-virtual {p1}, Landroidx/compose/ui/input/pointer/PointerEvent;->getChanges()Ljava/util/List;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
invoke-interface {v0}, Ljava/util/List;->size()I
|
||||
|
||||
move-result v1
|
||||
|
||||
const/4 v2, 0x0
|
||||
|
||||
:consume_loop
|
||||
if-ge v2, v1, :done
|
||||
|
||||
invoke-interface {v0, v2}, Ljava/util/List;->get(I)Ljava/lang/Object;
|
||||
|
||||
move-result-object v3
|
||||
|
||||
check-cast v3, Landroidx/compose/ui/input/pointer/PointerInputChange;
|
||||
|
||||
invoke-virtual {v3}, Landroidx/compose/ui/input/pointer/PointerInputChange;->consume()V
|
||||
|
||||
add-int/lit8 v2, v2, 0x1
|
||||
|
||||
goto :consume_loop
|
||||
|
||||
:done
|
||||
return-void
|
||||
.end method
|
||||
@@ -0,0 +1,67 @@
|
||||
.class public final Lradiant/gestures/queue/ComposeSwipeState$ResetAnimator;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Landroid/animation/ValueAnimator$AnimatorUpdateListener;
|
||||
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
||||
value = Lradiant/gestures/queue/ComposeSwipeState;
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
accessFlags = 0x19
|
||||
name = "ResetAnimator"
|
||||
.end annotation
|
||||
|
||||
|
||||
# instance fields
|
||||
.field private final state:Lradiant/gestures/queue/ComposeSwipeState;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>(Lradiant/gestures/queue/ComposeSwipeState;)V
|
||||
.locals 0
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/queue/ComposeSwipeState$ResetAnimator;->state:Lradiant/gestures/queue/ComposeSwipeState;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public onAnimationUpdate(Landroid/animation/ValueAnimator;)V
|
||||
.locals 3
|
||||
|
||||
invoke-virtual {p1}, Landroid/animation/ValueAnimator;->getAnimatedValue()Ljava/lang/Object;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
check-cast v0, Ljava/lang/Float;
|
||||
|
||||
invoke-virtual {v0}, Ljava/lang/Float;->floatValue()F
|
||||
|
||||
move-result v0
|
||||
|
||||
iget-object v1, p0, Lradiant/gestures/queue/ComposeSwipeState$ResetAnimator;->state:Lradiant/gestures/queue/ComposeSwipeState;
|
||||
|
||||
invoke-virtual {v1, v0}, Lradiant/gestures/queue/ComposeSwipeState;->setOffset(F)V
|
||||
|
||||
invoke-virtual {p1}, Landroid/animation/ValueAnimator;->getAnimatedFraction()F
|
||||
|
||||
move-result v0
|
||||
|
||||
const/high16 v2, 0x3f800000 # 1.0f
|
||||
|
||||
cmpg-float v0, v0, v2
|
||||
|
||||
if-gez v0, :finished
|
||||
|
||||
return-void
|
||||
|
||||
:finished
|
||||
invoke-virtual {v1, p1}, Lradiant/gestures/queue/ComposeSwipeState;->clearAnimator(Landroid/animation/ValueAnimator;)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -0,0 +1,704 @@
|
||||
.class public final Lradiant/gestures/queue/ComposeSwipeState;
|
||||
.super Ljava/lang/Object;
|
||||
|
||||
|
||||
# instance fields
|
||||
.field translation:Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
.field action:Lradiant/gestures/queue/ComposeSwipeAction;
|
||||
|
||||
.field context:Landroid/content/Context;
|
||||
|
||||
.field view:Landroid/view/View;
|
||||
|
||||
.field enabled:Z
|
||||
|
||||
.field downX:F
|
||||
|
||||
.field downY:F
|
||||
|
||||
.field tracking:Z
|
||||
|
||||
.field locked:Z
|
||||
|
||||
.field armed:Z
|
||||
|
||||
.field rowWidth:F
|
||||
|
||||
.field animator:Landroid/animation/ValueAnimator;
|
||||
|
||||
.field final gesture:Lradiant/gestures/queue/ComposeSwipeState$Gesture;
|
||||
|
||||
.field final draw:Lradiant/gestures/queue/ComposeSwipeState$Draw;
|
||||
|
||||
.field addIcon:Landroid/graphics/drawable/Drawable;
|
||||
|
||||
.field addToPlaylistIcon:Landroid/graphics/drawable/Drawable;
|
||||
|
||||
.field playNextIcon:Landroid/graphics/drawable/Drawable;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>()V
|
||||
.locals 2
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
invoke-static {v0}, Landroidx/compose/runtime/PrimitiveSnapshotStateKt;->mutableFloatStateOf(F)Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
iput-object v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->translation:Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
new-instance v0, Lradiant/gestures/queue/ComposeSwipeState$Gesture;
|
||||
|
||||
invoke-direct {v0, p0}, Lradiant/gestures/queue/ComposeSwipeState$Gesture;-><init>(Lradiant/gestures/queue/ComposeSwipeState;)V
|
||||
|
||||
iput-object v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->gesture:Lradiant/gestures/queue/ComposeSwipeState$Gesture;
|
||||
|
||||
new-instance v1, Lradiant/gestures/queue/ComposeSwipeState$Draw;
|
||||
|
||||
invoke-direct {v1, p0}, Lradiant/gestures/queue/ComposeSwipeState$Draw;-><init>(Lradiant/gestures/queue/ComposeSwipeState;)V
|
||||
|
||||
iput-object v1, p0, Lradiant/gestures/queue/ComposeSwipeState;->draw:Lradiant/gestures/queue/ComposeSwipeState$Draw;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static attach(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Lradiant/gestures/queue/ComposeSwipeAction;ZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier;
|
||||
.locals 5
|
||||
.annotation build Landroidx/compose/runtime/Composable;
|
||||
.end annotation
|
||||
|
||||
const v0, 0x4a33c921
|
||||
|
||||
invoke-interface {p4, v0}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V
|
||||
|
||||
invoke-static {}, Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalView()Landroidx/compose/runtime/ProvidableCompositionLocal;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
invoke-interface {p4, v0}, Landroidx/compose/runtime/Composer;->consume(Landroidx/compose/runtime/CompositionLocal;)Ljava/lang/Object;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
check-cast v0, Landroid/view/View;
|
||||
|
||||
invoke-interface {p4, p1}, Landroidx/compose/runtime/Composer;->changed(Ljava/lang/Object;)Z
|
||||
|
||||
move-result v1
|
||||
|
||||
invoke-interface {p4}, Landroidx/compose/runtime/Composer;->rememberedValue()Ljava/lang/Object;
|
||||
|
||||
move-result-object v2
|
||||
|
||||
if-nez v1, :new_state
|
||||
|
||||
sget-object v3, Landroidx/compose/runtime/Composer;->Companion:Landroidx/compose/runtime/Composer$Companion;
|
||||
|
||||
invoke-virtual {v3}, Landroidx/compose/runtime/Composer$Companion;->getEmpty()Ljava/lang/Object;
|
||||
|
||||
move-result-object v3
|
||||
|
||||
if-ne v2, v3, :state_ready
|
||||
|
||||
:new_state
|
||||
new-instance v2, Lradiant/gestures/queue/ComposeSwipeState;
|
||||
|
||||
invoke-direct {v2}, Lradiant/gestures/queue/ComposeSwipeState;-><init>()V
|
||||
|
||||
invoke-interface {p4, v2}, Landroidx/compose/runtime/Composer;->updateRememberedValue(Ljava/lang/Object;)V
|
||||
|
||||
:state_ready
|
||||
check-cast v2, Lradiant/gestures/queue/ComposeSwipeState;
|
||||
|
||||
invoke-virtual {v2, p2, p3, v0}, Lradiant/gestures/queue/ComposeSwipeState;->update(Lradiant/gestures/queue/ComposeSwipeAction;ZLandroid/view/View;)V
|
||||
|
||||
iget-object v1, v2, Lradiant/gestures/queue/ComposeSwipeState;->gesture:Lradiant/gestures/queue/ComposeSwipeState$Gesture;
|
||||
|
||||
check-cast v1, Landroidx/compose/ui/Modifier;
|
||||
|
||||
invoke-interface {p0, v1}, Landroidx/compose/ui/Modifier;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
iget-object v1, v2, Lradiant/gestures/queue/ComposeSwipeState;->draw:Lradiant/gestures/queue/ComposeSwipeState$Draw;
|
||||
|
||||
invoke-static {p0, v1}, Landroidx/compose/ui/draw/DrawModifierKt;->drawWithContent(Landroidx/compose/ui/Modifier;Lyl0/l;)Landroidx/compose/ui/Modifier; # MARKER: R8 Lyl0/l;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
invoke-interface {p4}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V
|
||||
|
||||
return-object p0
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method actionForOffset(F)I
|
||||
.locals 2
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
int-to-float v0, v0
|
||||
|
||||
cmpg-float v1, p1, v0
|
||||
|
||||
if-ltz v1, :left
|
||||
|
||||
cmpl-float p1, p1, v0
|
||||
|
||||
if-gtz p1, :right
|
||||
|
||||
const/4 p1, 0x0
|
||||
|
||||
return p1
|
||||
|
||||
:left
|
||||
const/16 p1, __RL_SWIPE_TO_QUEUE_LEFT_ACTION__
|
||||
|
||||
return p1
|
||||
|
||||
:right
|
||||
const/16 p1, __RL_SWIPE_TO_QUEUE_RIGHT_ACTION__
|
||||
|
||||
return p1
|
||||
.end method
|
||||
|
||||
.method animateReset()V
|
||||
.locals 7
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->animator:Landroid/animation/ValueAnimator;
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
if-eqz v0, :read_offset
|
||||
|
||||
invoke-virtual {v0}, Landroid/animation/ValueAnimator;->cancel()V
|
||||
|
||||
iput-object v1, p0, Lradiant/gestures/queue/ComposeSwipeState;->animator:Landroid/animation/ValueAnimator;
|
||||
|
||||
:read_offset
|
||||
iget-object v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->translation:Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
invoke-interface {v0}, Landroidx/compose/runtime/MutableFloatState;->getFloatValue()F
|
||||
|
||||
move-result v0
|
||||
|
||||
invoke-static {v0}, Ljava/lang/Math;->abs(F)F
|
||||
|
||||
move-result v2
|
||||
|
||||
const/high16 v3, 0x3f000000 # 0.5f
|
||||
|
||||
cmpg-float v2, v2, v3
|
||||
|
||||
if-lez v2, :snap
|
||||
|
||||
const/4 v2, 0x2
|
||||
|
||||
new-array v2, v2, [F
|
||||
|
||||
const/4 v3, 0x0
|
||||
|
||||
aput v0, v2, v3
|
||||
|
||||
const/4 v0, 0x1
|
||||
|
||||
const/4 v3, 0x0
|
||||
|
||||
aput v3, v2, v0
|
||||
|
||||
invoke-static {v2}, Landroid/animation/ValueAnimator;->ofFloat([F)Landroid/animation/ValueAnimator;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
const-wide/16 v4, 0xb4
|
||||
|
||||
invoke-virtual {v0, v4, v5}, Landroid/animation/ValueAnimator;->setDuration(J)Landroid/animation/ValueAnimator;
|
||||
|
||||
new-instance v2, Landroid/view/animation/DecelerateInterpolator;
|
||||
|
||||
const/high16 v4, 0x3fc00000 # 1.5f
|
||||
|
||||
invoke-direct {v2, v4}, Landroid/view/animation/DecelerateInterpolator;-><init>(F)V
|
||||
|
||||
invoke-virtual {v0, v2}, Landroid/animation/ValueAnimator;->setInterpolator(Landroid/animation/TimeInterpolator;)V
|
||||
|
||||
new-instance v2, Lradiant/gestures/queue/ComposeSwipeState$ResetAnimator;
|
||||
|
||||
invoke-direct {v2, p0}, Lradiant/gestures/queue/ComposeSwipeState$ResetAnimator;-><init>(Lradiant/gestures/queue/ComposeSwipeState;)V
|
||||
|
||||
invoke-virtual {v0, v2}, Landroid/animation/ValueAnimator;->addUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)V
|
||||
|
||||
iput-object v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->animator:Landroid/animation/ValueAnimator;
|
||||
|
||||
invoke-virtual {v0}, Landroid/animation/ValueAnimator;->start()V
|
||||
|
||||
return-void
|
||||
|
||||
:snap
|
||||
const/4 v3, 0x0
|
||||
|
||||
invoke-virtual {p0, v3}, Lradiant/gestures/queue/ComposeSwipeState;->setOffset(F)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method begin(FF)V
|
||||
.locals 3
|
||||
|
||||
invoke-virtual {p0}, Lradiant/gestures/queue/ComposeSwipeState;->releaseParent()V
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->animator:Landroid/animation/ValueAnimator;
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
if-eqz v0, :initialize
|
||||
|
||||
invoke-virtual {v0}, Landroid/animation/ValueAnimator;->cancel()V
|
||||
|
||||
iput-object v1, p0, Lradiant/gestures/queue/ComposeSwipeState;->animator:Landroid/animation/ValueAnimator;
|
||||
|
||||
:initialize
|
||||
iput p1, p0, Lradiant/gestures/queue/ComposeSwipeState;->downX:F
|
||||
|
||||
iput p2, p0, Lradiant/gestures/queue/ComposeSwipeState;->downY:F
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->locked:Z
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->armed:Z
|
||||
|
||||
invoke-virtual {p0, v0}, Lradiant/gestures/queue/ComposeSwipeState;->setOffset(F)V
|
||||
|
||||
iget-boolean v2, p0, Lradiant/gestures/queue/ComposeSwipeState;->enabled:Z
|
||||
|
||||
if-eqz v2, :inactive
|
||||
|
||||
iget-object v2, p0, Lradiant/gestures/queue/ComposeSwipeState;->action:Lradiant/gestures/queue/ComposeSwipeAction;
|
||||
|
||||
if-eqz v2, :inactive
|
||||
|
||||
const/4 v0, 0x1
|
||||
|
||||
:inactive
|
||||
iput-boolean v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->tracking:Z
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method cancelGesture()V
|
||||
.locals 1
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->tracking:Z
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->locked:Z
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->armed:Z
|
||||
|
||||
invoke-virtual {p0}, Lradiant/gestures/queue/ComposeSwipeState;->releaseParent()V
|
||||
|
||||
invoke-virtual {p0}, Lradiant/gestures/queue/ComposeSwipeState;->animateReset()V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method clearAnimator(Landroid/animation/ValueAnimator;)V
|
||||
.locals 1
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->animator:Landroid/animation/ValueAnimator;
|
||||
|
||||
if-ne v0, p1, :done
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
iput-object v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->animator:Landroid/animation/ValueAnimator;
|
||||
|
||||
:done
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method dp(F)F
|
||||
.locals 1
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->context:Landroid/content/Context;
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
invoke-virtual {v0}, Landroid/content/Context;->getResources()Landroid/content/res/Resources;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
invoke-virtual {v0}, Landroid/content/res/Resources;->getDisplayMetrics()Landroid/util/DisplayMetrics;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
iget v0, v0, Landroid/util/DisplayMetrics;->density:F
|
||||
|
||||
mul-float/2addr p1, v0
|
||||
|
||||
:done
|
||||
return p1
|
||||
.end method
|
||||
|
||||
.method finish()V
|
||||
.locals 3
|
||||
|
||||
iget-boolean v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->tracking:Z
|
||||
|
||||
if-eqz v0, :reset_only
|
||||
|
||||
iget-boolean v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->locked:Z
|
||||
|
||||
if-eqz v0, :not_complete
|
||||
|
||||
iget-boolean v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->armed:Z
|
||||
|
||||
if-eqz v0, :not_complete
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->translation:Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
invoke-interface {v0}, Landroidx/compose/runtime/MutableFloatState;->getFloatValue()F
|
||||
|
||||
move-result v0
|
||||
|
||||
invoke-virtual {p0, v0}, Lradiant/gestures/queue/ComposeSwipeState;->actionForOffset(F)I
|
||||
|
||||
move-result v2
|
||||
|
||||
goto :complete_ready
|
||||
|
||||
:not_complete
|
||||
const/4 v2, 0x0
|
||||
|
||||
:complete_ready
|
||||
const/4 v1, 0x0
|
||||
|
||||
iput-boolean v1, p0, Lradiant/gestures/queue/ComposeSwipeState;->tracking:Z
|
||||
|
||||
iput-boolean v1, p0, Lradiant/gestures/queue/ComposeSwipeState;->locked:Z
|
||||
|
||||
iput-boolean v1, p0, Lradiant/gestures/queue/ComposeSwipeState;->armed:Z
|
||||
|
||||
invoke-virtual {p0}, Lradiant/gestures/queue/ComposeSwipeState;->releaseParent()V
|
||||
|
||||
invoke-virtual {p0}, Lradiant/gestures/queue/ComposeSwipeState;->animateReset()V
|
||||
|
||||
if-eqz v2, :done
|
||||
|
||||
invoke-static {}, Lradiant/gestures/queue/ComposeTapGuard;->suppressAfterSwipe()V
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->action:Lradiant/gestures/queue/ComposeSwipeAction;
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
invoke-interface {v0, v2}, Lradiant/gestures/queue/ComposeSwipeAction;->invoke(I)Ljava/lang/Object;
|
||||
|
||||
goto :done
|
||||
|
||||
:reset_only
|
||||
invoke-virtual {p0}, Lradiant/gestures/queue/ComposeSwipeState;->releaseParent()V
|
||||
|
||||
invoke-virtual {p0}, Lradiant/gestures/queue/ComposeSwipeState;->animateReset()V
|
||||
|
||||
:done
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method isCorrectDirection(F)Z
|
||||
.locals 1
|
||||
|
||||
invoke-virtual {p0, p1}, Lradiant/gestures/queue/ComposeSwipeState;->actionForOffset(F)I
|
||||
|
||||
move-result v0
|
||||
|
||||
if-eqz v0, :wrong
|
||||
|
||||
const/4 v0, 0x1
|
||||
|
||||
return v0
|
||||
|
||||
:wrong
|
||||
const/4 v0, 0x0
|
||||
|
||||
return v0
|
||||
.end method
|
||||
|
||||
.method move(FF)V
|
||||
.locals 8
|
||||
|
||||
iget-boolean v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->tracking:Z
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
iget v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->downX:F
|
||||
|
||||
sub-float v0, p1, v0
|
||||
|
||||
iget v1, p0, Lradiant/gestures/queue/ComposeSwipeState;->downY:F
|
||||
|
||||
sub-float v1, p2, v1
|
||||
|
||||
iget-boolean v2, p0, Lradiant/gestures/queue/ComposeSwipeState;->locked:Z
|
||||
|
||||
if-nez v2, :publish
|
||||
|
||||
invoke-static {v0}, Ljava/lang/Math;->abs(F)F
|
||||
|
||||
move-result v2
|
||||
|
||||
invoke-static {v1}, Ljava/lang/Math;->abs(F)F
|
||||
|
||||
move-result v3
|
||||
|
||||
const/high16 v4, 0x41000000 # 8.0f
|
||||
|
||||
invoke-virtual {p0, v4}, Lradiant/gestures/queue/ComposeSwipeState;->dp(F)F
|
||||
|
||||
move-result v4
|
||||
|
||||
cmpg-float v5, v2, v4
|
||||
|
||||
if-ltz v5, :axis_ready
|
||||
|
||||
cmpg-float v5, v3, v4
|
||||
|
||||
if-gez v5, :done
|
||||
|
||||
:axis_ready
|
||||
cmpg-float v5, v2, v3
|
||||
|
||||
if-gtz v5, :horizontal_candidate
|
||||
|
||||
invoke-virtual {p0}, Lradiant/gestures/queue/ComposeSwipeState;->cancelGesture()V
|
||||
|
||||
return-void
|
||||
|
||||
:horizontal_candidate
|
||||
invoke-virtual {p0, v0}, Lradiant/gestures/queue/ComposeSwipeState;->isCorrectDirection(F)Z
|
||||
|
||||
move-result v5
|
||||
|
||||
if-nez v5, :lock
|
||||
|
||||
invoke-virtual {p0}, Lradiant/gestures/queue/ComposeSwipeState;->cancelGesture()V
|
||||
|
||||
return-void
|
||||
|
||||
:lock
|
||||
const/4 v5, 0x1
|
||||
|
||||
iput-boolean v5, p0, Lradiant/gestures/queue/ComposeSwipeState;->locked:Z
|
||||
|
||||
iget-object v6, p0, Lradiant/gestures/queue/ComposeSwipeState;->view:Landroid/view/View;
|
||||
|
||||
if-eqz v6, :publish
|
||||
|
||||
invoke-virtual {v6}, Landroid/view/View;->getParent()Landroid/view/ViewParent;
|
||||
|
||||
move-result-object v6
|
||||
|
||||
if-eqz v6, :publish
|
||||
|
||||
invoke-interface {v6, v5}, Landroid/view/ViewParent;->requestDisallowInterceptTouchEvent(Z)V
|
||||
|
||||
:publish
|
||||
invoke-virtual {p0, v0}, Lradiant/gestures/queue/ComposeSwipeState;->isCorrectDirection(F)Z
|
||||
|
||||
move-result v2
|
||||
|
||||
if-nez v2, :set_offset
|
||||
|
||||
const/4 v2, 0x0
|
||||
|
||||
invoke-virtual {p0, v2}, Lradiant/gestures/queue/ComposeSwipeState;->setOffset(F)V
|
||||
|
||||
iput-boolean v2, p0, Lradiant/gestures/queue/ComposeSwipeState;->armed:Z
|
||||
|
||||
return-void
|
||||
|
||||
:set_offset
|
||||
invoke-virtual {p0, v0}, Lradiant/gestures/queue/ComposeSwipeState;->setOffset(F)V
|
||||
|
||||
iget v2, p0, Lradiant/gestures/queue/ComposeSwipeState;->rowWidth:F
|
||||
|
||||
const/4 v3, 0x0
|
||||
|
||||
cmpg-float v4, v2, v3
|
||||
|
||||
if-lez v4, :done
|
||||
|
||||
const v4, 0x3e99999a # 0.3f
|
||||
|
||||
mul-float/2addr v2, v4
|
||||
|
||||
invoke-static {v0}, Ljava/lang/Math;->abs(F)F
|
||||
|
||||
move-result v0
|
||||
|
||||
cmpg-float v0, v0, v2
|
||||
|
||||
if-ltz v0, :below_threshold
|
||||
|
||||
const/4 v0, 0x1
|
||||
|
||||
goto :arm_ready
|
||||
|
||||
:below_threshold
|
||||
const/4 v0, 0x0
|
||||
|
||||
:arm_ready
|
||||
iget-boolean v1, p0, Lradiant/gestures/queue/ComposeSwipeState;->armed:Z
|
||||
|
||||
if-eq v0, v1, :done
|
||||
|
||||
iput-boolean v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->armed:Z
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->view:Landroid/view/View;
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
const/4 v1, 0x4
|
||||
|
||||
invoke-virtual {v0, v1}, Landroid/view/View;->performHapticFeedback(I)Z
|
||||
|
||||
:done
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method releaseParent()V
|
||||
.locals 2
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->view:Landroid/view/View;
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
invoke-virtual {v0}, Landroid/view/View;->getParent()Landroid/view/ViewParent;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
invoke-interface {v0, v1}, Landroid/view/ViewParent;->requestDisallowInterceptTouchEvent(Z)V
|
||||
|
||||
:done
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method setOffset(F)V
|
||||
.locals 1
|
||||
|
||||
iget-object v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->translation:Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
invoke-interface {v0, p1}, Landroidx/compose/runtime/MutableFloatState;->setFloatValue(F)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method update(Lradiant/gestures/queue/ComposeSwipeAction;ZLandroid/view/View;)V
|
||||
.locals 4
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/queue/ComposeSwipeState;->action:Lradiant/gestures/queue/ComposeSwipeAction;
|
||||
|
||||
iput-object p3, p0, Lradiant/gestures/queue/ComposeSwipeState;->view:Landroid/view/View;
|
||||
|
||||
invoke-virtual {p3}, Landroid/view/View;->getContext()Landroid/content/Context;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
iget-object v1, p0, Lradiant/gestures/queue/ComposeSwipeState;->context:Landroid/content/Context;
|
||||
|
||||
if-ne v0, v1, :load_resources
|
||||
|
||||
goto :context_ready
|
||||
|
||||
:load_resources
|
||||
iput-object v0, p0, Lradiant/gestures/queue/ComposeSwipeState;->context:Landroid/content/Context;
|
||||
|
||||
sget v1, Lcom/aspiro/wamp/R$drawable;->ic_add_to_queue_last:I
|
||||
|
||||
invoke-virtual {v0, v1}, Landroid/content/Context;->getDrawable(I)Landroid/graphics/drawable/Drawable;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
if-eqz v1, :store_icon
|
||||
|
||||
invoke-virtual {v1}, Landroid/graphics/drawable/Drawable;->mutate()Landroid/graphics/drawable/Drawable;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
const/4 v2, -0x1
|
||||
|
||||
invoke-virtual {v1, v2}, Landroid/graphics/drawable/Drawable;->setTint(I)V
|
||||
|
||||
:store_icon
|
||||
iput-object v1, p0, Lradiant/gestures/queue/ComposeSwipeState;->addIcon:Landroid/graphics/drawable/Drawable;
|
||||
|
||||
sget v1, Lcom/aspiro/wamp/R$drawable;->ic_play_next:I
|
||||
|
||||
invoke-virtual {v0, v1}, Landroid/content/Context;->getDrawable(I)Landroid/graphics/drawable/Drawable;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
if-eqz v1, :store_play_next_icon
|
||||
|
||||
invoke-virtual {v1}, Landroid/graphics/drawable/Drawable;->mutate()Landroid/graphics/drawable/Drawable;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
const/4 v2, -0x1
|
||||
|
||||
invoke-virtual {v1, v2}, Landroid/graphics/drawable/Drawable;->setTint(I)V
|
||||
|
||||
:store_play_next_icon
|
||||
iput-object v1, p0, Lradiant/gestures/queue/ComposeSwipeState;->playNextIcon:Landroid/graphics/drawable/Drawable;
|
||||
|
||||
sget v1, Lcom/aspiro/wamp/R$drawable;->ic_add_to_playlist:I
|
||||
|
||||
invoke-virtual {v0, v1}, Landroid/content/Context;->getDrawable(I)Landroid/graphics/drawable/Drawable;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
if-eqz v1, :store_add_to_playlist_icon
|
||||
|
||||
invoke-virtual {v1}, Landroid/graphics/drawable/Drawable;->mutate()Landroid/graphics/drawable/Drawable;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
const/4 v2, -0x1
|
||||
|
||||
invoke-virtual {v1, v2}, Landroid/graphics/drawable/Drawable;->setTint(I)V
|
||||
|
||||
:store_add_to_playlist_icon
|
||||
iput-object v1, p0, Lradiant/gestures/queue/ComposeSwipeState;->addToPlaylistIcon:Landroid/graphics/drawable/Drawable;
|
||||
|
||||
:context_ready
|
||||
if-eqz p1, :enabled_ready
|
||||
|
||||
invoke-interface {p1, v0}, Lradiant/gestures/queue/ComposeSwipeAction;->setContext(Landroid/content/Context;)V
|
||||
|
||||
:enabled_ready
|
||||
iget-boolean v1, p0, Lradiant/gestures/queue/ComposeSwipeState;->enabled:Z
|
||||
|
||||
iput-boolean p2, p0, Lradiant/gestures/queue/ComposeSwipeState;->enabled:Z
|
||||
|
||||
if-nez v1, :was_enabled
|
||||
|
||||
return-void
|
||||
|
||||
:was_enabled
|
||||
if-nez p2, :done
|
||||
|
||||
invoke-virtual {p0}, Lradiant/gestures/queue/ComposeSwipeState;->cancelGesture()V
|
||||
|
||||
:done
|
||||
return-void
|
||||
.end method
|
||||
@@ -0,0 +1,97 @@
|
||||
.class public final Lradiant/gestures/queue/ComposeTapGuard;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Lyl0/a; # MARKER: R8 Lyl0/a;
|
||||
|
||||
|
||||
# static fields
|
||||
.field private static volatile deadline:J
|
||||
|
||||
|
||||
# instance fields
|
||||
.field private final delegate:Lyl0/a; # MARKER: R8 Lyl0/a;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>(Lyl0/a;)V # MARKER: R8 Lyl0/a;
|
||||
.locals 0
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/queue/ComposeTapGuard;->delegate:Lyl0/a; # MARKER: R8 Lyl0/a;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static isSuppressed()Z
|
||||
.locals 5
|
||||
|
||||
invoke-static {}, Landroid/os/SystemClock;->uptimeMillis()J
|
||||
|
||||
move-result-wide v0
|
||||
|
||||
sget-wide v2, Lradiant/gestures/queue/ComposeTapGuard;->deadline:J
|
||||
|
||||
cmp-long v4, v0, v2
|
||||
|
||||
if-ltz v4, :suppressed
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
return v0
|
||||
|
||||
:suppressed
|
||||
const/4 v0, 0x1
|
||||
|
||||
return v0
|
||||
.end method
|
||||
|
||||
.method public static suppressAfterSwipe()V
|
||||
.locals 4
|
||||
|
||||
invoke-static {}, Landroid/os/SystemClock;->uptimeMillis()J
|
||||
|
||||
move-result-wide v0
|
||||
|
||||
const-wide/16 v2, 0x96
|
||||
|
||||
add-long/2addr v0, v2
|
||||
|
||||
sput-wide v0, Lradiant/gestures/queue/ComposeTapGuard;->deadline:J
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static wrap(Lyl0/a;)Lyl0/a; # MARKER: R8 Lyl0/a;
|
||||
.locals 1
|
||||
|
||||
new-instance v0, Lradiant/gestures/queue/ComposeTapGuard;
|
||||
|
||||
invoke-direct {v0, p0}, Lradiant/gestures/queue/ComposeTapGuard;-><init>(Lyl0/a;)V # MARKER: R8 Lyl0/a;
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public invoke()Ljava/lang/Object;
|
||||
.locals 1
|
||||
|
||||
invoke-static {}, Lradiant/gestures/queue/ComposeTapGuard;->isSuppressed()Z
|
||||
|
||||
move-result v0
|
||||
|
||||
if-eqz v0, :dispatch
|
||||
|
||||
sget-object v0, Lkotlin/u;->a:Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
return-object v0
|
||||
|
||||
:dispatch
|
||||
iget-object v0, p0, Lradiant/gestures/queue/ComposeTapGuard;->delegate:Lyl0/a; # MARKER: R8 Lyl0/a;
|
||||
|
||||
invoke-interface {v0}, Lyl0/a;->invoke()Ljava/lang/Object; # MARKER: R8 Lyl0/a;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
@@ -0,0 +1,844 @@
|
||||
.class public final Lradiant/gestures/queue/DynamicMediaQueue;
|
||||
.super Ljava/lang/Object;
|
||||
.source "DynamicMediaQueue.smali"
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public static handleCompact(Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/a;Lradiant/gestures/queue/DynamicMediaQueueEvent;)V # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/a;
|
||||
.locals 13
|
||||
|
||||
if-eqz p0, :done
|
||||
|
||||
if-eqz p1, :done
|
||||
|
||||
iget v4, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->action:I
|
||||
|
||||
const/4 v5, 0x1
|
||||
|
||||
if-lt v4, v5, :done
|
||||
|
||||
const/4 v5, 0x3
|
||||
|
||||
if-gt v4, v5, :done
|
||||
|
||||
iget-object v0, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->pageId:Ljava/lang/String;
|
||||
|
||||
iget-object v1, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->moduleUuid:Ljava/lang/String;
|
||||
|
||||
iget-object v2, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->itemId:Ljava/lang/String;
|
||||
|
||||
iget v3, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->mediaType:I
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
if-eqz v1, :done
|
||||
|
||||
if-eqz v2, :done
|
||||
|
||||
const/4 v4, 0x1
|
||||
|
||||
if-lt v3, v4, :done
|
||||
|
||||
const/4 v4, 0x4
|
||||
|
||||
if-gt v3, v4, :done
|
||||
|
||||
invoke-virtual {p0, v1}, Lq50/c;->c(Ljava/lang/String;)Li50/j; # MARKER: R8 Lq50/c; Li50/j; c
|
||||
|
||||
move-result-object v4
|
||||
|
||||
instance-of v5, v4, Li50/f; # MARKER: R8 Li50/f;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
check-cast v4, Li50/f; # MARKER: R8 Li50/f;
|
||||
|
||||
iget-object v5, v4, Li50/f;->b:Ljava/lang/String; # MARKER: R8 Li50/f; b
|
||||
|
||||
invoke-virtual {v1, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
|
||||
|
||||
move-result v1
|
||||
|
||||
if-eqz v1, :done
|
||||
|
||||
iget-object v1, v4, Li50/f;->g:Ljava/util/ArrayList; # MARKER: R8 Li50/f; g
|
||||
|
||||
invoke-virtual {v1}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
:find_media
|
||||
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
|
||||
|
||||
move-result v5
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
|
||||
|
||||
move-result-object v6
|
||||
|
||||
instance-of v5, v6, Li50/u; # MARKER: R8 Li50/u;
|
||||
|
||||
if-eqz v5, :find_media
|
||||
|
||||
check-cast v6, Li50/u; # MARKER: R8 Li50/u;
|
||||
|
||||
invoke-static {v6}, Li50/v;->a(Li50/u;)Ljava/lang/String; # MARKER: R8 Li50/v; Li50/u; a
|
||||
|
||||
move-result-object v5
|
||||
|
||||
invoke-virtual {v2, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
|
||||
|
||||
move-result v5
|
||||
|
||||
if-eqz v5, :find_media
|
||||
|
||||
instance-of v5, v6, Li50/u$b; # MARKER: R8 Li50/u$b;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
check-cast v6, Li50/u$b; # MARKER: R8 Li50/u$b;
|
||||
|
||||
iget-object v7, v6, Li50/u$b;->a:Ln30/o; # MARKER: R8 Li50/u$b; Ln30/o; a
|
||||
|
||||
const/4 v5, 0x1
|
||||
|
||||
if-ne v3, v5, :check_mix
|
||||
|
||||
instance-of v5, v7, Ln30/a; # MARKER: R8 Ln30/a;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
goto :dependencies
|
||||
|
||||
:check_mix
|
||||
const/4 v5, 0x2
|
||||
|
||||
if-ne v3, v5, :check_playlist
|
||||
|
||||
instance-of v5, v7, Ln30/j; # MARKER: R8 Ln30/j;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
goto :dependencies
|
||||
|
||||
:check_playlist
|
||||
const/4 v5, 0x3
|
||||
|
||||
if-ne v3, v5, :check_track
|
||||
|
||||
instance-of v5, v7, Ln30/k; # MARKER: R8 Ln30/k;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
goto :dependencies
|
||||
|
||||
:check_track
|
||||
instance-of v5, v7, Ln30/p; # MARKER: R8 Ln30/p;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
:dependencies
|
||||
iget-object v8, p0, Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/a;->b:Lcom/tidal/android/dynamicpages/ui/b; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/a; Lcom/tidal/android/dynamicpages/ui/b; b
|
||||
|
||||
instance-of v5, v8, Lcom/tidal/android/dynamicpages/ui/c; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
check-cast v8, Lcom/tidal/android/dynamicpages/ui/c; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c;
|
||||
|
||||
iget-object v5, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->context:Landroid/content/Context;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
iget-object v9, v8, Lcom/tidal/android/dynamicpages/ui/c;->b:Lcom/tidal/android/navigation/NavigationInfo; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c; b
|
||||
|
||||
new-instance v10, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;
|
||||
|
||||
iget-object v11, v4, Li50/f;->a:Ljava/lang/String; # MARKER: R8 Li50/f; a
|
||||
|
||||
iget v12, v4, Li50/f;->d:I # MARKER: R8 Li50/f; d
|
||||
|
||||
invoke-static {v12}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
|
||||
|
||||
move-result-object v12
|
||||
|
||||
invoke-direct {v10, v0, v11, v12}, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
|
||||
|
||||
const/4 v0, 0x1
|
||||
|
||||
if-ne v3, v0, :mix
|
||||
|
||||
check-cast v7, Ln30/a; # MARKER: R8 Ln30/a;
|
||||
|
||||
invoke-static {v7}, Lae0/a;->b(Ln30/a;)Lcom/aspiro/wamp/model/Album; # MARKER: R8 Lae0/a; Ln30/a; a
|
||||
|
||||
move-result-object v12
|
||||
|
||||
invoke-static {v8}, Lradiant/gestures/queue/DynamicMediaQueue;->menu(Lcom/tidal/android/dynamicpages/ui/c;)Lh4/a; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c; Lh4/a;
|
||||
|
||||
move-result-object v6
|
||||
|
||||
if-eqz v6, :done
|
||||
|
||||
iget v0, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->action:I
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
if-ne v0, v1, :check_add_album_to_playlist
|
||||
|
||||
invoke-static {v5, v12, v10, v9, v6}, Lradiant/gestures/queue/QueueExecutor;->playNextAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; # MARKER: R8 Lh4/a;
|
||||
|
||||
goto :done
|
||||
|
||||
:check_add_album_to_playlist
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-ne v0, v1, :append_album
|
||||
|
||||
invoke-static {v5, v12, v10, v9, v6}, Lradiant/gestures/queue/QueueExecutor;->addToPlaylistAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V # MARKER: R8 Lh4/a;
|
||||
|
||||
goto :done
|
||||
|
||||
:append_album
|
||||
invoke-static {v5, v12, v10, v9, v6}, Lradiant/gestures/queue/QueueExecutor;->album(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; # MARKER: R8 Lh4/a;
|
||||
|
||||
goto :done
|
||||
|
||||
:mix
|
||||
const/4 v0, 0x2
|
||||
|
||||
if-ne v3, v0, :playlist
|
||||
|
||||
check-cast v7, Ln30/j; # MARKER: R8 Ln30/j;
|
||||
|
||||
invoke-static {v7}, Lae0/g;->b(Ln30/j;)Lcom/aspiro/wamp/mix/model/Mix; # MARKER: R8 Lae0/g; Ln30/j; b
|
||||
|
||||
move-result-object v12
|
||||
|
||||
invoke-static {v8}, Lradiant/gestures/queue/DynamicMediaQueue;->menu(Lcom/tidal/android/dynamicpages/ui/c;)Lh4/a; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c; Lh4/a;
|
||||
|
||||
move-result-object v6
|
||||
|
||||
if-eqz v6, :done
|
||||
|
||||
iget v0, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->action:I
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
if-ne v0, v1, :check_add_mix_to_playlist
|
||||
|
||||
invoke-static {v5, v12, v10, v9, v6}, Lradiant/gestures/queue/QueueExecutor;->playNextMix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; # MARKER: R8 Lh4/a;
|
||||
|
||||
goto :done
|
||||
|
||||
:check_add_mix_to_playlist
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-ne v0, v1, :append_mix
|
||||
|
||||
invoke-static {v5, v12, v10, v9, v6}, Lradiant/gestures/queue/QueueExecutor;->addToPlaylistMix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V # MARKER: R8 Lh4/a;
|
||||
|
||||
goto :done
|
||||
|
||||
:append_mix
|
||||
invoke-static {v5, v12, v10, v9, v6}, Lradiant/gestures/queue/QueueExecutor;->mix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; # MARKER: R8 Lh4/a;
|
||||
|
||||
goto :done
|
||||
|
||||
:playlist
|
||||
const/4 v0, 0x3
|
||||
|
||||
if-ne v3, v0, :track
|
||||
|
||||
check-cast v7, Ln30/k; # MARKER: R8 Ln30/k;
|
||||
|
||||
invoke-static {v7}, Lae0/h;->a(Ln30/k;)Lcom/aspiro/wamp/model/Playlist; # MARKER: R8 Lae0/h; Ln30/k; a
|
||||
|
||||
move-result-object v12
|
||||
|
||||
iget v0, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->action:I
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
if-ne v0, v1, :check_add_playlist_to_playlist
|
||||
|
||||
invoke-static {v5, v12, v10, v9}, Lradiant/gestures/queue/QueueExecutor;->playNextPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
|
||||
|
||||
goto :done
|
||||
|
||||
:check_add_playlist_to_playlist
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-ne v0, v1, :append_playlist
|
||||
|
||||
invoke-static {v5, v12, v10, v9}, Lradiant/gestures/queue/QueueExecutor;->addToPlaylistPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
|
||||
|
||||
goto :done
|
||||
|
||||
:append_playlist
|
||||
invoke-static {v5, v12, v10, v9}, Lradiant/gestures/queue/QueueExecutor;->playlist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
|
||||
|
||||
goto :done
|
||||
|
||||
:track
|
||||
check-cast v7, Ln30/p; # MARKER: R8 Ln30/p;
|
||||
|
||||
invoke-static {v7}, Lae0/i;->c(Ln30/p;)Lcom/aspiro/wamp/model/Track; # MARKER: R8 Lae0/i; Ln30/p; a
|
||||
|
||||
move-result-object v12
|
||||
|
||||
const/4 v6, 0x0
|
||||
|
||||
if-eqz v9, :navigation_ready
|
||||
|
||||
invoke-static {v9}, Lcom/tidal/android/navigation/a;->b(Lcom/tidal/android/navigation/NavigationInfo;)Lcom/tidal/android/navigation/NavigationInfo$Node; # MARKER: R8 Lcom/tidal/android/navigation/a; b
|
||||
|
||||
move-result-object v6
|
||||
|
||||
:navigation_ready
|
||||
iget-object v0, v4, Li50/f;->e:Ljava/lang/String; # MARKER: R8 Li50/f; e
|
||||
|
||||
invoke-static {v6, v2, v0}, Lcom/aspiro/wamp/playqueue/source/model/b;->o(Lcom/tidal/android/navigation/NavigationInfo;Ljava/lang/String;Ljava/lang/String;)Lcom/aspiro/wamp/playqueue/source/model/ItemSource; # MARKER: R8 Lcom/aspiro/wamp/playqueue/source/model/b; o
|
||||
|
||||
move-result-object v11
|
||||
|
||||
invoke-virtual {v11, v12}, Lcom/aspiro/wamp/playqueue/source/model/Source;->addSourceItem(Lcom/aspiro/wamp/model/MediaItem;)V
|
||||
|
||||
iget v0, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->action:I
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
if-ne v0, v1, :check_add_track_to_playlist
|
||||
|
||||
invoke-static {v5, v12, v10, v11}, Lradiant/gestures/queue/QueueExecutor;->playNextTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z
|
||||
|
||||
goto :done
|
||||
|
||||
:check_add_track_to_playlist
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-ne v0, v1, :append_track
|
||||
|
||||
invoke-static {v5, v12, v10, v11}, Lradiant/gestures/queue/QueueExecutor;->addToPlaylistTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)V
|
||||
|
||||
goto :done
|
||||
|
||||
:append_track
|
||||
invoke-static {v5, v12, v10, v11}, Lradiant/gestures/queue/QueueExecutor;->track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z
|
||||
|
||||
:done
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static handlePublicPlaylist(Lcom/tidal/android/dynamicpages/ui/modules/publicplaylistlist/PublicPlaylistListModuleManager;Lradiant/gestures/queue/DynamicMediaQueueEvent;)V
|
||||
.locals 11
|
||||
|
||||
if-eqz p0, :done
|
||||
|
||||
if-eqz p1, :done
|
||||
|
||||
iget v0, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->action:I
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
if-lt v0, v1, :done
|
||||
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-gt v0, v1, :done
|
||||
|
||||
iget v0, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->mediaType:I
|
||||
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-ne v0, v1, :done
|
||||
|
||||
iget-object v0, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->pageId:Ljava/lang/String;
|
||||
|
||||
iget-object v1, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->moduleUuid:Ljava/lang/String;
|
||||
|
||||
iget-object v2, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->itemId:Ljava/lang/String;
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
if-eqz v1, :done
|
||||
|
||||
if-eqz v2, :done
|
||||
|
||||
invoke-virtual {p0, v1}, Lq50/c;->c(Ljava/lang/String;)Li50/j; # MARKER: R8 Lq50/c; Li50/j; c
|
||||
|
||||
move-result-object v3
|
||||
|
||||
instance-of v4, v3, Li50/y; # MARKER: R8 Li50/y;
|
||||
|
||||
if-eqz v4, :done
|
||||
|
||||
check-cast v3, Li50/y; # MARKER: R8 Li50/y;
|
||||
|
||||
iget-object v4, v3, Li50/y;->b:Ljava/lang/String; # MARKER: R8 Li50/y; b
|
||||
|
||||
invoke-virtual {v1, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
|
||||
|
||||
move-result v1
|
||||
|
||||
if-eqz v1, :done
|
||||
|
||||
iget-object v1, v3, Li50/y;->f:Ljava/util/ArrayList; # MARKER: R8 Li50/y; f
|
||||
|
||||
invoke-virtual {v1}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
:find_playlist
|
||||
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
|
||||
|
||||
move-result v4
|
||||
|
||||
if-eqz v4, :done
|
||||
|
||||
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
|
||||
|
||||
move-result-object v4
|
||||
|
||||
instance-of v5, v4, Li50/u; # MARKER: R8 Li50/u;
|
||||
|
||||
if-eqz v5, :find_playlist
|
||||
|
||||
check-cast v4, Li50/u; # MARKER: R8 Li50/u;
|
||||
|
||||
invoke-static {v4}, Li50/v;->a(Li50/u;)Ljava/lang/String; # MARKER: R8 Li50/v; Li50/u; a
|
||||
|
||||
move-result-object v5
|
||||
|
||||
invoke-virtual {v2, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
|
||||
|
||||
move-result v5
|
||||
|
||||
if-eqz v5, :find_playlist
|
||||
|
||||
instance-of v5, v4, Li50/u$b; # MARKER: R8 Li50/u$b;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
check-cast v4, Li50/u$b; # MARKER: R8 Li50/u$b;
|
||||
|
||||
iget-object v4, v4, Li50/u$b;->a:Ln30/o; # MARKER: R8 Li50/u$b; Ln30/o; a
|
||||
|
||||
instance-of v5, v4, Ln30/k; # MARKER: R8 Ln30/k;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
check-cast v4, Ln30/k; # MARKER: R8 Ln30/k;
|
||||
|
||||
iget-object v5, p0, Lcom/tidal/android/dynamicpages/ui/modules/publicplaylistlist/PublicPlaylistListModuleManager;->f:Lcom/tidal/android/dynamicpages/ui/b; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/b; f
|
||||
|
||||
instance-of v6, v5, Lcom/tidal/android/dynamicpages/ui/c; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c;
|
||||
|
||||
if-eqz v6, :done
|
||||
|
||||
check-cast v5, Lcom/tidal/android/dynamicpages/ui/c; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c;
|
||||
|
||||
iget-object v6, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->context:Landroid/content/Context;
|
||||
|
||||
if-eqz v6, :done
|
||||
|
||||
iget-object v7, v5, Lcom/tidal/android/dynamicpages/ui/c;->b:Lcom/tidal/android/navigation/NavigationInfo; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c; b
|
||||
|
||||
new-instance v8, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;
|
||||
|
||||
iget-object v9, v3, Li50/y;->a:Ljava/lang/String; # MARKER: R8 Li50/y; a
|
||||
|
||||
iget v10, v3, Li50/y;->e:I # MARKER: R8 Li50/y; e
|
||||
|
||||
invoke-static {v10}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
|
||||
|
||||
move-result-object v10
|
||||
|
||||
invoke-direct {v8, v0, v9, v10}, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
|
||||
|
||||
invoke-static {v4}, Lae0/h;->a(Ln30/k;)Lcom/aspiro/wamp/model/Playlist; # MARKER: R8 Lae0/h; Ln30/k; a
|
||||
|
||||
move-result-object v4
|
||||
|
||||
iget v0, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->action:I
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
if-ne v0, v1, :check_add_playlist_to_playlist
|
||||
|
||||
invoke-static {v6, v4, v8, v7}, Lradiant/gestures/queue/QueueExecutor;->playNextPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
|
||||
|
||||
goto :done
|
||||
|
||||
:check_add_playlist_to_playlist
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-ne v0, v1, :append_playlist
|
||||
|
||||
invoke-static {v6, v4, v8, v7}, Lradiant/gestures/queue/QueueExecutor;->addToPlaylistPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
|
||||
|
||||
goto :done
|
||||
|
||||
:append_playlist
|
||||
invoke-static {v6, v4, v8, v7}, Lradiant/gestures/queue/QueueExecutor;->playlist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
|
||||
|
||||
:done
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static handleVertical(Lcom/tidal/android/dynamicpages/ui/modules/verticallistcard/VerticalListCardModuleManager;Lradiant/gestures/queue/DynamicMediaQueueEvent;)V
|
||||
.locals 13
|
||||
|
||||
if-eqz p0, :done
|
||||
|
||||
if-eqz p1, :done
|
||||
|
||||
iget v4, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->action:I
|
||||
|
||||
const/4 v5, 0x1
|
||||
|
||||
if-lt v4, v5, :done
|
||||
|
||||
const/4 v5, 0x3
|
||||
|
||||
if-gt v4, v5, :done
|
||||
|
||||
iget-object v0, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->pageId:Ljava/lang/String;
|
||||
|
||||
iget-object v1, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->moduleUuid:Ljava/lang/String;
|
||||
|
||||
iget-object v2, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->itemId:Ljava/lang/String;
|
||||
|
||||
iget v3, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->mediaType:I
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
if-eqz v1, :done
|
||||
|
||||
if-eqz v2, :done
|
||||
|
||||
const/4 v4, 0x1
|
||||
|
||||
if-lt v3, v4, :done
|
||||
|
||||
const/4 v4, 0x4
|
||||
|
||||
if-gt v3, v4, :done
|
||||
|
||||
invoke-virtual {p0, v1}, Lq50/c;->c(Ljava/lang/String;)Li50/j; # MARKER: R8 Lq50/c; Li50/j; c
|
||||
|
||||
move-result-object v4
|
||||
|
||||
instance-of v5, v4, Li50/f0; # MARKER: R8 Li50/f0;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
check-cast v4, Li50/f0; # MARKER: R8 Li50/f0;
|
||||
|
||||
iget-object v5, v4, Li50/f0;->b:Ljava/lang/String; # MARKER: R8 Li50/f0; b
|
||||
|
||||
invoke-virtual {v1, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
|
||||
|
||||
move-result v1
|
||||
|
||||
if-eqz v1, :done
|
||||
|
||||
iget-object v1, v4, Li50/f0;->g:Ljava/util/ArrayList; # MARKER: R8 Li50/f0; g
|
||||
|
||||
invoke-virtual {v1}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
:find_media
|
||||
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
|
||||
|
||||
move-result v5
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
|
||||
|
||||
move-result-object v6
|
||||
|
||||
instance-of v5, v6, Li50/u; # MARKER: R8 Li50/u;
|
||||
|
||||
if-eqz v5, :find_media
|
||||
|
||||
check-cast v6, Li50/u; # MARKER: R8 Li50/u;
|
||||
|
||||
invoke-static {v6}, Li50/v;->a(Li50/u;)Ljava/lang/String; # MARKER: R8 Li50/v; Li50/u; a
|
||||
|
||||
move-result-object v5
|
||||
|
||||
invoke-virtual {v2, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
|
||||
|
||||
move-result v5
|
||||
|
||||
if-eqz v5, :find_media
|
||||
|
||||
instance-of v5, v6, Li50/u$b; # MARKER: R8 Li50/u$b;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
check-cast v6, Li50/u$b; # MARKER: R8 Li50/u$b;
|
||||
|
||||
iget-object v7, v6, Li50/u$b;->a:Ln30/o; # MARKER: R8 Li50/u$b; Ln30/o; a
|
||||
|
||||
const/4 v5, 0x1
|
||||
|
||||
if-ne v3, v5, :check_mix
|
||||
|
||||
instance-of v5, v7, Ln30/a; # MARKER: R8 Ln30/a;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
goto :dependencies
|
||||
|
||||
:check_mix
|
||||
const/4 v5, 0x2
|
||||
|
||||
if-ne v3, v5, :check_playlist
|
||||
|
||||
instance-of v5, v7, Ln30/j; # MARKER: R8 Ln30/j;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
goto :dependencies
|
||||
|
||||
:check_playlist
|
||||
const/4 v5, 0x3
|
||||
|
||||
if-ne v3, v5, :check_track
|
||||
|
||||
instance-of v5, v7, Ln30/k; # MARKER: R8 Ln30/k;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
goto :dependencies
|
||||
|
||||
:check_track
|
||||
instance-of v5, v7, Ln30/p; # MARKER: R8 Ln30/p;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
:dependencies
|
||||
iget-object v8, p0, Lcom/tidal/android/dynamicpages/ui/modules/verticallistcard/VerticalListCardModuleManager;->e:Lcom/tidal/android/dynamicpages/ui/b; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/b; e
|
||||
|
||||
instance-of v5, v8, Lcom/tidal/android/dynamicpages/ui/c; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
check-cast v8, Lcom/tidal/android/dynamicpages/ui/c; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c;
|
||||
|
||||
iget-object v5, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->context:Landroid/content/Context;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
iget-object v9, v8, Lcom/tidal/android/dynamicpages/ui/c;->b:Lcom/tidal/android/navigation/NavigationInfo; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c; b
|
||||
|
||||
new-instance v10, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;
|
||||
|
||||
iget-object v11, v4, Li50/f0;->a:Ljava/lang/String; # MARKER: R8 Li50/f0; a
|
||||
|
||||
iget v12, v4, Li50/f0;->f:I # MARKER: R8 Li50/f0; f
|
||||
|
||||
invoke-static {v12}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
|
||||
|
||||
move-result-object v12
|
||||
|
||||
invoke-direct {v10, v0, v11, v12}, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
|
||||
|
||||
const/4 v0, 0x1
|
||||
|
||||
if-ne v3, v0, :mix
|
||||
|
||||
check-cast v7, Ln30/a; # MARKER: R8 Ln30/a;
|
||||
|
||||
invoke-static {v7}, Lae0/a;->b(Ln30/a;)Lcom/aspiro/wamp/model/Album; # MARKER: R8 Lae0/a; Ln30/a; a
|
||||
|
||||
move-result-object v12
|
||||
|
||||
invoke-static {v8}, Lradiant/gestures/queue/DynamicMediaQueue;->menu(Lcom/tidal/android/dynamicpages/ui/c;)Lh4/a; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c; Lh4/a;
|
||||
|
||||
move-result-object v6
|
||||
|
||||
if-eqz v6, :done
|
||||
|
||||
iget v0, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->action:I
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
if-ne v0, v1, :check_add_album_to_playlist
|
||||
|
||||
invoke-static {v5, v12, v10, v9, v6}, Lradiant/gestures/queue/QueueExecutor;->playNextAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; # MARKER: R8 Lh4/a;
|
||||
|
||||
goto :done
|
||||
|
||||
:check_add_album_to_playlist
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-ne v0, v1, :append_album
|
||||
|
||||
invoke-static {v5, v12, v10, v9, v6}, Lradiant/gestures/queue/QueueExecutor;->addToPlaylistAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V # MARKER: R8 Lh4/a;
|
||||
|
||||
goto :done
|
||||
|
||||
:append_album
|
||||
invoke-static {v5, v12, v10, v9, v6}, Lradiant/gestures/queue/QueueExecutor;->album(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; # MARKER: R8 Lh4/a;
|
||||
|
||||
goto :done
|
||||
|
||||
:mix
|
||||
const/4 v0, 0x2
|
||||
|
||||
if-ne v3, v0, :playlist
|
||||
|
||||
check-cast v7, Ln30/j; # MARKER: R8 Ln30/j;
|
||||
|
||||
invoke-static {v7}, Lae0/g;->b(Ln30/j;)Lcom/aspiro/wamp/mix/model/Mix; # MARKER: R8 Lae0/g; Ln30/j; b
|
||||
|
||||
move-result-object v12
|
||||
|
||||
invoke-static {v8}, Lradiant/gestures/queue/DynamicMediaQueue;->menu(Lcom/tidal/android/dynamicpages/ui/c;)Lh4/a; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c; Lh4/a;
|
||||
|
||||
move-result-object v6
|
||||
|
||||
if-eqz v6, :done
|
||||
|
||||
iget v0, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->action:I
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
if-ne v0, v1, :check_add_mix_to_playlist
|
||||
|
||||
invoke-static {v5, v12, v10, v9, v6}, Lradiant/gestures/queue/QueueExecutor;->playNextMix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; # MARKER: R8 Lh4/a;
|
||||
|
||||
goto :done
|
||||
|
||||
:check_add_mix_to_playlist
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-ne v0, v1, :append_mix
|
||||
|
||||
invoke-static {v5, v12, v10, v9, v6}, Lradiant/gestures/queue/QueueExecutor;->addToPlaylistMix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V # MARKER: R8 Lh4/a;
|
||||
|
||||
goto :done
|
||||
|
||||
:append_mix
|
||||
invoke-static {v5, v12, v10, v9, v6}, Lradiant/gestures/queue/QueueExecutor;->mix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; # MARKER: R8 Lh4/a;
|
||||
|
||||
goto :done
|
||||
|
||||
:playlist
|
||||
const/4 v0, 0x3
|
||||
|
||||
if-ne v3, v0, :track
|
||||
|
||||
check-cast v7, Ln30/k; # MARKER: R8 Ln30/k;
|
||||
|
||||
invoke-static {v7}, Lae0/h;->a(Ln30/k;)Lcom/aspiro/wamp/model/Playlist; # MARKER: R8 Lae0/h; Ln30/k; a
|
||||
|
||||
move-result-object v12
|
||||
|
||||
iget v0, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->action:I
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
if-ne v0, v1, :check_add_playlist_to_playlist
|
||||
|
||||
invoke-static {v5, v12, v10, v9}, Lradiant/gestures/queue/QueueExecutor;->playNextPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
|
||||
|
||||
goto :done
|
||||
|
||||
:check_add_playlist_to_playlist
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-ne v0, v1, :append_playlist
|
||||
|
||||
invoke-static {v5, v12, v10, v9}, Lradiant/gestures/queue/QueueExecutor;->addToPlaylistPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
|
||||
|
||||
goto :done
|
||||
|
||||
:append_playlist
|
||||
invoke-static {v5, v12, v10, v9}, Lradiant/gestures/queue/QueueExecutor;->playlist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
|
||||
|
||||
goto :done
|
||||
|
||||
:track
|
||||
check-cast v7, Ln30/p; # MARKER: R8 Ln30/p;
|
||||
|
||||
invoke-static {v7}, Lae0/i;->c(Ln30/p;)Lcom/aspiro/wamp/model/Track; # MARKER: R8 Lae0/i; Ln30/p; a
|
||||
|
||||
move-result-object v12
|
||||
|
||||
const/4 v6, 0x0
|
||||
|
||||
if-eqz v9, :navigation_ready
|
||||
|
||||
invoke-static {v9}, Lcom/tidal/android/navigation/a;->b(Lcom/tidal/android/navigation/NavigationInfo;)Lcom/tidal/android/navigation/NavigationInfo$Node; # MARKER: R8 Lcom/tidal/android/navigation/a; b
|
||||
|
||||
move-result-object v6
|
||||
|
||||
:navigation_ready
|
||||
iget-object v0, v4, Li50/f0;->c:Ljava/lang/String; # MARKER: R8 Li50/f0; c
|
||||
|
||||
invoke-static {v6, v2, v0}, Lcom/aspiro/wamp/playqueue/source/model/b;->o(Lcom/tidal/android/navigation/NavigationInfo;Ljava/lang/String;Ljava/lang/String;)Lcom/aspiro/wamp/playqueue/source/model/ItemSource; # MARKER: R8 Lcom/aspiro/wamp/playqueue/source/model/b; o
|
||||
|
||||
move-result-object v11
|
||||
|
||||
invoke-virtual {v11, v12}, Lcom/aspiro/wamp/playqueue/source/model/Source;->addSourceItem(Lcom/aspiro/wamp/model/MediaItem;)V
|
||||
|
||||
iget v0, p1, Lradiant/gestures/queue/DynamicMediaQueueEvent;->action:I
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
if-ne v0, v1, :check_add_track_to_playlist
|
||||
|
||||
invoke-static {v5, v12, v10, v11}, Lradiant/gestures/queue/QueueExecutor;->playNextTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z
|
||||
|
||||
goto :done
|
||||
|
||||
:check_add_track_to_playlist
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-ne v0, v1, :append_track
|
||||
|
||||
invoke-static {v5, v12, v10, v11}, Lradiant/gestures/queue/QueueExecutor;->addToPlaylistTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)V
|
||||
|
||||
goto :done
|
||||
|
||||
:append_track
|
||||
invoke-static {v5, v12, v10, v11}, Lradiant/gestures/queue/QueueExecutor;->track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z
|
||||
|
||||
:done
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private static menu(Lcom/tidal/android/dynamicpages/ui/c;)Lh4/a; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c; Lh4/a;
|
||||
.locals 2
|
||||
|
||||
iget-object v0, p0, Lcom/tidal/android/dynamicpages/ui/c;->a:Lcom/aspiro/wamp/core/l; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c; Lcom/aspiro/wamp/core/l; a
|
||||
|
||||
instance-of v1, v0, Lg9/u1; # MARKER: R8 Lg9/u1;
|
||||
|
||||
if-eqz v1, :invalid
|
||||
|
||||
check-cast v0, Lg9/u1; # MARKER: R8 Lg9/u1;
|
||||
|
||||
iget-object v0, v0, Lg9/u1;->b:Ld40/a; # MARKER: R8 Lg9/u1; Ld40/a; b
|
||||
|
||||
instance-of v1, v0, Lh4/a; # MARKER: R8 Lh4/a;
|
||||
|
||||
if-eqz v1, :invalid
|
||||
|
||||
check-cast v0, Lh4/a; # MARKER: R8 Lh4/a;
|
||||
|
||||
return-object v0
|
||||
|
||||
:invalid
|
||||
const/4 v0, 0x0
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
@@ -0,0 +1,43 @@
|
||||
.class public final Lradiant/gestures/queue/DynamicMediaQueueEvent;
|
||||
.super Ljava/lang/Object;
|
||||
.source "DynamicMediaQueueEvent.smali"
|
||||
|
||||
# interfaces
|
||||
.implements Lcom/tidal/android/dynamicpages/ui/modules/verticallistcard/b; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/modules/verticallistcard/b;
|
||||
.implements Lcom/tidal/android/dynamicpages/ui/modules/publicplaylistlist/b; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/modules/publicplaylistlist/b;
|
||||
|
||||
|
||||
# instance fields
|
||||
.field public final action:I
|
||||
|
||||
.field public final context:Landroid/content/Context;
|
||||
|
||||
.field public final itemId:Ljava/lang/String;
|
||||
|
||||
.field public final mediaType:I
|
||||
|
||||
.field public final moduleUuid:Ljava/lang/String;
|
||||
|
||||
.field public final pageId:Ljava/lang/String;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V
|
||||
.locals 0
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/queue/DynamicMediaQueueEvent;->context:Landroid/content/Context;
|
||||
|
||||
iput-object p2, p0, Lradiant/gestures/queue/DynamicMediaQueueEvent;->pageId:Ljava/lang/String;
|
||||
|
||||
iput-object p3, p0, Lradiant/gestures/queue/DynamicMediaQueueEvent;->moduleUuid:Ljava/lang/String;
|
||||
|
||||
iput-object p4, p0, Lradiant/gestures/queue/DynamicMediaQueueEvent;->itemId:Ljava/lang/String;
|
||||
|
||||
iput p5, p0, Lradiant/gestures/queue/DynamicMediaQueueEvent;->mediaType:I
|
||||
|
||||
iput p6, p0, Lradiant/gestures/queue/DynamicMediaQueueEvent;->action:I
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -0,0 +1,189 @@
|
||||
.class public final Lradiant/gestures/queue/DynamicTrackQueue;
|
||||
.super Ljava/lang/Object;
|
||||
.source "DynamicTrackQueue.smali"
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public static handle(Lcom/tidal/android/dynamicpages/ui/modules/tracklist/TrackListModuleManager;Lradiant/gestures/queue/DynamicTrackQueueEvent;)V
|
||||
.locals 11
|
||||
|
||||
if-eqz p0, :done
|
||||
|
||||
if-eqz p1, :done
|
||||
|
||||
iget-object v0, p1, Lradiant/gestures/queue/DynamicTrackQueueEvent;->pageId:Ljava/lang/String;
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
invoke-virtual {v0}, Ljava/lang/String;->length()I
|
||||
|
||||
move-result v1
|
||||
|
||||
if-lez v1, :done
|
||||
|
||||
iget-object v1, p1, Lradiant/gestures/queue/DynamicTrackQueueEvent;->moduleUuid:Ljava/lang/String;
|
||||
|
||||
if-eqz v1, :done
|
||||
|
||||
invoke-virtual {v1}, Ljava/lang/String;->length()I
|
||||
|
||||
move-result v2
|
||||
|
||||
if-lez v2, :done
|
||||
|
||||
iget-wide v2, p1, Lradiant/gestures/queue/DynamicTrackQueueEvent;->trackId:J
|
||||
|
||||
const-wide/16 v4, 0x0
|
||||
|
||||
cmp-long v4, v2, v4
|
||||
|
||||
if-lez v4, :done
|
||||
|
||||
invoke-virtual {p0, v1}, Lq50/c;->c(Ljava/lang/String;)Li50/j; # MARKER: R8 Lq50/c; Li50/j; c
|
||||
|
||||
move-result-object v4
|
||||
|
||||
instance-of v5, v4, Li50/e0; # MARKER: R8 Li50/e0;
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
check-cast v4, Li50/e0; # MARKER: R8 Li50/e0;
|
||||
|
||||
iget-object v5, v4, Li50/e0;->b:Ljava/lang/String; # MARKER: R8 Li50/e0; b
|
||||
|
||||
invoke-virtual {v1, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
|
||||
|
||||
move-result v1
|
||||
|
||||
if-eqz v1, :done
|
||||
|
||||
iget-object v1, v4, Li50/e0;->f:Ljava/util/ArrayList; # MARKER: R8 Li50/e0; f
|
||||
|
||||
if-eqz v1, :done
|
||||
|
||||
invoke-virtual {v1}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
:find_track
|
||||
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
|
||||
|
||||
move-result v5
|
||||
|
||||
if-eqz v5, :done
|
||||
|
||||
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
|
||||
|
||||
move-result-object v5
|
||||
|
||||
instance-of v6, v5, Li50/u$b; # MARKER: R8 Li50/u$b;
|
||||
|
||||
if-eqz v6, :find_track
|
||||
|
||||
check-cast v5, Li50/u$b; # MARKER: R8 Li50/u$b;
|
||||
|
||||
iget-object v5, v5, Li50/u$b;->a:Ln30/o; # MARKER: R8 Li50/u$b; Ln30/o; a
|
||||
|
||||
instance-of v6, v5, Ln30/p; # MARKER: R8 Ln30/p;
|
||||
|
||||
if-eqz v6, :find_track
|
||||
|
||||
check-cast v5, Ln30/p; # MARKER: R8 Ln30/p;
|
||||
|
||||
iget-wide v6, v5, Ln30/p;->a:J # MARKER: R8 Ln30/p; a
|
||||
|
||||
cmp-long v6, v6, v2
|
||||
|
||||
if-nez v6, :find_track
|
||||
|
||||
iget-object v1, p0, Lcom/tidal/android/dynamicpages/ui/modules/tracklist/TrackListModuleManager;->b:Lcom/tidal/android/dynamicpages/ui/b; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/b; b
|
||||
|
||||
instance-of v2, v1, Lcom/tidal/android/dynamicpages/ui/c; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c;
|
||||
|
||||
if-eqz v2, :done
|
||||
|
||||
check-cast v1, Lcom/tidal/android/dynamicpages/ui/c; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c;
|
||||
|
||||
iget-object v6, v1, Lcom/tidal/android/dynamicpages/ui/c;->b:Lcom/tidal/android/navigation/NavigationInfo; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/c; b
|
||||
|
||||
if-eqz v6, :done
|
||||
|
||||
iget-object v1, p1, Lradiant/gestures/queue/DynamicTrackQueueEvent;->context:Landroid/content/Context;
|
||||
|
||||
if-eqz v1, :done
|
||||
|
||||
invoke-static {v5}, Lae0/i;->c(Ln30/p;)Lcom/aspiro/wamp/model/Track; # MARKER: R8 Lae0/i; Ln30/p; a
|
||||
|
||||
move-result-object v7
|
||||
|
||||
if-eqz v7, :done
|
||||
|
||||
iget-object v2, v4, Li50/e0;->a:Ljava/lang/String; # MARKER: R8 Li50/e0; a
|
||||
|
||||
if-eqz v2, :done
|
||||
|
||||
invoke-virtual {v2}, Ljava/lang/String;->length()I
|
||||
|
||||
move-result v3
|
||||
|
||||
if-lez v3, :done
|
||||
|
||||
new-instance v8, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;
|
||||
|
||||
iget v3, v4, Li50/e0;->e:I # MARKER: R8 Li50/e0; e
|
||||
|
||||
invoke-static {v3}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
|
||||
|
||||
move-result-object v3
|
||||
|
||||
invoke-direct {v8, v0, v2, v3}, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
|
||||
|
||||
iget-wide v2, p1, Lradiant/gestures/queue/DynamicTrackQueueEvent;->trackId:J
|
||||
|
||||
invoke-static {v2, v3}, Ljava/lang/String;->valueOf(J)Ljava/lang/String;
|
||||
|
||||
move-result-object v2
|
||||
|
||||
iget-object v3, v4, Li50/e0;->c:Ljava/lang/String; # MARKER: R8 Li50/e0; c
|
||||
|
||||
if-eqz v3, :done
|
||||
|
||||
iget-object v10, v4, Li50/e0;->g:Ljava/lang/String; # MARKER: R8 Li50/e0; g
|
||||
|
||||
invoke-static {v10}, Lcom/aspiro/wamp/playqueue/source/model/ItemSource$NavigationType$a;->a(Ljava/lang/String;)Lcom/aspiro/wamp/playqueue/source/model/ItemSource$NavigationType; # MARKER: R8 a
|
||||
|
||||
move-result-object v4
|
||||
|
||||
invoke-static {v2, v3, v6, v4}, Lcom/aspiro/wamp/playqueue/source/model/b;->j(Ljava/lang/String;Ljava/lang/String;Lcom/tidal/android/navigation/NavigationInfo;Lcom/aspiro/wamp/playqueue/source/model/ItemSource$NavigationType;)Lcom/aspiro/wamp/playqueue/source/model/ItemSource; # MARKER: R8 Lcom/aspiro/wamp/playqueue/source/model/b; j
|
||||
|
||||
move-result-object v9
|
||||
|
||||
if-eqz v9, :done
|
||||
|
||||
invoke-virtual {v9, v7}, Lcom/aspiro/wamp/playqueue/source/model/Source;->addSourceItem(Lcom/aspiro/wamp/model/MediaItem;)V
|
||||
|
||||
iget v0, p1, Lradiant/gestures/queue/DynamicTrackQueueEvent;->action:I
|
||||
|
||||
const/4 v2, 0x1
|
||||
|
||||
if-ne v0, v2, :check_add_to_playlist
|
||||
|
||||
invoke-static {v1, v7, v8, v9}, Lradiant/gestures/queue/QueueExecutor;->playNextTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z
|
||||
|
||||
goto :done
|
||||
|
||||
:check_add_to_playlist
|
||||
const/4 v2, 0x3
|
||||
|
||||
if-ne v0, v2, :append
|
||||
|
||||
invoke-static {v1, v7, v8, v9}, Lradiant/gestures/queue/QueueExecutor;->addToPlaylistTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)V
|
||||
|
||||
goto :done
|
||||
|
||||
:append
|
||||
invoke-static {v1, v7, v8, v9}, Lradiant/gestures/queue/QueueExecutor;->track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z
|
||||
|
||||
:done
|
||||
return-void
|
||||
.end method
|
||||
@@ -0,0 +1,113 @@
|
||||
.class public final Lradiant/gestures/queue/DynamicTrackQueueAction;
|
||||
.super Ljava/lang/Object;
|
||||
.source "DynamicTrackQueueAction.smali"
|
||||
|
||||
# interfaces
|
||||
.implements Lradiant/gestures/queue/ComposeSwipeAction;
|
||||
|
||||
|
||||
# instance fields
|
||||
.field private final callback:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
.field private context:Landroid/content/Context;
|
||||
|
||||
.field private final moduleUuid:Ljava/lang/String;
|
||||
|
||||
.field private final pageId:Ljava/lang/String;
|
||||
|
||||
.field private final trackId:J
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>(Lyl0/l;Ljava/lang/String;Ljava/lang/String;Ls30/e$e;)V # MARKER: R8 Lyl0/l; Ls30/e$e;
|
||||
.locals 2
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/queue/DynamicTrackQueueAction;->callback:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
iput-object p2, p0, Lradiant/gestures/queue/DynamicTrackQueueAction;->pageId:Ljava/lang/String;
|
||||
|
||||
iput-object p3, p0, Lradiant/gestures/queue/DynamicTrackQueueAction;->moduleUuid:Ljava/lang/String;
|
||||
|
||||
iget-wide v0, p4, Ls30/e$e;->a:J # MARKER: R8 Ls30/e$e; a
|
||||
|
||||
iput-wide v0, p0, Lradiant/gestures/queue/DynamicTrackQueueAction;->trackId:J
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public invoke(I)Ljava/lang/Object;
|
||||
.locals 8
|
||||
|
||||
iget-wide v1, p0, Lradiant/gestures/queue/DynamicTrackQueueAction;->trackId:J
|
||||
|
||||
const/4 v0, 0x3
|
||||
|
||||
if-eq p1, v0, :active_queue
|
||||
|
||||
invoke-static {}, Lradiant/gestures/queue/QueueExecutor;->hasActiveQueue()Z
|
||||
|
||||
move-result v0
|
||||
|
||||
if-nez v0, :active_queue
|
||||
|
||||
new-instance v0, Lcom/tidal/android/dynamicpages/ui/modules/tracklist/b$a; # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/modules/tracklist/b$a;
|
||||
|
||||
iget-object v3, p0, Lradiant/gestures/queue/DynamicTrackQueueAction;->pageId:Ljava/lang/String;
|
||||
|
||||
iget-object v4, p0, Lradiant/gestures/queue/DynamicTrackQueueAction;->moduleUuid:Ljava/lang/String;
|
||||
|
||||
invoke-direct {v0, v3, v4, v1, v2}, Lcom/tidal/android/dynamicpages/ui/modules/tracklist/b$a;-><init>(Ljava/lang/String;Ljava/lang/String;J)V # MARKER: R8 Lcom/tidal/android/dynamicpages/ui/modules/tracklist/b$a;
|
||||
|
||||
goto :emit
|
||||
|
||||
:active_queue
|
||||
new-instance v0, Lradiant/gestures/queue/DynamicTrackQueueEvent;
|
||||
|
||||
iget-object v1, p0, Lradiant/gestures/queue/DynamicTrackQueueAction;->context:Landroid/content/Context;
|
||||
|
||||
if-eqz v1, :done
|
||||
|
||||
iget-object v2, p0, Lradiant/gestures/queue/DynamicTrackQueueAction;->pageId:Ljava/lang/String;
|
||||
|
||||
iget-object v3, p0, Lradiant/gestures/queue/DynamicTrackQueueAction;->moduleUuid:Ljava/lang/String;
|
||||
|
||||
iget-wide v4, p0, Lradiant/gestures/queue/DynamicTrackQueueAction;->trackId:J
|
||||
|
||||
move v6, p1
|
||||
|
||||
invoke-direct/range {v0 .. v6}, Lradiant/gestures/queue/DynamicTrackQueueEvent;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;JI)V
|
||||
|
||||
:emit
|
||||
iget-object v7, p0, Lradiant/gestures/queue/DynamicTrackQueueAction;->callback:Lyl0/l; # MARKER: R8 Lyl0/l;
|
||||
|
||||
invoke-interface {v7, v0}, Lyl0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; # MARKER: R8 Lyl0/l;
|
||||
|
||||
:done
|
||||
sget-object v0, Lkotlin/u;->a:Lkotlin/u; # MARKER: R8 Lkotlin/u;
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
|
||||
.method public invoke()Ljava/lang/Object;
|
||||
.locals 1
|
||||
|
||||
const/4 v0, 0x2
|
||||
|
||||
invoke-virtual {p0, v0}, Lradiant/gestures/queue/DynamicTrackQueueAction;->invoke(I)Ljava/lang/Object;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
|
||||
.method public setContext(Landroid/content/Context;)V
|
||||
.locals 0
|
||||
|
||||
iput-object p1, p0, Lradiant/gestures/queue/DynamicTrackQueueAction;->context:Landroid/content/Context;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
Loaded 100 of 240 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user