Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8ece6833 authored by Rahul Sabnis's avatar Rahul Sabnis
Browse files

Ensure if you flash a clean build with the db update that it will not

try to update you from the old schema

Bug: 145720612
Test: atest DatabaseManagerTest
Change-Id: I6df3726928abfc954ab05053890ab7cdb7ff2b2a
parent 0030131f
Loading
Loading
Loading
Loading
+96 −81
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package com.android.bluetooth.btservice.storage;

import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;

import androidx.room.Database;
import androidx.room.Room;
@@ -178,14 +180,17 @@ public abstract class MetadataDatabase extends RoomDatabase {
    static final Migration MIGRATION_102_103 = new Migration(102, 103) {
        @Override
        public void migrate(SupportSQLiteDatabase database) {
            try {
                database.execSQL("CREATE TABLE IF NOT EXISTS `metadata_tmp` ("
                        + "`address` TEXT NOT NULL, `migrated` INTEGER NOT NULL, "
                        + "`a2dpSupportsOptionalCodecs` INTEGER NOT NULL, "
                        + "`a2dpOptionalCodecsEnabled` INTEGER NOT NULL, "
                    + "`a2dp_connection_policy` INTEGER, `a2dp_sink_connection_policy` INTEGER, "
                    + "`hfp_connection_policy` INTEGER, `hfp_client_connection_policy` INTEGER, "
                        + "`a2dp_connection_policy` INTEGER, "
                        + "`a2dp_sink_connection_policy` INTEGER, `hfp_connection_policy` INTEGER, "
                        + "`hfp_client_connection_policy` INTEGER, "
                        + "`hid_host_connection_policy` INTEGER, `pan_connection_policy` INTEGER, "
                    + "`pbap_connection_policy` INTEGER, `pbap_client_connection_policy` INTEGER, "
                        + "`pbap_connection_policy` INTEGER, "
                        + "`pbap_client_connection_policy` INTEGER, "
                        + "`map_connection_policy` INTEGER, `sap_connection_policy` INTEGER, "
                        + "`hearing_aid_connection_policy` INTEGER, "
                        + "`map_client_connection_policy` INTEGER, `manufacturer_name` BLOB, "
@@ -199,23 +204,26 @@ public abstract class MetadataDatabase extends RoomDatabase {
                        + "PRIMARY KEY(`address`))");

                database.execSQL("INSERT INTO metadata_tmp ("
                    + "address, migrated, a2dpSupportsOptionalCodecs, a2dpOptionalCodecsEnabled, "
                    + "a2dp_connection_policy, a2dp_sink_connection_policy, hfp_connection_policy,"
                        + "address, migrated, a2dpSupportsOptionalCodecs, "
                        + "a2dpOptionalCodecsEnabled, a2dp_connection_policy, "
                        + "a2dp_sink_connection_policy, hfp_connection_policy,"
                        + "hfp_client_connection_policy, hid_host_connection_policy,"
                        + "pan_connection_policy, pbap_connection_policy,"
                    + "pbap_client_connection_policy, map_connection_policy, sap_connection_policy,"
                    + "hearing_aid_connection_policy, map_client_connection_policy, "
                    + "manufacturer_name, model_name, software_version, hardware_version, "
                    + "companion_app, main_icon, is_untethered_headset, untethered_left_icon, "
                    + "untethered_right_icon, untethered_case_icon, untethered_left_battery, "
                        + "pbap_client_connection_policy, map_connection_policy, "
                        + "sap_connection_policy, hearing_aid_connection_policy, "
                        + "map_client_connection_policy, manufacturer_name, model_name, "
                        + "software_version, hardware_version, companion_app, main_icon, "
                        + "is_untethered_headset, untethered_left_icon, untethered_right_icon, "
                        + "untethered_case_icon, untethered_left_battery, "
                        + "untethered_right_battery, untethered_case_battery, "
                        + "untethered_left_charging, untethered_right_charging, "
                        + "untethered_case_charging, enhanced_settings_ui_uri) "
                        + "SELECT "
                    + "address, migrated, a2dpSupportsOptionalCodecs, a2dpOptionalCodecsEnabled, "
                    + "a2dp_priority, a2dp_sink_priority, hfp_priority, hfp_client_priority, "
                    + "hid_host_priority, pan_priority, pbap_priority, pbap_client_priority, "
                    + "map_priority, sap_priority, hearing_aid_priority, map_client_priority, "
                        + "address, migrated, a2dpSupportsOptionalCodecs, "
                        + "a2dpOptionalCodecsEnabled, a2dp_priority, a2dp_sink_priority, "
                        + "hfp_priority, hfp_client_priority, hid_host_priority, pan_priority, "
                        + "pbap_priority, pbap_client_priority, map_priority, sap_priority, "
                        + "hearing_aid_priority, map_client_priority, "
                        + "CAST (manufacturer_name AS BLOB), "
                        + "CAST (model_name AS BLOB), "
                        + "CAST (software_version AS BLOB), "
@@ -262,6 +270,13 @@ public abstract class MetadataDatabase extends RoomDatabase {

                database.execSQL("DROP TABLE `metadata`");
                database.execSQL("ALTER TABLE `metadata_tmp` RENAME TO `metadata`");
            } catch (SQLException ex) {
                // Check if user has new schema, but is just missing the version update
                Cursor cursor = database.query("SELECT * FROM metadata");
                if (cursor == null || cursor.getColumnIndex("a2dp_connection_policy") == -1) {
                    throw ex;
                }
            }
        }
    };
}