Telephony defunct
r134a preferably u should revert back to 4g only in some days, this will protect u against downgrade attacks.
What works is very dependent on carrier and country, so blanket advice may be incorrect.
In some countries 2G is gone, so any alleged 2G cell site would be part of an attack. But in other countries LTE is for data traffic only, and voice calls are still 2G/3G. Advising somebody in such a situation to switch to "4G only" would not be helpful.
Would it be beneficial to propose a new thread with development tags, or perhaps a github issue regarding this? Proposing a implementation of some sort which would alert the user something like '4g calling not available at the moment, 4g only selected under prefered network type'?
I can imagine the current behavior being hard to diagnose for the more mainstream user. In my case for example i initially suspected hardware failure of the baseband modem. I eventually found out the cause by changing my sim in a spare phone, an then pinpointed the issue is in that direction, and then luckily vaguely remembered i chose '4g only'.
I do realize this is probably not an easy task to implement software wise, and would probably require a lot of code, but then again i'm not a developer.
Perhaps if this wouldn't be possible, or a 'cost-effective' solution given the limited resources & priorities of the team, maybe a easily searchable mention in the documentation or FAQ would be the next best thing?
r134a Proposing a implementation of some sort which would alert the user something like '4g calling not available at the moment, 4g only selected under prefered network type'?
I think part of the problem is that, I suspect, if 5G is disabled then the cellular modem doesn't even scan for it. If so, then the dialer can't tell whether the issue is that 5G is disabled or that there is just no coverage.
If would not be impossible for the dialer to prompt in cases where 3G and 5G are disabled by "LTE only", but should it also prompt if 2G is disabled?
The code might not be that bad, though maintenance would be an issue. But first it's important to figure out the exact desired behavior.
de0u But first it's important to figure out the exact desired behavior.
In order to do that, i believe one must have a thorough knowledge of how things work backend-wise, which admittedly I do not possess. Hence why proposing a new thread under development or a github issue was made, to bring it to the attention of those who do. Please keep in mind, that my answers below are based on an assumed understanding of the concepts, and thus ultimately have little more value than speculation.
de0u I think part of the problem is that, I suspect, if 5G is disabled then the cellular modem doesn't even scan for it. If so, then the dialer can't tell whether the issue is that 5G is disabled or that there is just no coverage.
The proposition would be that if '4g only' is enabled, there would be an alert to the end user if 4g calling is not available. So the first requirement of the check would be, is 4G only selected? If so, does it really matter if 5G is disabled? The coverage part is a very good question, and that's where i certainly lack knowledge. I assume there are 2 scenarios;
1) 4g only selected, 4g calling not available, so no connection to a 4g tower possible, hence meaning no coverage (however in both my case and op's case, we had LTE data still accessible, just 4g calling didn't work.)
2) 4g only selected, 4g calling not available, the phone connects to a tower, tower responds to downgrade to 3g (or switch to 5g, 2g) in order to make a call since 4g calling not available at the moment. Phone rejects request since 4g only is selected. Theoretical in that case is assume the distinction could be made between 'no coverage' and '4g calling not available'. I'm not sure how or if that data could be interpreted/catched in the dialer from i assume the baseband modem?
So hypothetically, if '4g only' is selected, and scenario 2 applies, and it is possible to interpret that data backend-wise (rejection of downgrade to 3g, or switching to another protocol), at that moment an alert could be given that 4g calling isn't available at the moment, with a possible 'culprit' of 4g only selection.
If scenario 1 applies, i'm not sure if backend-wise, data is available if there is connection to a tower. If so, and there is no coverage, i suppose the alert should not be given. I remember when i had this issue, from withing the dialer, i could initiate a call, but would be abrupted before first ring (if that makes sense). I've tried replicating what happens if i call somebody with no coverage to see the behavior in the dialer, with airplaine mode, and the dialer doesn't even start. This probably is because of a check within android and has nothing to do with no real coverage, however i don't have a faraday bag and can't really replicate what happens withing the dialer if there is no coverage. Now that i think of it, since i had this issue a while ago, it might actually showed a short popup alert in terms of something like (calling not available), but i'm unsure. Maybe op @stkr can verify/deny this while it is still fresh in mind.
de0u If would not be impossible for the dialer to prompt in cases where 3G and 5G are disabled by "LTE only", but should it also prompt if 2G is disabled?
I could have a complete misunderstanding here, forgive me if i do, but if 4g only is selected, isn't 2g, 3g and 5g disabled anyway? It should only prompt if 4g calling is unavailable.
de0u [It] would not be impossible for the dialer to prompt in cases where 3G and 5G are disabled by "LTE only", but should it also prompt if 2G is disabled?
r134a I could have a complete misunderstanding here, forgive me if i do, but if 4g only is selected, isn't 2g, 3g and 5g disabled anyway? It should only prompt if 4g calling is unavailable.
I understand the single scenario of "phone is set to 4G-only, 4G calling is unavailable, but 5G calling is available". But there are other very-similar scenarios.
The phone does not have global awareness. One part of the phone tries to connect to cellular networks in accordance with multiple constraints, and another part of the phone decides what to do if a call fails.
A call might fail because the phone was told "4G only" but 5G is necessary for calling to work. However, for a different phone in a different situation a call might fail because 2G calling is disabled and 2G is necessary for calling to work.
It would be possible to add code to the "call failed" part of the dialer to warn the user about exactly the "4G only" setting, which would cover scenario you observed. But it is possible that the developers would not wish to pursue addressing exactly that one scenario when there are other configuration scenarios that could cause calls to fail.
An alternative would be for the call-failed state to pop up a dialog offering to take the user to the settings page for the SIM that is in use, something like "Call failed. Do you wish to review your cellular settings for [Carrier name]?"
de0u The phone does not have global awareness. One part of the phone tries to connect to cellular networks in accordance with multiple constraints, and another part of the phone decides what to do if a call fails.
I wasn't sure if the phone had global awareness or not, that's why i agreed to in order to frame the exact behavior, one needs to have a thorough understanding of how things operate backend-wise, which i lack.
I had a conceptual idea in my head, that the phone could have global awareness. For example if prefer 5g is enabled, and a call is initiated. Phone connects to tower, 5g not available, 4g not available, 3g is needed to perform a call. I thought the tower would tell the phone to switch to 3g protocol in order to perform a call, and assumed it would be a possibility that because of that, it is aware on what protocol it is told to use.
Certainly i assume one part (baseband) should be aware, however i wasn't sure the other part had that same awareness, or if that other part could obtain that awareness.
de0u A call might fail because the phone was told "4G only" but 5G is necessary for calling to work. However, for a different phone in a different situation a call might fail because 2G calling is disabled and 2G is necessary for calling to work.
That's where i had the (probably incorrect) assumption, that the phone could obtain that data from the baseband and interpret the exact protocol it is told to switch to. Though things might work completely different on the backend.
de0u It would be possible to add code to the "call failed" part of the dialer to warn the user about exactly the "4G only" setting, which would cover scenario you observed. But it is possible that the developers would not wish to pursue addressing exactly that one scenario when there are other configuration scenarios that could cause calls to fail.
Completely understandable! Ultimately my goal here was to raise awareness in a way to the end user if this issue occurs, as it is currently very hard to troubleshoot. If and how this would be implemented, is 'above my paygrade'.
de0u An alternative would be for the call-failed state to pop up a dialog offering to take the user to the settings page for the SIM that is in use, something like "Call failed. Do you wish to review your cellular settings for [Carrier name]?"
That sounds like a good alternative, which sounds relatively maintenance friendly. However it could probably also be triggered to frequently (every call-failed state for whatever reason) and confuse the more mainstream user. I don't remember the default settings of grapheneos, i assume prefer 4G, a mainstream user would just leave it at that, get a failed call and receive that dialog, and maybe change on of it's settings there like prefer 3g, and leave it like that. This is probably not a very good practice as it would prefer the legacy 3g every time from that time on.
Or did you meant that alternative only with a failed-call state while 4g only is enabled?
r134a I had a conceptual idea in my head, that the phone could have global awareness. For example if prefer 5g is enabled, and a call is initiated. Phone connects to tower, 5g not available, 4g not available, 3g is needed to perform a call. I thought the tower would tell the phone to switch to 3g protocol in order to perform a call, and assumed it would be a possibility that because of that, it is aware on what protocol it is told to use.
Neither the phone nor the cell site has that kind of global knowledge.
In the situation you ran into, the problem was not that the tower knew it supported 4G and 5G data but only 5G calling and was telling the phone "switch to 5G to make a call". Almost certainly the cellular system believed it supported 4G voice calls, but that function was temporarily broken, probably in a small area.
Similarly, if your phone has been told to disable 5G, the phone doesn't know when 5G coverage is or isn't available, because it isn't scanning for 5G availability.