@@ -63,7 +63,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
6363 // database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion'
6464 // is properly propagated through your change. Not doing so will result in a loss of user
6565 // settings.
66- private static final int DATABASE_VERSION = 77 ;
66+ private static final int DATABASE_VERSION = 78 ;
6767
6868 private Context mContext;
6969
@@ -657,7 +657,7 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int currentVersion) {
657657
658658 upgradeVersion = 53;
659659 }
660-
660+
661661 if (upgradeVersion == 53) {
662662 /*
663663 * New settings for set install location UI no longer initiated here.
@@ -1047,6 +1047,12 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int currentVersion) {
10471047 upgradeVersion = 77;
10481048 }
10491049
1050+ if (upgradeVersion == 77) {
1051+ // Introduce "vibrate when ringing" setting
1052+ loadVibrateWhenRingingSetting(db);
1053+
1054+ upgradeVersion = 78;
1055+ }
10501056
10511057 // *** Remember to update DATABASE_VERSION above!
10521058
@@ -1141,7 +1147,7 @@ private void upgradeScreenTimeoutFromNever(SQLiteDatabase db) {
11411147 try {
11421148 stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
11431149 + " VALUES(?,?);");
1144-
1150+
11451151 // Set the timeout to 30 minutes in milliseconds
11461152 loadSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
11471153 Integer.toString(30 * 60 * 1000));
@@ -1303,7 +1309,7 @@ private void loadVolumeLevels(SQLiteDatabase db) {
13031309 try {
13041310 stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
13051311 + " VALUES(?,?);");
1306-
1312+
13071313 loadSetting(stmt, Settings.System.VOLUME_MUSIC,
13081314 AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_MUSIC]);
13091315 loadSetting(stmt, Settings.System.VOLUME_RING,
@@ -1324,10 +1330,10 @@ private void loadVolumeLevels(SQLiteDatabase db) {
13241330 stmt,
13251331 Settings.System.VOLUME_BLUETOOTH_SCO,
13261332 AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_BLUETOOTH_SCO]);
1327-
1333+
13281334 loadSetting(stmt, Settings.System.MODE_RINGER,
13291335 AudioManager.RINGER_MODE_NORMAL);
1330-
1336+
13311337 // By default:
13321338 // - ringtones, notification, system and music streams are affected by ringer mode
13331339 // on non voice capable devices (tablets)
@@ -1352,6 +1358,8 @@ private void loadVolumeLevels(SQLiteDatabase db) {
13521358 } finally {
13531359 if (stmt != null) stmt.close();
13541360 }
1361+
1362+ loadVibrateWhenRingingSetting(db);
13551363 }
13561364
13571365 private void loadVibrateSetting(SQLiteDatabase db, boolean deleteOld) {
@@ -1363,7 +1371,7 @@ private void loadVibrateSetting(SQLiteDatabase db, boolean deleteOld) {
13631371 try {
13641372 stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
13651373 + " VALUES(?,?);");
1366-
1374+
13671375 // Vibrate on by default for ringer, on for notification
13681376 int vibrate = 0;
13691377 vibrate = AudioService.getValueForVibrateSetting(vibrate,
@@ -1377,6 +1385,24 @@ private void loadVibrateSetting(SQLiteDatabase db, boolean deleteOld) {
13771385 }
13781386 }
13791387
1388+ private void loadVibrateWhenRingingSetting(SQLiteDatabase db) {
1389+ // The default should be off. VIBRATE_SETTING_ONLY_SILENT should also be ignored here.
1390+ // Phone app should separately check whether AudioManager#getRingerMode() returns
1391+ // RINGER_MODE_VIBRATE, with which the device should vibrate anyway.
1392+ int vibrateSetting = getIntValueFromSystem(db, Settings.System.VIBRATE_ON,
1393+ AudioManager.VIBRATE_SETTING_OFF);
1394+ boolean vibrateWhenRinging = ((vibrateSetting & 3) == AudioManager.VIBRATE_SETTING_ON);
1395+
1396+ SQLiteStatement stmt = null;
1397+ try {
1398+ stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
1399+ + " VALUES(?,?);");
1400+ loadSetting(stmt, Settings.System.VIBRATE_WHEN_RINGING, vibrateWhenRinging ? 1 : 0);
1401+ } finally {
1402+ if (stmt != null) stmt.close();
1403+ }
1404+ }
1405+
13801406 private void loadSettings(SQLiteDatabase db) {
13811407 loadSystemSettings(db);
13821408 loadSecureSettings(db);
@@ -1387,7 +1413,7 @@ private void loadSystemSettings(SQLiteDatabase db) {
13871413 try {
13881414 stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
13891415 + " VALUES(?,?);");
1390-
1416+
13911417 loadBooleanSetting(stmt, Settings.System.DIM_SCREEN,
13921418 R.bool.def_dim_screen);
13931419 loadSetting(stmt, Settings.System.STAY_ON_WHILE_PLUGGED_IN,
@@ -1396,31 +1422,31 @@ private void loadSystemSettings(SQLiteDatabase db) {
13961422 ? 1 : 0);
13971423 loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
13981424 R.integer.def_screen_off_timeout);
1399-
1425+
14001426 // Set default cdma emergency tone
14011427 loadSetting(stmt, Settings.System.EMERGENCY_TONE, 0);
1402-
1428+
14031429 // Set default cdma call auto retry
14041430 loadSetting(stmt, Settings.System.CALL_AUTO_RETRY, 0);
1405-
1431+
14061432 // Set default cdma DTMF type
14071433 loadSetting(stmt, Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, 0);
1408-
1434+
14091435 // Set default hearing aid
14101436 loadSetting(stmt, Settings.System.HEARING_AID, 0);
1411-
1437+
14121438 // Set default tty mode
14131439 loadSetting(stmt, Settings.System.TTY_MODE, 0);
1414-
1440+
14151441 loadBooleanSetting(stmt, Settings.System.AIRPLANE_MODE_ON,
14161442 R.bool.def_airplane_mode_on);
1417-
1443+
14181444 loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_RADIOS,
14191445 R.string.def_airplane_mode_radios);
1420-
1446+
14211447 loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
14221448 R.string.airplane_mode_toggleable_radios);
1423-
1449+
14241450 loadBooleanSetting(stmt, Settings.System.AUTO_TIME,
14251451 R.bool.def_auto_time); // Sync time to NITZ
14261452
@@ -1429,17 +1455,17 @@ private void loadSystemSettings(SQLiteDatabase db) {
14291455
14301456 loadIntegerSetting(stmt, Settings.System.SCREEN_BRIGHTNESS,
14311457 R.integer.def_screen_brightness);
1432-
1458+
14331459 loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE,
14341460 R.bool.def_screen_brightness_automatic_mode);
1435-
1461+
14361462 loadDefaultAnimationSettings(stmt);
1437-
1463+
14381464 loadBooleanSetting(stmt, Settings.System.ACCELEROMETER_ROTATION,
14391465 R.bool.def_accelerometer_rotation);
1440-
1466+
14411467 loadDefaultHapticSettings(stmt);
1442-
1468+
14431469 loadBooleanSetting(stmt, Settings.System.NOTIFICATION_LIGHT_PULSE,
14441470 R.bool.def_notification_pulse);
14451471 loadSetting(stmt, Settings.Secure.SET_INSTALL_LOCATION, 0);
@@ -1504,41 +1530,41 @@ private void loadSecureSettings(SQLiteDatabase db) {
15041530 try {
15051531 stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
15061532 + " VALUES(?,?);");
1507-
1533+
15081534 loadBooleanSetting(stmt, Settings.Secure.BLUETOOTH_ON,
15091535 R.bool.def_bluetooth_on);
1510-
1536+
15111537 // Data roaming default, based on build
15121538 loadSetting(stmt, Settings.Secure.DATA_ROAMING,
15131539 "true".equalsIgnoreCase(
15141540 SystemProperties.get("ro.com.android.dataroaming",
15151541 "false")) ? 1 : 0);
1516-
1542+
15171543 loadBooleanSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS,
15181544 R.bool.def_install_non_market_apps);
1519-
1545+
15201546 loadStringSetting(stmt, Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
15211547 R.string.def_location_providers_allowed);
1522-
1548+
15231549 loadBooleanSetting(stmt, Settings.Secure.ASSISTED_GPS_ENABLED,
15241550 R.bool.assisted_gps_enabled);
1525-
1551+
15261552 loadIntegerSetting(stmt, Settings.Secure.NETWORK_PREFERENCE,
15271553 R.integer.def_network_preference);
1528-
1554+
15291555 loadBooleanSetting(stmt, Settings.Secure.USB_MASS_STORAGE_ENABLED,
15301556 R.bool.def_usb_mass_storage_enabled);
1531-
1557+
15321558 loadBooleanSetting(stmt, Settings.Secure.WIFI_ON,
15331559 R.bool.def_wifi_on);
15341560 loadBooleanSetting(stmt, Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
15351561 R.bool.def_networks_available_notification_on);
1536-
1562+
15371563 String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist");
15381564 if (!TextUtils.isEmpty(wifiWatchList)) {
15391565 loadSetting(stmt, Settings.Secure.WIFI_WATCHDOG_WATCH_LIST, wifiWatchList);
15401566 }
1541-
1567+
15421568 // Set the preferred network mode to 0 = Global, CDMA default
15431569 int type;
15441570 if (BaseCommands.getLteOnCdmaModeStatic() == Phone.LTE_ON_CDMA_TRUE) {
@@ -1548,30 +1574,30 @@ private void loadSecureSettings(SQLiteDatabase db) {
15481574 RILConstants.PREFERRED_NETWORK_MODE);
15491575 }
15501576 loadSetting(stmt, Settings.Secure.PREFERRED_NETWORK_MODE, type);
1551-
1577+
15521578 // Enable or disable Cell Broadcast SMS
15531579 loadSetting(stmt, Settings.Secure.CDMA_CELL_BROADCAST_SMS,
15541580 RILConstants.CDMA_CELL_BROADCAST_SMS_DISABLED);
1555-
1581+
15561582 // Don't do this. The SystemServer will initialize ADB_ENABLED from a
15571583 // persistent system property instead.
15581584 //loadSetting(stmt, Settings.Secure.ADB_ENABLED, 0);
1559-
1585+
15601586 // Allow mock locations default, based on build
15611587 loadSetting(stmt, Settings.Secure.ALLOW_MOCK_LOCATION,
15621588 "1".equals(SystemProperties.get("ro.allow.mock.location")) ? 1 : 0);
1563-
1589+
15641590 loadSecure35Settings(stmt);
1565-
1591+
15661592 loadBooleanSetting(stmt, Settings.Secure.MOUNT_PLAY_NOTIFICATION_SND,
15671593 R.bool.def_mount_play_notification_snd);
1568-
1594+
15691595 loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_AUTOSTART,
15701596 R.bool.def_mount_ums_autostart);
1571-
1597+
15721598 loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_PROMPT,
15731599 R.bool.def_mount_ums_prompt);
1574-
1600+
15751601 loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_NOTIFY_ENABLED,
15761602 R.bool.def_mount_ums_notify_enabled);
15771603
0 commit comments