{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":780340155,"defaultBranch":"14.0-dev","name":"7SIM","ownerLogin":"iusmac","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2024-04-01T09:07:29.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/28353279?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1725468219.0","currentOid":""},"activityList":{"items":[{"before":"779530b247602928c9e93a1b0bee18c26e3fabd9","after":null,"ref":"refs/heads/chore-upgrade-gradle-dependencies","pushedAt":"2024-09-04T16:43:39.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"}},{"before":"8c23422fafb24f7c54369f702189abaff3888cc7","after":"fe0962643d1b413b92cfe349e565e154775f07ba","ref":"refs/heads/14.0-dev","pushedAt":"2024-09-04T16:43:34.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"chore: upgrade Gradle dependencies (#34)\n\n* Synced with android-14.0.0_r55 tag (August security patches).\r\n\r\nSigned-off-by: iusmac ","shortMessageHtmlLink":"chore: upgrade Gradle dependencies (#34)"}},{"before":null,"after":"779530b247602928c9e93a1b0bee18c26e3fabd9","ref":"refs/heads/chore-upgrade-gradle-dependencies","pushedAt":"2024-09-04T16:34:40.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"chore: upgrade Gradle dependencies\n\n* Synced with android-14.0.0_r55 tag (August security patches).\n\nSigned-off-by: iusmac ","shortMessageHtmlLink":"chore: upgrade Gradle dependencies"}},{"before":"ce6b48a3b0a966170e92ab4278b970bc499abcf7","after":"8c23422fafb24f7c54369f702189abaff3888cc7","ref":"refs/heads/14.0-dev","pushedAt":"2024-09-04T16:32:28.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"build(Gradle): explicitly set `buildToolsVersion` to `34.0.0`\n\n* we're using AGP v8.1.4 which is the minimum version to support Android\n 14, but it comes with Android 13 build tools by default.\n\nSigned-off-by: iusmac ","shortMessageHtmlLink":"build(Gradle): explicitly set buildToolsVersion to 34.0.0"}},{"before":"d4e512aabec4dbc8279e9260f0ee9bcbf946a2ef","after":"ce6b48a3b0a966170e92ab4278b970bc499abcf7","ref":"refs/heads/14.0-dev","pushedAt":"2024-08-31T23:16:48.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"ci(android-build): show coverage report summary only on `check` builds\n\nSigned-off-by: iusmac ","shortMessageHtmlLink":"ci(android-build): show coverage report summary only on check builds"}},{"before":"6639acc673094c6b661e77f09633e31e8c312f3b","after":"d4e512aabec4dbc8279e9260f0ee9bcbf946a2ef","ref":"refs/heads/30-add-tests","pushedAt":"2024-08-31T11:54:46.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"ci: generate code coverage summary using `Kover`\n\nSigned-off-by: iusmac ","shortMessageHtmlLink":"ci: generate code coverage summary using Kover"}},{"before":"4890f74d134defd139ef14149753e4ae28db8e94","after":null,"ref":"refs/heads/ci-generate-code-coverage-summary-using-kover","pushedAt":"2024-08-31T11:42:17.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"}},{"before":"6639acc673094c6b661e77f09633e31e8c312f3b","after":"d4e512aabec4dbc8279e9260f0ee9bcbf946a2ef","ref":"refs/heads/14.0-dev","pushedAt":"2024-08-31T11:42:14.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"ci: generate code coverage summary using `Kover`\n\nSigned-off-by: iusmac ","shortMessageHtmlLink":"ci: generate code coverage summary using Kover"}},{"before":"d5c86ce96a0fd501c8062ebc8ab7929279fa10f6","after":"4890f74d134defd139ef14149753e4ae28db8e94","ref":"refs/heads/ci-generate-code-coverage-summary-using-kover","pushedAt":"2024-08-31T11:34:32.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"ci: generate code coverage summary using `Kover`\n\nSigned-off-by: iusmac ","shortMessageHtmlLink":"ci: generate code coverage summary using Kover"}},{"before":"f4e8dfc55b8bf57064d7586f0920383aea064d23","after":"d5c86ce96a0fd501c8062ebc8ab7929279fa10f6","ref":"refs/heads/ci-generate-code-coverage-summary-using-kover","pushedAt":"2024-08-31T11:13:04.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"Add shell: bash","shortMessageHtmlLink":"Add shell: bash"}},{"before":"28120f5f6f4f6c3b1544a9f710077853be646507","after":"f4e8dfc55b8bf57064d7586f0920383aea064d23","ref":"refs/heads/ci-generate-code-coverage-summary-using-kover","pushedAt":"2024-08-31T11:09:22.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"Update","shortMessageHtmlLink":"Update"}},{"before":"5ad57b4f0b846e54b049b51b205e18433820ac8a","after":"28120f5f6f4f6c3b1544a9f710077853be646507","ref":"refs/heads/ci-generate-code-coverage-summary-using-kover","pushedAt":"2024-08-31T10:44:48.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"Add workflow permissions: checks: write","shortMessageHtmlLink":"Add workflow permissions: checks: write"}},{"before":"a02cc4b4dfed92ef73a44a48fc8d385e096054d9","after":"5ad57b4f0b846e54b049b51b205e18433820ac8a","ref":"refs/heads/ci-generate-code-coverage-summary-using-kover","pushedAt":"2024-08-31T09:27:18.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"Fix run clause syntax","shortMessageHtmlLink":"Fix run clause syntax"}},{"before":"634076f098d917f44add5431ce5ca3e447332454","after":"a02cc4b4dfed92ef73a44a48fc8d385e096054d9","ref":"refs/heads/ci-generate-code-coverage-summary-using-kover","pushedAt":"2024-08-31T09:25:00.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"Fix GitHub token","shortMessageHtmlLink":"Fix GitHub token"}},{"before":null,"after":"634076f098d917f44add5431ce5ca3e447332454","ref":"refs/heads/ci-generate-code-coverage-summary-using-kover","pushedAt":"2024-08-31T09:13:35.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"ci: generate code coverage summary using `Kover`\n\nSigned-off-by: iusmac ","shortMessageHtmlLink":"ci: generate code coverage summary using Kover"}},{"before":null,"after":"6639acc673094c6b661e77f09633e31e8c312f3b","ref":"refs/heads/30-add-tests","pushedAt":"2024-08-27T11:08:53.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"chore(14.0-dev): release 2.0.1","shortMessageHtmlLink":"chore(14.0-dev): release 2.0.1"}},{"before":"f84351e49ab8519f6559a471bef0e66f6f21a574","after":"6639acc673094c6b661e77f09633e31e8c312f3b","ref":"refs/heads/14.0-dev","pushedAt":"2024-08-24T17:06:33.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"chore(14.0-dev): release 2.0.1","shortMessageHtmlLink":"chore(14.0-dev): release 2.0.1"}},{"before":"ea4698f917fc50d76c55d1a60fe12e8fce8ecafc","after":"760c8dd83c123adc51afd4bfebe185a4f36d4b53","ref":"refs/heads/release-please--branches--14.0-dev","pushedAt":"2024-08-24T17:01:48.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"chore(14.0-dev): release 2.0.1","shortMessageHtmlLink":"chore(14.0-dev): release 2.0.1"}},{"before":"af0899ed1b7423069a83e72f3e1917d889e45c39","after":"f84351e49ab8519f6559a471bef0e66f6f21a574","ref":"refs/heads/14.0-dev","pushedAt":"2024-08-24T17:01:31.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"fix(telephony): prevent SIM subscriptions sync when altering SIM state\n\nTo reproduce this:\n1. Ensure the device is using the legacy radio interface layer (RIL) to\n control SIM cards\n2. Toggle the same SIM card multiple times in a row\n3. Observe the SIM card forcefully returning to its original state due\n to the synchronization with its schedules\n\nDeep-dive explanation:\nWhen performing the SIM subscription state mutation for the same SIM\ncard multiple times in a row (see lines 1-12 & 13-24), this will sooner\ntrigger in parallel the global carrier config changed event listener\n(see line 25), which in turn will run the SIM subscriptions sync\nprocess. In this case, the SIM subscriptions sync process may\nshort-circuit and terminate fast, or it may force override user's\npreference applied a moment ago through the scheduler (see line 41).\nThis is because the last{Activated/Deactivated}Time fields used to\ndetermine whether to keep the user's preference within the allowed\nperiod or not was reset during the SIM subscriptions sync process, since\nthe SIM subscription can be temporarily unavailable (see line 38) during\nstate transition.\n\nThe fix:\nThis patch fix introduces an atomic flag to block the synchronization of the\ninternal state of all SIM subscriptions during SIM subscription state\nmutations.\nCurrently, this issue affects heavily only devices using legacy RIL, but\nwe'll use the flag on the newer RIL too, since there's a call to the\ndatabase that may take longer to complete in some circumstances.\n\n1 D 7SIM.SimListViewModel handleOnSimEnabledStateChanged(simEntryId=1,enabled=false).\n2 D 7SIM.TelephonyController setSimState(slotIndex=1,enabled=false,keepDisabledAcrossBoots=true) : In sync block.\n3 V 7SIM.SubscriptionsImplLegacy persistSubscription(sub=Subscription { id=1 slotIndex=1 simState=DISABLED iconTint=-4056997 name=Vodafone lastActivatedTime=-999999999-01-01T00:00 lastDeactivatedTime=2024-08-23T14:51 keepDisabledAcrossBoots=true }).\n4 D 7SIM.SubscriptionsImplLegacy persistSubscriptionState(subId=1,state=DISABLED).\n5 V 7SIM.SubscriptionsImplLegacy addOnSimStatusChangedListener().\n6 V 7SIM.SubscriptionsImplLegacy registerCarrierConfigChangedReceiver().\n7 V 7SIM.SubscriptionsImplLegacy onReceive() : intent=Intent { act=android.telephony.action.SIM_CARD_STATE_CHANGED flg=0x5000010 (has extras) }\n8 V 7SIM.SubscriptionsImplLegacy dispatchOnSimStatusChanged(slotIndex=1,state=1).\n9 V 7SIM.TelephonyController onSimStatusChanged(slotIndex=1,state=1).\n10 V 7SIM.SubscriptionsImplLegacy removeOnSimStatusChangedListener().\n11 V 7SIM.SubscriptionsImplLegacy unregisterCarrierConfigChangedReceiver().\n12 D 7SIM.TelephonyController handleOnSetSimPowerStateForSlotFinished(resCode=1) : requestMetadata=Bundle[{last_activated_time=-999999999-01-01T00:00, last_deactivated_time=2024-08-23T14:51, subscription=Subscription { id=1 slotIndex=1 simState=DISABLED iconTint=-4056997 name=Vodafone lastActivatedTime=-999999999-01-01T00:00 lastDeactivatedTime=2024-08-23T14:51 keepDisabledAcrossBoots=true }, keep_disabled_across_boots=true}], requestFailed=false,shouldNotifyAllListeners=false\n\n13 D 7SIM.SimListViewModel handleOnSimEnabledStateChanged(simEntryId=1,enabled=true).\n14 D 7SIM.TelephonyController setSimState(slotIndex=1,enabled=true,keepDisabledAcrossBoots=false) : In sync block.\n15 V 7SIM.SubscriptionsImplLegacy persistSubscription(sub=Subscription { id=1 slotIndex=1 simState=ENABLED iconTint=-4056997 name=Vodafone lastActivatedTime=2024-08-23T14:51 lastDeactivatedTime=-999999999-01-01T00:00 keepDisabledAcrossBoots=false }).\n16 D 7SIM.SubscriptionsImplLegacy persistSubscriptionState(subId=1,state=ENABLED).\n17 V 7SIM.SubscriptionsImplLegacy addOnSimStatusChangedListener().\n18 V 7SIM.SubscriptionsImplLegacy registerCarrierConfigChangedReceiver().\n19 V 7SIM.SubscriptionsImplLegacy onReceive() : intent=Intent { act=android.telephony.action.SIM_CARD_STATE_CHANGED flg=0x5000010 (has extras) }\n20 V 7SIM.SubscriptionsImplLegacy dispatchOnSimStatusChanged(slotIndex=1,state=11).\n21 V 7SIM.TelephonyController onSimStatusChanged(slotIndex=1,state=11).\n22 V 7SIM.SubscriptionsImplLegacy removeOnSimStatusChangedListener().\n23 V 7SIM.SubscriptionsImplLegacy unregisterCarrierConfigChangedReceiver().\n24 D 7SIM.TelephonyController handleOnSetSimPowerStateForSlotFinished(resCode=11) : requestMetadata=Bundle[{last_activated_time=2024-08-23T14:51, last_deactivated_time=-999999999-01-01T00:00, subscription=Subscription { id=1 slotIndex=1 simState=ENABLED iconTint=-4056997 name=Vodafone lastActivatedTime=2024-08-23T14:51 lastDeactivatedTime=-999999999-01-01T00:00 keepDisabledAcrossBoots=false }, keep_disabled_across_boots=false}], requestFailed=false,shouldNotifyAllListeners=true\n\n25 D 7SIM.DirectBootAwareBroadcastReceiver onReceive() : intent=Intent { act=android.telephony.action.CARRIER_CONFIG_CHANGED flg=0x15000010 cmp=com.github.iusmac.sevensim/.DirectBootAwareBroadcastReceiver (has extras) }\n26 D 7SIM.ForegroundService onCreate().\n27 D 7SIM.ForegroundService onStartCommand(intent=Intent { act=ACTION_SUBSCRIPTIONS_CHANGED cmp=com.github.iusmac.sevensim/.ForegroundService (has extras) },flags=0,startId=1).\n28 D 7SIM.ForegroundService Worker.execute(taskId=1) Add : mQueueSize=0.\n29 D 7SIM.ForegroundService onStartCommand(intent=Intent { act=ACTION_SYNC_SUBSCRIPTION_ENABLED_STATE cmp=com.github.iusmac.sevensim/.ForegroundService (has extras) },flags=0,startId=2).\n30 D 7SIM.ForegroundService Worker.execute(taskId=1) Start : mQueueSize=1.\n31 D 7SIM.ForegroundService Worker.execute(taskId=2) Add : mQueueSize=1.\n32 D 7SIM.ForegroundService onStartCommand(intent=Intent { act=ACTION_UPDATE_NEXT_WEEKLY_REPEAT_SCHEDULE_PROCESSING_ITER cmp=com.github.iusmac.sevensim/.ForegroundService (has extras) },flags=0,startId=3).\n33 D 7SIM.ForegroundService Worker.execute(taskId=3) Add : mQueueSize=2.\n34 D 7SIM.SubscriptionsImplLegacy syncSubscriptions(dateTime=2024-08-23T14:51:08.280) : Subscription { id=2 slotIndex=0 simState=ENABLED iconTint=-13408298 name=Vodafone (work) lastActivatedTime=-999999999-01-01T00:00 lastDeactivatedTime=-999999999-01-01T00:00 keepDisabledAcrossBoots=false },currentSubState=ENABLED,expectedSubState=UNKNOWN,existsInUsableList=false.\n35 D 7SIM.SubscriptionsImplLegacy persistSubscriptionState(subId=2,state=ENABLED).\n36 D 7SIM.SubscriptionsImplLegacy syncSubscriptions(dateTime=2024-08-23T14:51:08.280) : Subscription { id=1 slotIndex=-1 simState=UNKNOWN iconTint=-16777216 name= lastActivatedTime=2024-08-23T14:51 lastDeactivatedTime=-999999999-01-01T00:00 keepDisabledAcrossBoots=false }.\n37 V 7SIM.SubscriptionsImplLegacy persistSubscription(sub=Subscription { id=1 slotIndex=-1 simState=UNKNOWN iconTint=-16777216 name= lastActivatedTime=-999999999-01-01T00:00 lastDeactivatedTime=-999999999-01-01T00:00 keepDisabledAcrossBoots=false }).\n38 D 7SIM.SubscriptionsImplLegacy persistSubscriptionState(subId=1,state=UNKNOWN).\n39 D 7SIM.ForegroundService Worker.execute(taskId=1) Finish : mQueueSize=2.\n40 D 7SIM.ForegroundService Worker.execute(taskId=2) Start : mQueueSize=2.\n41 D 7SIM.SubscriptionScheduler syncSubscriptionEnabledState(subId=2,compareTime=2024-08-23T14:51:08.280,overrideUserPreference=false) : Subscription { id=2 slotIndex=0 simState=ENABLED iconTint=-13408298 name=Vodafone (work) lastActivatedTime=-999999999-01-01T00:00 lastDeactivatedTime=-999999999-01-01T00:00 keepDisabledAcrossBoots=false },nearestEnableTime=Optional.empty,nearestDisableTime=Optional[2024-08-19T08:00],expectedEnabled=false,isInCall=false.\n42 D 7SIM.TelephonyController setSimState(slotIndex=0,enabled=false,keepDisabledAcrossBoots=false) : In sync block.\n\nSigned-off-by: iusmac ","shortMessageHtmlLink":"fix(telephony): prevent SIM subscriptions sync when altering SIM state"}},{"before":"b02974d3bbd4e48e3db6cab415ff50beed332aa0","after":"ea4698f917fc50d76c55d1a60fe12e8fce8ecafc","ref":"refs/heads/release-please--branches--14.0-dev","pushedAt":"2024-08-24T16:58:30.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"chore(14.0-dev): release 2.0.1","shortMessageHtmlLink":"chore(14.0-dev): release 2.0.1"}},{"before":"2eba7cd0efe1ea0f3e9de6a0efdd0bd937a899dc","after":"af0899ed1b7423069a83e72f3e1917d889e45c39","ref":"refs/heads/14.0-dev","pushedAt":"2024-08-24T16:58:13.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"fix(telephony): prevent SIM subscriptions sync when altering SIM state\n\nTo reproduce this:\n1. Ensure the device is using the legacy radio interface layer (RIL) to\n control SIM cards\n2. Toggle the same SIM card multiple times in a row\n3. Observe the SIM card forcefully returning to its original state due\n to the synchronization with its schedules\n\nDeep-dive explanation:\nWhen performing the SIM subscription state mutation for the same SIM\ncard multiple times in a row (#1-12 & #13-24), this will sooner trigger\nin parallel the global carrier config changed event listener (#25),\nwhich in turn will run the SIM subscriptions sync process. In this case,\nthe SIM subscriptions sync process may short-circuit and terminate fast,\nor it may force override user's preference applied a moment ago through\nthe scheduler (#41). This is because the last{Activated/Deactivated}Time\nfields used to determine whether to keep the user's preference within\nthe allowed period or not was reset during the SIM subscriptions sync\nprocess, since the SIM subscription can be temporarily unavailable (#38)\nduring state transition.\n\nThe fix:\nThis patch fix introduces an atomic flag to block the synchronization of the\ninternal state of all SIM subscriptions during SIM subscription state\nmutations.\nCurrently, this issue affects heavily only devices using legacy RIL, but\nwe'll use the flag on the newer RIL too, since there's a call to the\ndatabase that may take longer to complete in some circumstances.\n\n1 D 7SIM.SimListViewModel handleOnSimEnabledStateChanged(simEntryId=1,enabled=false).\n2 D 7SIM.TelephonyController setSimState(slotIndex=1,enabled=false,keepDisabledAcrossBoots=true) : In sync block.\n3 V 7SIM.SubscriptionsImplLegacy persistSubscription(sub=Subscription { id=1 slotIndex=1 simState=DISABLED iconTint=-4056997 name=Vodafone lastActivatedTime=-999999999-01-01T00:00 lastDeactivatedTime=2024-08-23T14:51 keepDisabledAcrossBoots=true }).\n4 D 7SIM.SubscriptionsImplLegacy persistSubscriptionState(subId=1,state=DISABLED).\n5 V 7SIM.SubscriptionsImplLegacy addOnSimStatusChangedListener().\n6 V 7SIM.SubscriptionsImplLegacy registerCarrierConfigChangedReceiver().\n7 V 7SIM.SubscriptionsImplLegacy onReceive() : intent=Intent { act=android.telephony.action.SIM_CARD_STATE_CHANGED flg=0x5000010 (has extras) }\n8 V 7SIM.SubscriptionsImplLegacy dispatchOnSimStatusChanged(slotIndex=1,state=1).\n9 V 7SIM.TelephonyController onSimStatusChanged(slotIndex=1,state=1).\n10 V 7SIM.SubscriptionsImplLegacy removeOnSimStatusChangedListener().\n11 V 7SIM.SubscriptionsImplLegacy unregisterCarrierConfigChangedReceiver().\n12 D 7SIM.TelephonyController handleOnSetSimPowerStateForSlotFinished(resCode=1) : requestMetadata=Bundle[{last_activated_time=-999999999-01-01T00:00, last_deactivated_time=2024-08-23T14:51, subscription=Subscription { id=1 slotIndex=1 simState=DISABLED iconTint=-4056997 name=Vodafone lastActivatedTime=-999999999-01-01T00:00 lastDeactivatedTime=2024-08-23T14:51 keepDisabledAcrossBoots=true }, keep_disabled_across_boots=true}], requestFailed=false,shouldNotifyAllListeners=false\n\n13 D 7SIM.SimListViewModel handleOnSimEnabledStateChanged(simEntryId=1,enabled=true).\n14 D 7SIM.TelephonyController setSimState(slotIndex=1,enabled=true,keepDisabledAcrossBoots=false) : In sync block.\n15 V 7SIM.SubscriptionsImplLegacy persistSubscription(sub=Subscription { id=1 slotIndex=1 simState=ENABLED iconTint=-4056997 name=Vodafone lastActivatedTime=2024-08-23T14:51 lastDeactivatedTime=-999999999-01-01T00:00 keepDisabledAcrossBoots=false }).\n16 D 7SIM.SubscriptionsImplLegacy persistSubscriptionState(subId=1,state=ENABLED).\n17 V 7SIM.SubscriptionsImplLegacy addOnSimStatusChangedListener().\n18 V 7SIM.SubscriptionsImplLegacy registerCarrierConfigChangedReceiver().\n19 V 7SIM.SubscriptionsImplLegacy onReceive() : intent=Intent { act=android.telephony.action.SIM_CARD_STATE_CHANGED flg=0x5000010 (has extras) }\n20 V 7SIM.SubscriptionsImplLegacy dispatchOnSimStatusChanged(slotIndex=1,state=11).\n21 V 7SIM.TelephonyController onSimStatusChanged(slotIndex=1,state=11).\n22 V 7SIM.SubscriptionsImplLegacy removeOnSimStatusChangedListener().\n23 V 7SIM.SubscriptionsImplLegacy unregisterCarrierConfigChangedReceiver().\n24 D 7SIM.TelephonyController handleOnSetSimPowerStateForSlotFinished(resCode=11) : requestMetadata=Bundle[{last_activated_time=2024-08-23T14:51, last_deactivated_time=-999999999-01-01T00:00, subscription=Subscription { id=1 slotIndex=1 simState=ENABLED iconTint=-4056997 name=Vodafone lastActivatedTime=2024-08-23T14:51 lastDeactivatedTime=-999999999-01-01T00:00 keepDisabledAcrossBoots=false }, keep_disabled_across_boots=false}], requestFailed=false,shouldNotifyAllListeners=true\n\n25 D 7SIM.DirectBootAwareBroadcastReceiver onReceive() : intent=Intent { act=android.telephony.action.CARRIER_CONFIG_CHANGED flg=0x15000010 cmp=com.github.iusmac.sevensim/.DirectBootAwareBroadcastReceiver (has extras) }\n26 D 7SIM.ForegroundService onCreate().\n27 D 7SIM.ForegroundService onStartCommand(intent=Intent { act=ACTION_SUBSCRIPTIONS_CHANGED cmp=com.github.iusmac.sevensim/.ForegroundService (has extras) },flags=0,startId=1).\n28 D 7SIM.ForegroundService Worker.execute(taskId=1) Add : mQueueSize=0.\n29 D 7SIM.ForegroundService onStartCommand(intent=Intent { act=ACTION_SYNC_SUBSCRIPTION_ENABLED_STATE cmp=com.github.iusmac.sevensim/.ForegroundService (has extras) },flags=0,startId=2).\n30 D 7SIM.ForegroundService Worker.execute(taskId=1) Start : mQueueSize=1.\n31 D 7SIM.ForegroundService Worker.execute(taskId=2) Add : mQueueSize=1.\n32 D 7SIM.ForegroundService onStartCommand(intent=Intent { act=ACTION_UPDATE_NEXT_WEEKLY_REPEAT_SCHEDULE_PROCESSING_ITER cmp=com.github.iusmac.sevensim/.ForegroundService (has extras) },flags=0,startId=3).\n33 D 7SIM.ForegroundService Worker.execute(taskId=3) Add : mQueueSize=2.\n34 D 7SIM.SubscriptionsImplLegacy syncSubscriptions(dateTime=2024-08-23T14:51:08.280) : Subscription { id=2 slotIndex=0 simState=ENABLED iconTint=-13408298 name=Vodafone (work) lastActivatedTime=-999999999-01-01T00:00 lastDeactivatedTime=-999999999-01-01T00:00 keepDisabledAcrossBoots=false },currentSubState=ENABLED,expectedSubState=UNKNOWN,existsInUsableList=false.\n35 D 7SIM.SubscriptionsImplLegacy persistSubscriptionState(subId=2,state=ENABLED).\n36 D 7SIM.SubscriptionsImplLegacy syncSubscriptions(dateTime=2024-08-23T14:51:08.280) : Subscription { id=1 slotIndex=-1 simState=UNKNOWN iconTint=-16777216 name= lastActivatedTime=2024-08-23T14:51 lastDeactivatedTime=-999999999-01-01T00:00 keepDisabledAcrossBoots=false }.\n37 V 7SIM.SubscriptionsImplLegacy persistSubscription(sub=Subscription { id=1 slotIndex=-1 simState=UNKNOWN iconTint=-16777216 name= lastActivatedTime=-999999999-01-01T00:00 lastDeactivatedTime=-999999999-01-01T00:00 keepDisabledAcrossBoots=false }).\n38 D 7SIM.SubscriptionsImplLegacy persistSubscriptionState(subId=1,state=UNKNOWN).\n39 D 7SIM.ForegroundService Worker.execute(taskId=1) Finish : mQueueSize=2.\n40 D 7SIM.ForegroundService Worker.execute(taskId=2) Start : mQueueSize=2.\n41 D 7SIM.SubscriptionScheduler syncSubscriptionEnabledState(subId=2,compareTime=2024-08-23T14:51:08.280,overrideUserPreference=false) : Subscription { id=2 slotIndex=0 simState=ENABLED iconTint=-13408298 name=Vodafone (work) lastActivatedTime=-999999999-01-01T00:00 lastDeactivatedTime=-999999999-01-01T00:00 keepDisabledAcrossBoots=false },nearestEnableTime=Optional.empty,nearestDisableTime=Optional[2024-08-19T08:00],expectedEnabled=false,isInCall=false.\n42 D 7SIM.TelephonyController setSimState(slotIndex=0,enabled=false,keepDisabledAcrossBoots=false) : In sync block.\n\nSigned-off-by: iusmac ","shortMessageHtmlLink":"fix(telephony): prevent SIM subscriptions sync when altering SIM state"}},{"before":"a9ed901a441ffd26f60a52abde8409dafe5254ea","after":"b02974d3bbd4e48e3db6cab415ff50beed332aa0","ref":"refs/heads/release-please--branches--14.0-dev","pushedAt":"2024-08-24T16:53:40.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"chore(14.0-dev): release 2.0.1","shortMessageHtmlLink":"chore(14.0-dev): release 2.0.1"}},{"before":"5ca206ffdf1a26086d8cd7397a46d82de9aca435","after":"2eba7cd0efe1ea0f3e9de6a0efdd0bd937a899dc","ref":"refs/heads/14.0-dev","pushedAt":"2024-08-24T16:53:19.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"fix(telephony): prevent SIM subscriptions sync when altering SIM state\n\nTo reproduce this:\n1. Ensure the device is using the legacy radio interface layer (RIL) to\n control SIM cards\n2. Toggle the same SIM card multiple times in a row\n3. Observe the SIM card forcefully returning to its original state due\n to the synchronization with its schedules\n\nDeep-dive explanation:\nWhen performing the SIM subscription state mutation for the same SIM\ncard multiple times in a row (#1-12 & #13-24), this will sooner trigger\nin parallel the global carrier config changed event listener (#25),\nwhich in turn will run the SIM subscriptions sync process. In this case,\nthe SIM subscriptions sync process may short-circuit and terminate fast,\nor it may force override user's preference applied a moment ago through\nthe scheduler (#41). This is because the last{Activated/Deactivated}Time\nfields used to determine whether to keep the user's preference within\nthe allowed period or not was reset during the SIM subscriptions sync\nprocess, since the SIM subscription can be temporarily unavailable (#38)\nduring state transition.\n\nThe fix:\nThis patch fix introduces an atomic flag to block the synchronization of the\ninternal state of all SIM subscriptions during SIM subscription state\nmutations.\nCurrently, this issue affects heavily only devices using legacy RIL, but\nwe'll use the flag on the newer RIL too, since there's a call to the\ndatabase that may take longer to complete in some circumstances.\n\n#1 D 7SIM.SimListViewModel handleOnSimEnabledStateChanged(simEntryId=1,enabled=false).\n#2 D 7SIM.TelephonyController setSimState(slotIndex=1,enabled=false,keepDisabledAcrossBoots=true) : In sync block.\n#3 V 7SIM.SubscriptionsImplLegacy persistSubscription(sub=Subscription { id=1 slotIndex=1 simState=DISABLED iconTint=-4056997 name=Vodafone lastActivatedTime=-999999999-01-01T00:00 lastDeactivatedTime=2024-08-23T14:51 keepDisabledAcrossBoots=true }).\n#4 D 7SIM.SubscriptionsImplLegacy persistSubscriptionState(subId=1,state=DISABLED).\n#5 V 7SIM.SubscriptionsImplLegacy addOnSimStatusChangedListener().\n#6 V 7SIM.SubscriptionsImplLegacy registerCarrierConfigChangedReceiver().\n#7 V 7SIM.SubscriptionsImplLegacy onReceive() : intent=Intent { act=android.telephony.action.SIM_CARD_STATE_CHANGED flg=0x5000010 (has extras) }\n#8 V 7SIM.SubscriptionsImplLegacy dispatchOnSimStatusChanged(slotIndex=1,state=1).\n#9 V 7SIM.TelephonyController onSimStatusChanged(slotIndex=1,state=1).\n#10 V 7SIM.SubscriptionsImplLegacy removeOnSimStatusChangedListener().\n#11 V 7SIM.SubscriptionsImplLegacy unregisterCarrierConfigChangedReceiver().\n#12 D 7SIM.TelephonyController handleOnSetSimPowerStateForSlotFinished(resCode=1) : requestMetadata=Bundle[{last_activated_time=-999999999-01-01T00:00, last_deactivated_time=2024-08-23T14:51, subscription=Subscription { id=1 slotIndex=1 simState=DISABLED iconTint=-4056997 name=Vodafone lastActivatedTime=-999999999-01-01T00:00 lastDeactivatedTime=2024-08-23T14:51 keepDisabledAcrossBoots=true }, keep_disabled_across_boots=true}], requestFailed=false,shouldNotifyAllListeners=false\n\n#13 D 7SIM.SimListViewModel handleOnSimEnabledStateChanged(simEntryId=1,enabled=true).\n#14 D 7SIM.TelephonyController setSimState(slotIndex=1,enabled=true,keepDisabledAcrossBoots=false) : In sync block.\n#15 V 7SIM.SubscriptionsImplLegacy persistSubscription(sub=Subscription { id=1 slotIndex=1 simState=ENABLED iconTint=-4056997 name=Vodafone lastActivatedTime=2024-08-23T14:51 lastDeactivatedTime=-999999999-01-01T00:00 keepDisabledAcrossBoots=false }).\n#16 D 7SIM.SubscriptionsImplLegacy persistSubscriptionState(subId=1,state=ENABLED).\n#17 V 7SIM.SubscriptionsImplLegacy addOnSimStatusChangedListener().\n#18 V 7SIM.SubscriptionsImplLegacy registerCarrierConfigChangedReceiver().\n#19 V 7SIM.SubscriptionsImplLegacy onReceive() : intent=Intent { act=android.telephony.action.SIM_CARD_STATE_CHANGED flg=0x5000010 (has extras) }\n#20 V 7SIM.SubscriptionsImplLegacy dispatchOnSimStatusChanged(slotIndex=1,state=11).\n#21 V 7SIM.TelephonyController onSimStatusChanged(slotIndex=1,state=11).\n#22 V 7SIM.SubscriptionsImplLegacy removeOnSimStatusChangedListener().\n#23 V 7SIM.SubscriptionsImplLegacy unregisterCarrierConfigChangedReceiver().\n#24 D 7SIM.TelephonyController handleOnSetSimPowerStateForSlotFinished(resCode=11) : requestMetadata=Bundle[{last_activated_time=2024-08-23T14:51, last_deactivated_time=-999999999-01-01T00:00, subscription=Subscription { id=1 slotIndex=1 simState=ENABLED iconTint=-4056997 name=Vodafone lastActivatedTime=2024-08-23T14:51 lastDeactivatedTime=-999999999-01-01T00:00 keepDisabledAcrossBoots=false }, keep_disabled_across_boots=false}], requestFailed=false,shouldNotifyAllListeners=true\n\n#25 D 7SIM.DirectBootAwareBroadcastReceiver onReceive() : intent=Intent { act=android.telephony.action.CARRIER_CONFIG_CHANGED flg=0x15000010 cmp=com.github.iusmac.sevensim/.DirectBootAwareBroadcastReceiver (has extras) }\n#26 D 7SIM.ForegroundService onCreate().\n#27 D 7SIM.ForegroundService onStartCommand(intent=Intent { act=ACTION_SUBSCRIPTIONS_CHANGED cmp=com.github.iusmac.sevensim/.ForegroundService (has extras) },flags=0,startId=1).\n#28 D 7SIM.ForegroundService Worker.execute(taskId=1) Add : mQueueSize=0.\n#29 D 7SIM.ForegroundService onStartCommand(intent=Intent { act=ACTION_SYNC_SUBSCRIPTION_ENABLED_STATE cmp=com.github.iusmac.sevensim/.ForegroundService (has extras) },flags=0,startId=2).\n#30 D 7SIM.ForegroundService Worker.execute(taskId=1) Start : mQueueSize=1.\n#31 D 7SIM.ForegroundService Worker.execute(taskId=2) Add : mQueueSize=1.\n#32 D 7SIM.ForegroundService onStartCommand(intent=Intent { act=ACTION_UPDATE_NEXT_WEEKLY_REPEAT_SCHEDULE_PROCESSING_ITER cmp=com.github.iusmac.sevensim/.ForegroundService (has extras) },flags=0,startId=3).\n#33 D 7SIM.ForegroundService Worker.execute(taskId=3) Add : mQueueSize=2.\n#34 D 7SIM.SubscriptionsImplLegacy syncSubscriptions(dateTime=2024-08-23T14:51:08.280) : Subscription { id=2 slotIndex=0 simState=ENABLED iconTint=-13408298 name=Vodafone (work) lastActivatedTime=-999999999-01-01T00:00 lastDeactivatedTime=-999999999-01-01T00:00 keepDisabledAcrossBoots=false },currentSubState=ENABLED,expectedSubState=UNKNOWN,existsInUsableList=false.\n#35 D 7SIM.SubscriptionsImplLegacy persistSubscriptionState(subId=2,state=ENABLED).\n#36 D 7SIM.SubscriptionsImplLegacy syncSubscriptions(dateTime=2024-08-23T14:51:08.280) : Subscription { id=1 slotIndex=-1 simState=UNKNOWN iconTint=-16777216 name= lastActivatedTime=2024-08-23T14:51 lastDeactivatedTime=-999999999-01-01T00:00 keepDisabledAcrossBoots=false }.\n#37 V 7SIM.SubscriptionsImplLegacy persistSubscription(sub=Subscription { id=1 slotIndex=-1 simState=UNKNOWN iconTint=-16777216 name= lastActivatedTime=-999999999-01-01T00:00 lastDeactivatedTime=-999999999-01-01T00:00 keepDisabledAcrossBoots=false }).\n#38 D 7SIM.SubscriptionsImplLegacy persistSubscriptionState(subId=1,state=UNKNOWN).\n#39 D 7SIM.ForegroundService Worker.execute(taskId=1) Finish : mQueueSize=2.\n#40 D 7SIM.ForegroundService Worker.execute(taskId=2) Start : mQueueSize=2.\n#41 D 7SIM.SubscriptionScheduler syncSubscriptionEnabledState(subId=2,compareTime=2024-08-23T14:51:08.280,overrideUserPreference=false) : Subscription { id=2 slotIndex=0 simState=ENABLED iconTint=-13408298 name=Vodafone (work) lastActivatedTime=-999999999-01-01T00:00 lastDeactivatedTime=-999999999-01-01T00:00 keepDisabledAcrossBoots=false },nearestEnableTime=Optional.empty,nearestDisableTime=Optional[2024-08-19T08:00],expectedEnabled=false,isInCall=false.\n#42 D 7SIM.TelephonyController setSimState(slotIndex=0,enabled=false,keepDisabledAcrossBoots=false) : In sync block.\n\nSigned-off-by: iusmac \n\n# Please enter the commit message for your changes. Lines starting\n# with '#' will be kept; you may remove them yourself if you want to.\n# An empty message aborts the commit.\n#\n# Date: Fri Aug 23 16:04:50 2024 +0200\n#\n# interactive rebase in progress; onto 7db7f568\n# Last command done (1 command done):\n# edit 42ea1228 fix(telephony): prevent SIM subscriptions sync when altering SIM state\n# Next command to do (1 remaining command):\n# exec GIT_AUTHOR_NAME='iusmac' GIT_AUTHOR_EMAIL='iusico.maxim@libero.it' GIT_AUTHOR_DATE='Fri Aug 23 16:04:50 2024 +0200' GIT_COMMITTER_NAME='iusmac' GIT_COMMITTER_EMAIL='iusico.maxim@libero.it' GIT_COMMITTER_DATE='Fri Aug 23 16:04:50 2024 +0200' git commit --quiet --amend --reset-author --no-edit\n# You are currently editing a commit while rebasing branch '14.0-dev' on '7db7f568'.\n#\n# Changes to be committed:\n#\tmodified: src/com/github/iusmac/sevensim/telephony/SubscriptionController.java\n#\tmodified: src/com/github/iusmac/sevensim/telephony/Subscriptions.java\n#\tmodified: src/com/github/iusmac/sevensim/telephony/TelephonyController.java\n#","shortMessageHtmlLink":"fix(telephony): prevent SIM subscriptions sync when altering SIM state"}},{"before":"a34c6ce3a582dfc8c255a3c228cba9055bdb3185","after":null,"ref":"refs/heads/introduce-errorprone","pushedAt":"2024-08-21T11:17:33.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"}},{"before":"5ca206ffdf1a26086d8cd7397a46d82de9aca435","after":"a9ed901a441ffd26f60a52abde8409dafe5254ea","ref":"refs/heads/release-please--branches--14.0-dev","pushedAt":"2024-08-21T11:16:13.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"chore(14.0-dev): release 2.0.1","shortMessageHtmlLink":"chore(14.0-dev): release 2.0.1"}},{"before":null,"after":"5ca206ffdf1a26086d8cd7397a46d82de9aca435","ref":"refs/heads/release-please--branches--14.0-dev","pushedAt":"2024-08-21T11:16:12.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"fix: address highly critical errorprone issues\n\n> Task :compileDebugJavaWithJavac\n• 1 src/com/github/iusmac/sevensim/scheduler/SubscriptionScheduleEntity.java:104: error: [EqualsHashCode] Classes that override equals should also override hashCode.\n public boolean equals(final Object o) {\n ^\n (see https://errorprone.info/bugpattern/EqualsHashCode)\n\n• 2 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:71: error: [GuardedBy] Invalid @GuardedBy expression: static member guarded by instance\n private static Locale sDefaultLocaleCache;\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 3 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:73: error: [GuardedBy] Invalid @GuardedBy expression: static member guarded by instance\n private static String[] sDaysOfWeekNarrowStrings;\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 4 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:269: error: [GuardedBy] This access should be guarded by 'DaysOfWeek'; instead found: 'this'\n if (sDaysOfWeekNarrowStrings == null || !loc.equals(sDefaultLocaleCache)) {\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 5 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:269: error: [GuardedBy] This access should be guarded by 'DaysOfWeek'; instead found: 'this'\n if (sDaysOfWeekNarrowStrings == null || !loc.equals(sDefaultLocaleCache)) {\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 6 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:270: error: [GuardedBy] This access should be guarded by 'DaysOfWeek'; instead found: 'this'\n sDaysOfWeekNarrowStrings = DateFormatSymbols.getInstance(loc)\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 7 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:272: error: [GuardedBy] This access should be guarded by 'DaysOfWeek'; instead found: 'this'\n sDefaultLocaleCache = loc;\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 8 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:274: error: [GuardedBy] This access should be guarded by 'DaysOfWeek'; instead found: 'this'\n return sDaysOfWeekNarrowStrings[dayOfWeek];\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 9 src/com/github/iusmac/sevensim/telephony/Subscription.java:143: error: [BoxedPrimitiveEquality] Comparison using reference equality instead of value equality. Reference equality of boxed primitive types is usually not useful, as they are value objects, and it is bug-prone, as instances are cached for some values but not others.\n && mKeepDisabledAcrossBoots == subToCompare.mKeepDisabledAcrossBoots;\n ^\n (see https://errorprone.info/bugpattern/BoxedPrimitiveEquality)\n Did you mean '&& Objects.equals(mKeepDisabledAcrossBoots, subToCompare.mKeepDisabledAcrossBoots);' or '&& mKeepDisabledAcrossBoots.equals(subToCompare.mKeepDisabledAcrossBoots);'?\n\n• 10 src/com/github/iusmac/sevensim/telephony/TelephonyController.java:369: error: [GuardedBy] This access should be guarded by 'TelephonyController.this', which is not currently held\n final Subscription sub = BundleCompat.getParcelable(mRequestMetadata, KEY_SUBSCRIPTION,\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 11 src/com/github/iusmac/sevensim/telephony/PinStorage.java:55: error: [GuardedBy] Invalid @GuardedBy expression: static member guarded by instance\n private static long sLastKeystoreAuthTimestamp;\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 12 src/com/github/iusmac/sevensim/telephony/PinStorage.java:381: error: [GuardedBy] This access should be guarded by 'PinStorage'; instead found: 'this'\n final long authTimeout = sLastKeystoreAuthTimestamp == 0 ? 0 : sLastKeystoreAuthTimestamp +\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 13 src/com/github/iusmac/sevensim/telephony/PinStorage.java:381: error: [GuardedBy] This access should be guarded by 'PinStorage'; instead found: 'this'\n final long authTimeout = sLastKeystoreAuthTimestamp == 0 ? 0 : sLastKeystoreAuthTimestamp +\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 14 src/com/github/iusmac/sevensim/telephony/PinStorage.java:394: error: [GuardedBy] This access should be guarded by 'PinStorage'; instead found: 'PinStorage.class'\n sLastKeystoreAuthTimestamp = timestamp;\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 15 src/com/github/iusmac/sevensim/ui/components/ItemAdapter.java:456: error: [EqualsHashCode] Classes that override equals should also override hashCode.\n public boolean equals(final Object o) {\n ^\n (see https://errorprone.info/bugpattern/EqualsHashCode)\n\nSigned-off-by: iusmac ","shortMessageHtmlLink":"fix: address highly critical errorprone issues"}},{"before":"c2b6d9fe2bc9fad692857951f1f2a24d8e9c0a55","after":"5ca206ffdf1a26086d8cd7397a46d82de9aca435","ref":"refs/heads/14.0-dev","pushedAt":"2024-08-21T11:15:52.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"fix: address highly critical errorprone issues\n\n> Task :compileDebugJavaWithJavac\n• 1 src/com/github/iusmac/sevensim/scheduler/SubscriptionScheduleEntity.java:104: error: [EqualsHashCode] Classes that override equals should also override hashCode.\n public boolean equals(final Object o) {\n ^\n (see https://errorprone.info/bugpattern/EqualsHashCode)\n\n• 2 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:71: error: [GuardedBy] Invalid @GuardedBy expression: static member guarded by instance\n private static Locale sDefaultLocaleCache;\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 3 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:73: error: [GuardedBy] Invalid @GuardedBy expression: static member guarded by instance\n private static String[] sDaysOfWeekNarrowStrings;\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 4 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:269: error: [GuardedBy] This access should be guarded by 'DaysOfWeek'; instead found: 'this'\n if (sDaysOfWeekNarrowStrings == null || !loc.equals(sDefaultLocaleCache)) {\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 5 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:269: error: [GuardedBy] This access should be guarded by 'DaysOfWeek'; instead found: 'this'\n if (sDaysOfWeekNarrowStrings == null || !loc.equals(sDefaultLocaleCache)) {\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 6 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:270: error: [GuardedBy] This access should be guarded by 'DaysOfWeek'; instead found: 'this'\n sDaysOfWeekNarrowStrings = DateFormatSymbols.getInstance(loc)\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 7 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:272: error: [GuardedBy] This access should be guarded by 'DaysOfWeek'; instead found: 'this'\n sDefaultLocaleCache = loc;\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 8 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:274: error: [GuardedBy] This access should be guarded by 'DaysOfWeek'; instead found: 'this'\n return sDaysOfWeekNarrowStrings[dayOfWeek];\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 9 src/com/github/iusmac/sevensim/telephony/Subscription.java:143: error: [BoxedPrimitiveEquality] Comparison using reference equality instead of value equality. Reference equality of boxed primitive types is usually not useful, as they are value objects, and it is bug-prone, as instances are cached for some values but not others.\n && mKeepDisabledAcrossBoots == subToCompare.mKeepDisabledAcrossBoots;\n ^\n (see https://errorprone.info/bugpattern/BoxedPrimitiveEquality)\n Did you mean '&& Objects.equals(mKeepDisabledAcrossBoots, subToCompare.mKeepDisabledAcrossBoots);' or '&& mKeepDisabledAcrossBoots.equals(subToCompare.mKeepDisabledAcrossBoots);'?\n\n• 10 src/com/github/iusmac/sevensim/telephony/TelephonyController.java:369: error: [GuardedBy] This access should be guarded by 'TelephonyController.this', which is not currently held\n final Subscription sub = BundleCompat.getParcelable(mRequestMetadata, KEY_SUBSCRIPTION,\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 11 src/com/github/iusmac/sevensim/telephony/PinStorage.java:55: error: [GuardedBy] Invalid @GuardedBy expression: static member guarded by instance\n private static long sLastKeystoreAuthTimestamp;\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 12 src/com/github/iusmac/sevensim/telephony/PinStorage.java:381: error: [GuardedBy] This access should be guarded by 'PinStorage'; instead found: 'this'\n final long authTimeout = sLastKeystoreAuthTimestamp == 0 ? 0 : sLastKeystoreAuthTimestamp +\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 13 src/com/github/iusmac/sevensim/telephony/PinStorage.java:381: error: [GuardedBy] This access should be guarded by 'PinStorage'; instead found: 'this'\n final long authTimeout = sLastKeystoreAuthTimestamp == 0 ? 0 : sLastKeystoreAuthTimestamp +\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 14 src/com/github/iusmac/sevensim/telephony/PinStorage.java:394: error: [GuardedBy] This access should be guarded by 'PinStorage'; instead found: 'PinStorage.class'\n sLastKeystoreAuthTimestamp = timestamp;\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 15 src/com/github/iusmac/sevensim/ui/components/ItemAdapter.java:456: error: [EqualsHashCode] Classes that override equals should also override hashCode.\n public boolean equals(final Object o) {\n ^\n (see https://errorprone.info/bugpattern/EqualsHashCode)\n\nSigned-off-by: iusmac ","shortMessageHtmlLink":"fix: address highly critical errorprone issues"}},{"before":"bbd18957958755251fe207f3d0048f0f9ca093ed","after":"a34c6ce3a582dfc8c255a3c228cba9055bdb3185","ref":"refs/heads/introduce-errorprone","pushedAt":"2024-08-21T09:26:57.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"fix: address highly critical errorprone issues\n\n> Task :compileDebugJavaWithJavac\n• 1 src/com/github/iusmac/sevensim/scheduler/SubscriptionScheduleEntity.java:104: error: [EqualsHashCode] Classes that override equals should also override hashCode.\n public boolean equals(final Object o) {\n ^\n (see https://errorprone.info/bugpattern/EqualsHashCode)\n\n• 2 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:71: error: [GuardedBy] Invalid @GuardedBy expression: static member guarded by instance\n private static Locale sDefaultLocaleCache;\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 3 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:73: error: [GuardedBy] Invalid @GuardedBy expression: static member guarded by instance\n private static String[] sDaysOfWeekNarrowStrings;\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 4 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:269: error: [GuardedBy] This access should be guarded by 'DaysOfWeek'; instead found: 'this'\n if (sDaysOfWeekNarrowStrings == null || !loc.equals(sDefaultLocaleCache)) {\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 5 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:269: error: [GuardedBy] This access should be guarded by 'DaysOfWeek'; instead found: 'this'\n if (sDaysOfWeekNarrowStrings == null || !loc.equals(sDefaultLocaleCache)) {\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 6 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:270: error: [GuardedBy] This access should be guarded by 'DaysOfWeek'; instead found: 'this'\n sDaysOfWeekNarrowStrings = DateFormatSymbols.getInstance(loc)\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 7 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:272: error: [GuardedBy] This access should be guarded by 'DaysOfWeek'; instead found: 'this'\n sDefaultLocaleCache = loc;\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 8 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:274: error: [GuardedBy] This access should be guarded by 'DaysOfWeek'; instead found: 'this'\n return sDaysOfWeekNarrowStrings[dayOfWeek];\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 9 src/com/github/iusmac/sevensim/telephony/Subscription.java:143: error: [BoxedPrimitiveEquality] Comparison using reference equality instead of value equality. Reference equality of boxed primitive types is usually not useful, as they are value objects, and it is bug-prone, as instances are cached for some values but not others.\n && mKeepDisabledAcrossBoots == subToCompare.mKeepDisabledAcrossBoots;\n ^\n (see https://errorprone.info/bugpattern/BoxedPrimitiveEquality)\n Did you mean '&& Objects.equals(mKeepDisabledAcrossBoots, subToCompare.mKeepDisabledAcrossBoots);' or '&& mKeepDisabledAcrossBoots.equals(subToCompare.mKeepDisabledAcrossBoots);'?\n\n• 10 src/com/github/iusmac/sevensim/telephony/TelephonyController.java:369: error: [GuardedBy] This access should be guarded by 'TelephonyController.this', which is not currently held\n final Subscription sub = BundleCompat.getParcelable(mRequestMetadata, KEY_SUBSCRIPTION,\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 11 src/com/github/iusmac/sevensim/telephony/PinStorage.java:55: error: [GuardedBy] Invalid @GuardedBy expression: static member guarded by instance\n private static long sLastKeystoreAuthTimestamp;\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 12 src/com/github/iusmac/sevensim/telephony/PinStorage.java:381: error: [GuardedBy] This access should be guarded by 'PinStorage'; instead found: 'this'\n final long authTimeout = sLastKeystoreAuthTimestamp == 0 ? 0 : sLastKeystoreAuthTimestamp +\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 13 src/com/github/iusmac/sevensim/telephony/PinStorage.java:381: error: [GuardedBy] This access should be guarded by 'PinStorage'; instead found: 'this'\n final long authTimeout = sLastKeystoreAuthTimestamp == 0 ? 0 : sLastKeystoreAuthTimestamp +\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 14 src/com/github/iusmac/sevensim/telephony/PinStorage.java:394: error: [GuardedBy] This access should be guarded by 'PinStorage'; instead found: 'PinStorage.class'\n sLastKeystoreAuthTimestamp = timestamp;\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 15 src/com/github/iusmac/sevensim/ui/components/ItemAdapter.java:456: error: [EqualsHashCode] Classes that override equals should also override hashCode.\n public boolean equals(final Object o) {\n ^\n (see https://errorprone.info/bugpattern/EqualsHashCode)\n\nSigned-off-by: iusmac ","shortMessageHtmlLink":"fix: address highly critical errorprone issues"}},{"before":null,"after":"bbd18957958755251fe207f3d0048f0f9ca093ed","ref":"refs/heads/introduce-errorprone","pushedAt":"2024-08-21T09:19:42.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"},"commit":{"message":"fix: address highly critical errorprone issues\n\n> Task :compileDebugJavaWithJavac\n• 1 src/com/github/iusmac/sevensim/scheduler/SubscriptionScheduleEntity.java:104: error: [EqualsHashCode] Classes that override equals should also override hashCode.\n public boolean equals(final Object o) {\n ^\n (see https://errorprone.info/bugpattern/EqualsHashCode)\n\n• 2 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:71: error: [GuardedBy] Invalid @GuardedBy expression: static member guarded by instance\n private static Locale sDefaultLocaleCache;\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 3 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:73: error: [GuardedBy] Invalid @GuardedBy expression: static member guarded by instance\n private static String[] sDaysOfWeekNarrowStrings;\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 4 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:269: error: [GuardedBy] This access should be guarded by 'DaysOfWeek'; instead found: 'this'\n if (sDaysOfWeekNarrowStrings == null || !loc.equals(sDefaultLocaleCache)) {\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 5 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:269: error: [GuardedBy] This access should be guarded by 'DaysOfWeek'; instead found: 'this'\n if (sDaysOfWeekNarrowStrings == null || !loc.equals(sDefaultLocaleCache)) {\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 6 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:270: error: [GuardedBy] This access should be guarded by 'DaysOfWeek'; instead found: 'this'\n sDaysOfWeekNarrowStrings = DateFormatSymbols.getInstance(loc)\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 7 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:272: error: [GuardedBy] This access should be guarded by 'DaysOfWeek'; instead found: 'this'\n sDefaultLocaleCache = loc;\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 8 src/com/github/iusmac/sevensim/scheduler/DaysOfWeek.java:274: error: [GuardedBy] This access should be guarded by 'DaysOfWeek'; instead found: 'this'\n return sDaysOfWeekNarrowStrings[dayOfWeek];\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 9 src/com/github/iusmac/sevensim/telephony/Subscription.java:143: error: [BoxedPrimitiveEquality] Comparison using reference equality instead of value equality. Reference equality of boxed primitive types is usually not useful, as they are value objects, and it is bug-prone, as instances are cached for some values but not others.\n && mKeepDisabledAcrossBoots == subToCompare.mKeepDisabledAcrossBoots;\n ^\n (see https://errorprone.info/bugpattern/BoxedPrimitiveEquality)\n Did you mean '&& Objects.equals(mKeepDisabledAcrossBoots, subToCompare.mKeepDisabledAcrossBoots);' or '&& mKeepDisabledAcrossBoots.equals(subToCompare.mKeepDisabledAcrossBoots);'?\n\n• 10 src/com/github/iusmac/sevensim/telephony/TelephonyController.java:369: error: [GuardedBy] This access should be guarded by 'TelephonyController.this', which is not currently held\n final Subscription sub = BundleCompat.getParcelable(mRequestMetadata, KEY_SUBSCRIPTION,\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 11 src/com/github/iusmac/sevensim/telephony/PinStorage.java:55: error: [GuardedBy] Invalid @GuardedBy expression: static member guarded by instance\n private static long sLastKeystoreAuthTimestamp;\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 12 src/com/github/iusmac/sevensim/telephony/PinStorage.java:381: error: [GuardedBy] This access should be guarded by 'PinStorage'; instead found: 'this'\n final long authTimeout = sLastKeystoreAuthTimestamp == 0 ? 0 : sLastKeystoreAuthTimestamp +\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 13 src/com/github/iusmac/sevensim/telephony/PinStorage.java:381: error: [GuardedBy] This access should be guarded by 'PinStorage'; instead found: 'this'\n final long authTimeout = sLastKeystoreAuthTimestamp == 0 ? 0 : sLastKeystoreAuthTimestamp +\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 14 src/com/github/iusmac/sevensim/telephony/PinStorage.java:394: error: [GuardedBy] This access should be guarded by 'PinStorage'; instead found: 'PinStorage.class'\n sLastKeystoreAuthTimestamp = timestamp;\n ^\n (see https://errorprone.info/bugpattern/GuardedBy)\n\n• 15 src/com/github/iusmac/sevensim/ui/components/ItemAdapter.java:456: error: [EqualsHashCode] Classes that override equals should also override hashCode.\n public boolean equals(final Object o) {\n ^\n (see https://errorprone.info/bugpattern/EqualsHashCode)\n\nSigned-off-by: iusmac ","shortMessageHtmlLink":"fix: address highly critical errorprone issues"}},{"before":"918a0dcf9fcf650cefc8898b3ce775210aa645e2","after":null,"ref":"refs/heads/release-please--branches--14.0-dev","pushedAt":"2024-08-11T17:27:17.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"iusmac","name":"Max","path":"/iusmac","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28353279?s=80&v=4"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAErPQwvQA","startCursor":null,"endCursor":null}},"title":"Activity · iusmac/7SIM"}