[OnePlus 7 Pro Questions & Answers] LoganDark:
I seem to have bricked every app on the whole phone, by corrupting the data directory somehow. Logcat shows constant errors that contexts can't be found because the data directory doesn't exist because mkdir returns permission errors. So every app crashes with an sqlite error like this.

FATAL EXCEPTION: main
Process: com.oneplus.opbackup, PID: 31528
java.lang.RuntimeException: Unable to resume activity {com.oneplus.opbackup/com.oneplus.opbackup.CheckUpdateActivity2}: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14 SQLITE_CANTOPEN): Could not open database
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4336)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4368)
at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2123)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7710)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14 SQLITE_CANTOPEN): Could not open database
at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:215)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:197)
at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:505)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:206)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:198)
at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:930)
at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:910)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:774)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:763)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:384)
at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:341)
at com.oneplus.opbackup.a.c.a(OperatorDao.java:49)
at com.oneplus.opbackup.a.d.a(OperatorManager.java:21)
at com.oneplus.opbackup.utils.f.d(CommonUtil.java:473)
at com.oneplus.opbackup.c.a(CheckNewOTAVersionPresenter.java:494)
at com.oneplus.opbackup.c.i(CheckNewOTAVersionPresenter.java:388)
at com.oneplus.opbackup.CheckUpdateActivity2.onResume(CheckUpdateActivity2.java:143)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1560)
at android.app.Activity.performResume(Activity.java:7957)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4326)
... 11 more

You may notice that exception is from com.oneplus.opbackup.... the system update application. Yeah local upgrade is not an option here.

I used the community Oxygen Updater to download the latest version of OOS but, since the system update application is not working, I can't figure out how to install it.

Additionally, I don't have access to a computer right now. All I have is Magisk + TWRP.

So I need very clear instructions on how to install new OOS, while preserving Magisk and TWRP. That means:

- I need to know which slot the ROM will be installed to when I flash the OOS zip in TWRP. I need to make sure it doesn't overwrite my current slot at all costs. (which is currently A)

- I need to know how to persist my root as I do not have access to fastboot to manually switch slots if even a single thing goes wrong.

My plan:

- Install OOS to inactive partition, then flash TWRP to that partition, and boot directly into that partition's TWRP.

(This needs to be done this way because, without root, TWRP will be overwritten on boot, so I cannot yet boot into system.)

- Use that TWRP to switch slots back and boot back into my rooted system, then install Magisk to inactive partition using the manager.

(Using this option is theoretically better than flashing a zip in TWRP, as Magisk Manager will be in a live system where it can most effectively gather device information.)

- Boot back into TWRP and use it to switch slots into the new updated system, which should now contain both TWRP and Magisk.

I need guidance on:

- When I flash OOS using TWRP, which slot does it go to? The one NOT selected as active in the "Reboot" section?

- After flashing, does it automatically switch the slot? Does it set some flag that tries to switch the slot after a reboot? Or does it stay on the current slot?

- If I merely switch the slot in the Reboot section, can I flash to it without having to reboot first? Then I can use the "Flash current TWRP" option in the settings.

I'm aware this is risky - I no longer have access to hardware that can support a working MSM Download Tool ever since my MacBook with the working setup died. It's really, really finicky. But I need Bluetooth to work, and right now, it crashes with the sqlite error.