10144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar/*
20144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar**
30144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar** Copyright (C) 2014, The Android Open Source Project
40144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar**
50144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar** Licensed under the Apache License, Version 2.0 (the "License");
60144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar** you may not use this file except in compliance with the License.
70144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar** You may obtain a copy of the License at
80144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar**
90144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar**     http://www.apache.org/licenses/LICENSE-2.0
100144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar**
110144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar** Unless required by applicable law or agreed to in writing, software
120144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar** distributed under the License is distributed on an "AS IS" BASIS,
130144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
140144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar** See the License for the specific language governing permissions and
150144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar** limitations under the License.
160144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar*/
170144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar
180144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwarpackage com.android.providers.telephony;
190144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar
200144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwarimport android.content.Context;
210144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwarimport android.database.sqlite.SQLiteDatabase;
220144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwarimport android.database.sqlite.SQLiteOpenHelper;
230144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwarimport android.text.TextUtils;
24cc28f5747906c51908a5ae59ca6a79abd1019834pkanwarimport android.util.Log;
25cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar
260144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwarimport java.util.ArrayList;
270144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwarimport java.util.List;
280144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar
290144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwarpublic class CarrierDatabaseHelper extends SQLiteOpenHelper {
300144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar    private static final String TAG = "CarrierDatabaseHelper";
310144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar    private static final boolean DBG = true;
320144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar
330144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar    private static final String DATABASE_NAME = "CarrierInformation.db";
340144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar    public static final String CARRIER_KEY_TABLE = "carrier_key";
35cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar    private static final int DATABASE_VERSION = 2;
360144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar
370144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar    /**
380144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar     * CarrierDatabaseHelper carrier database helper class.
390144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar     * @param context of the user.
400144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar     */
410144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar    public CarrierDatabaseHelper(Context context) {
420144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar        super(context, DATABASE_NAME, null, DATABASE_VERSION);
430144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar    }
440144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar
45cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar    public static final String KEY_TYPE = "key_type";
46cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar    public static final String MCC = "mcc";
47cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar    public static final String MNC = "mnc";
48cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar    public static final String MVNO_TYPE = "mvno_type";
49cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar    public static final String MVNO_MATCH_DATA = "mvno_match_data";
50cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar    public static final String PUBLIC_KEY = "public_key";
51cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar    public static final String KEY_IDENTIFIER = "key_identifier";
52cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar    public static final String EXPIRATION_TIME = "expiration_time";
53cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar    public static final String LAST_MODIFIED = "last_modified";
540144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar
550144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar    private static final List<String> CARRIERS_UNIQUE_FIELDS = new ArrayList<String>();
560144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar
570144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar    static {
580144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar        CARRIERS_UNIQUE_FIELDS.add(MCC);
590144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar        CARRIERS_UNIQUE_FIELDS.add(MNC);
600144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar        CARRIERS_UNIQUE_FIELDS.add(KEY_TYPE);
610144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar        CARRIERS_UNIQUE_FIELDS.add(MVNO_TYPE);
620144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar        CARRIERS_UNIQUE_FIELDS.add(MVNO_MATCH_DATA);
630144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar    }
640144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar
650144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar    public static String getStringForCarrierKeyTableCreation(String tableName) {
660144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar        return "CREATE TABLE " + tableName +
670144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar                "(_id INTEGER PRIMARY KEY," +
680144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar                MCC + " TEXT DEFAULT ''," +
690144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar                MNC + " TEXT DEFAULT ''," +
700144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar                MVNO_TYPE + " TEXT DEFAULT ''," +
710144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar                MVNO_MATCH_DATA + " TEXT DEFAULT ''," +
720144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar                KEY_TYPE + " TEXT DEFAULT ''," +
73cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar                KEY_IDENTIFIER + " TEXT DEFAULT ''," +
74cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar                PUBLIC_KEY + " BLOB DEFAULT ''," +
75cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar                EXPIRATION_TIME + " INTEGER DEFAULT 0," +
760144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar                LAST_MODIFIED + " INTEGER DEFAULT 0," +
770144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar                "UNIQUE (" + TextUtils.join(", ", CARRIERS_UNIQUE_FIELDS) + "));";
780144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar    }
790144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar
800144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar    @Override
810144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar    public void onCreate(SQLiteDatabase db) {
820144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar        db.execSQL(getStringForCarrierKeyTableCreation(CARRIER_KEY_TABLE));
830144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar    }
840144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar
85cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar    public void createCarrierTable(SQLiteDatabase db) {
86cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar        db.execSQL(getStringForCarrierKeyTableCreation(CARRIER_KEY_TABLE));
87cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar    }
88cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar
89cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar    public void dropCarrierTable(SQLiteDatabase db) {
90cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar        db.execSQL("DROP TABLE IF EXISTS " + CARRIER_KEY_TABLE + ";");
91cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar    }
92cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar
930144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar    @Override
940144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
95cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar        Log.d(TAG, "dbh.onUpgrade:+ db=" + db + " oldV=" + oldVersion + " newV=" + newVersion);
96cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar        if (oldVersion < 2) {
97cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar            dropCarrierTable(db);
98cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar            createCarrierTable(db);
99cc28f5747906c51908a5ae59ca6a79abd1019834pkanwar        }
1000144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar    }
1010144c1c734a73b5f2cf4b8b9675c0cd047f3b15bpkanwar}
102