Commit ca8a126
committed
FullCharge: Offer the reconnect gesture on adapters without a hold signal
The gesture was hidden everywhere but stock Pixel, via a boolean that
dated from when its only arming basis was the limit hold. That basis
reads the charging-policy hardware state (EXTRA_CHARGING_STATUS == 4),
which only Pixel and GrapheneOS decode at all, so it genuinely cannot
arm elsewhere. The any-level basis added later needs no hardware signal,
but the boolean gated the feature before that path was ever consulted.
Replace it with ReconnectSupport (NONE / ANY_LEVEL_ONLY / FULL). Samsung
(both generations), OnePlus/ColorOS, Xiaomi HyperOS 3 and LineageOS have
a real cap that reads back synchronously and no observable hold, so they
get ANY_LEVEL_ONLY, where the any-level basis is implied rather than
opt-in: honouring a stored "off" would leave the master toggle on with
no basis that could ever arm. The settings screen drops the sub-switch
there and states the behaviour instead. GrapheneOS stays NONE because
the ROM samples the key at plug-session start and the gesture's write
lands strictly after the replug it would need to beat. Xiaomi HyperOS 2
stays NONE because Adaptive is its only protective mode and its hold is
unobserved on that generation, so there would be nothing to lift on
every tick; being enforcementIsConditional is not itself disqualifying,
since Pixel arms on Adaptive today and OnePlus/HyperOS 3 now will too.
GestureBasis gains the synchronous settings readback as a second
conclusive source. Without it these adapters would arm off the write
journal alone, so a limit removed in the OEM's own settings would keep
arming the gesture. Null there means the adapter has no sync source and
still hands the question to the journal; a sync-readback adapter always
contributes an observation, substituting an explicit Unknown, because
syncReadback() returns null for both "no source" and "read failed" and
answering a failed readback from the journal it exists to override is
the exact error the source was added to prevent. A non-Verified hardware
decode deliberately keeps falling through, being an ordinary reading.
The readback runs on the dispatch path, so a timeout degrades to no
evidence rather than propagating: TimeoutCancellationException is a
CancellationException, and DispatchCoordinator rethrows those, which
would kill the battery-evaluation consumer for the life of the service
and strand a later session with no restore ticks.1 parent 227c03c commit ca8a126
26 files changed
Lines changed: 337 additions & 67 deletions
File tree
- .claude
- rules
- skills/oem-adapters
- app/src
- debug/java/eu/darken/amply/screenshots
- main
- java/eu/darken/amply
- charging/core
- adapter
- fullcharge/core
- main/ui
- dashboard
- settings
- res/values
- test/java/eu/darken/amply
- charging/core/adapter
- fullcharge/core
- main/ui/settings
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
24 | | - | |
| 24 | + | |
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| |||
89 | 89 | | |
90 | 90 | | |
91 | 91 | | |
92 | | - | |
93 | | - | |
94 | | - | |
95 | | - | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
96 | 115 | | |
97 | 116 | | |
98 | 117 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
27 | | - | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
28 | 30 | | |
29 | 31 | | |
30 | 32 | | |
| |||
92 | 94 | | |
93 | 95 | | |
94 | 96 | | |
95 | | - | |
| 97 | + | |
| 98 | + | |
96 | 99 | | |
97 | 100 | | |
98 | 101 | | |
| |||
Lines changed: 2 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
117 | 117 | | |
118 | 118 | | |
119 | 119 | | |
| 120 | + | |
| 121 | + | |
120 | 122 | | |
121 | 123 | | |
122 | 124 | | |
| |||
Lines changed: 4 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
79 | 79 | | |
80 | 80 | | |
81 | 81 | | |
| 82 | + | |
| 83 | + | |
82 | 84 | | |
83 | 85 | | |
84 | 86 | | |
| |||
740 | 742 | | |
741 | 743 | | |
742 | 744 | | |
743 | | - | |
| 745 | + | |
| 746 | + | |
744 | 747 | | |
745 | 748 | | |
746 | 749 | | |
| |||
Lines changed: 36 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
62 | 62 | | |
63 | 63 | | |
64 | 64 | | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
65 | 89 | | |
66 | 90 | | |
67 | 91 | | |
| |||
76 | 100 | | |
77 | 101 | | |
78 | 102 | | |
79 | | - | |
80 | | - | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
81 | 115 | | |
82 | 116 | | |
83 | 117 | | |
| |||
Lines changed: 5 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
73 | 73 | | |
74 | 74 | | |
75 | 75 | | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
76 | 81 | | |
77 | 82 | | |
78 | 83 | | |
| |||
Lines changed: 4 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
78 | 78 | | |
79 | 79 | | |
80 | 80 | | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
81 | 85 | | |
82 | 86 | | |
83 | 87 | | |
| |||
Lines changed: 3 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
48 | 48 | | |
49 | 49 | | |
50 | 50 | | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
51 | 54 | | |
52 | 55 | | |
53 | 56 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
31 | | - | |
| 31 | + | |
32 | 32 | | |
33 | 33 | | |
34 | 34 | | |
| |||
Lines changed: 4 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
31 | 35 | | |
32 | 36 | | |
33 | 37 | | |
| |||
0 commit comments