#!/bin/bash
echo "Make sure your smartphone is:"
echo "- connected via USB"
echo "- running Cyanogenmod 10.1.3 with:"
echo " - enabled USB debugging"
echo " - allowed root for Apps and ADB"
echo " - should have the default settings after installation"
echo "- unlocked to enter the password for the lock screen"
echo
echo "Continue (Y/n) ?"
read -s -n 1 yesOrNo
if [ "$yesOrNo" == "n" ] || [ "$yesOrNo" == "N" ]; then
echo "Exit"
exit 1
fi
which adb > /dev/null
if [ $? -ne 0 ];then
echo "Did not find the android debug bridge (adb) in your environment. Exit."
exit 2
fi
numberOfADBDevices=$(adb devices | grep "device$" | wc -l)
if [ "$numberOfADBDevices" != "1" ];then
echo "Did not find one smartphone with adb devices: ${numberOfADBDevices}. Exit."
echo "Plug in just one smartphone via USB."
exit 3
fi
adb root
sleep 1
# disable showing password
adb shell settings put system show_password 0
# disable haptic_feedback and sound_effects
# again later with sqlite3 (sqlite3 is faster than settings)
adb shell settings put system haptic_feedback_enabled 0
adb shell settings put system sound_effects_enabled 0
## disable WLAN / wifi off
adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "update secure set value=0 where name='wifi_on';"
## disable NFC
adb shell "grep nfc_on /data/data/com.android.nfc/shared_prefs/NfcServicePrefs.xml > /dev/null; if [ \$? -ne 0 ];then sed -i 's||\n\n|g' /data/data/com.android.nfc/shared_prefs/NfcServicePrefs.xml;fi"
adb shell "sed -i 's||g' /data/data/com.android.nfc/shared_prefs/NfcServicePrefs.xml"
## airplane_mode / Flugmodus einschalten
adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "update global set value=1 where name='airplane_mode_on';"
## disable dial tone
adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "update system set value=0 where name='dtmf_tone';"
## disable haptic feedback (vibration on keypress)
adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "update system set value=0 where name='haptic_feedback_enabled';"
## disable sound for lock screen
adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "update system set value=0 where name='lockscreen_sounds_enabled';"
## disable sound effects on keypress
adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "update system set value=0 where name='sound_effects_enabled';"
## disable vibration on keypress
adb shell "grep vibrate_on /data/data/com.android.inputmethod.latin/shared_prefs/com.android.inputmethod.latin_preferences.xml > /dev/null; if [ \$? -ne 0 ];then sed -i 's||\n|g' /data/data/com.android.inputmethod.latin/shared_prefs/com.android.inputmethod.latin_preferences.xml;fi"
adb shell "sed -i 's||g' /data/data/com.android.inputmethod.latin/shared_prefs/com.android.inputmethod.latin_preferences.xml"
## disable pop-up on keypress
adb shell "grep popup_on /data/data/com.android.inputmethod.latin/shared_prefs/com.android.inputmethod.latin_preferences.xml > /dev/null; if [ \$? -ne 0 ];then sed -i 's||\n|g' /data/data/com.android.inputmethod.latin/shared_prefs/com.android.inputmethod.latin_preferences.xml;fi"
adb shell "sed -i 's||g' /data/data/com.android.inputmethod.latin/shared_prefs/com.android.inputmethod.latin_preferences.xml"
## disable spell checking / Rechtschreibprüfung
adb shell "grep spellcheckers_settings /data/data/com.android.settings/shared_prefs/com.android.settings_preferences.xml > /dev/null; if [ \$? -ne 0 ];then sed -i 's||\n|g' /data/data/com.android.settings/shared_prefs/com.android.settings_preferences.xml;fi"
adb shell "sed -i 's||g' /data/data/com.android.settings/shared_prefs/com.android.settings_preferences.xml"
## switch input methods
adb shell "grep pref_include_other_imes_in_language_switch_list /data/data/com.android.inputmethod.latin/shared_prefs/com.android.inputmethod.latin_preferences.xml > /dev/null; if [ \$? -ne 0 ];then sed -i 's||\n|g' /data/data/com.android.inputmethod.latin/shared_prefs/com.android.inputmethod.latin_preferences.xml;fi"
adb shell "sed -i 's||g' /data/data/com.android.inputmethod.latin/shared_prefs/com.android.inputmethod.latin_preferences.xml"
## disable google search bar at the top of the home screen
echo "Disabling google search bar at the top."
cat > com.cyanogenmod.trebuchet_preferences.xml <
EOF
adb push com.cyanogenmod.trebuchet_preferences.xml /data/data/com.cyanogenmod.trebuchet/shared_prefs/
rm -f com.cyanogenmod.trebuchet_preferences.xml
## password for lock screen
echo "Please enter a (changeable) password for the lock screen. Twice please."
# let the user set a password for the lock screen:
adb shell "am start -n com.android.settings/.ChooseLockGeneric" > /dev/null
echo "When finished press enter."
read line
## enable lock screen on power button
adb shell sqlite3 /data/system/locksettings.db "insert into locksettings(name, value) values('lockscreen.power_button_instantly_locks', '1');"
## set timeout for lock screen to 60 seconds
adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "insert into secure(name, value) values('lock_screen_lock_after_timeout', 60000);"
## display timeout / screen off timeout (Ruhezustand)
adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "insert into system(name, value) values('screen_off_timeout', 30000);"
## email at lock screen
echo "Please enter your email address for the case that your smartphone is lost."
read email
adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "insert into secure(name, value) values('lock_screen_owner_info', 'If you find this smartphone send an email to ${email}');"
## set a black background
cat > wallpaper_info.xml <
EOF
adb push wallpaper_info.xml /data/system/users/0/
echo -n -e "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x01\x00\x00\x00\x01\x08\x00\x00\x00\x00\x3A\x7E\x9B\x55\x00\x00\x00\x0A\x49\x44\x41\x54\x08\xD7\x63\x60\x00\x00\x00\x02\x00\x01\xE2\x21\xBC\x33\x00\x00\x00\x00\x49\x45\x4E\x44\xAE\x42\x60\x82" > wallpaper
adb push wallpaper /data/system/users/0/
rm -f wallpaper wallpaper_info.xml
## clock settings
cat > LockClock.xml <
EOF
adb shell mkdir /data/data/com.cyanogenmod.lockclock/shared_prefs
adb push LockClock.xml /data/data/com.cyanogenmod.lockclock/shared_prefs/
rm -f LockClock.xml
## change battery circle to percent
adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "update system set value='1' where name='status_bar_battery';"
## disable camera at lock screen, if desired
# info: here is no check for an existing entry in device_policies.xml
# adb shell sed -i 's||\n\n\n\n|' /data/system/device_policies.xml
## loudness of alarm / Lautstärke vom Wecker
adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "insert into system(name, value) values('volume_alarm_speaker','2');"
adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "insert into system(name, value) values('volume_alarm_last_audible_speaker','2');"
## disable screen off animation
adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "insert into system(name, value) values('screen_off_animation','0');"
## deactivate apollo music player (in favour of vlc) and browser (in favour of firefox)
# adb shell sed -i 's||\n\n|' /data/system/users/0/package-restrictions.xml
adb shell sed -i 's||\n|' /data/system/users/0/package-restrictions.xml
# change apollo settings
userid=$(adb shell "stat /data/data/com.andrew.apollo/ | grep Uid: | sed -e 's|.*Uid: ([^/]*/ *||' -e 's|).*||'" | tr -d '\r')
adb shell mkdir /data/data/com.andrew.apollo/shared_prefs
adb shell "chown ${userid}:${userid} /data/data/com.andrew.apollo/shared_prefs"
adb shell "chmod 771 /data/data/com.andrew.apollo/shared_prefs/"
cat > com.andrew.apollo_preferences.xml <
EOF
adb push com.andrew.apollo_preferences.xml /data/data/com.andrew.apollo/shared_prefs/
adb shell "chown ${userid}:${userid} /data/data/com.andrew.apollo/shared_prefs/com.andrew.apollo_preferences.xml"
adb shell "chmod 660 /data/data/com.andrew.apollo/shared_prefs/com.andrew.apollo_preferences.xml"
## first help shown
cat > privacy_guard_manager.xml <
EOF
adb push privacy_guard_manager.xml /data/data/com.android.settings/shared_prefs/
rm -f push privacy_guard_manager.xml
## disable showing password
adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "insert into system(name, value) values('show_password','0');"
## enable privacy guard as default (Datenschutz)
adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "insert into secure(name, value) values('privacy_guard_default','1');"
## enable installation from f-droid and xposed framework (unbekannte Herkunft)
adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "insert into global(name, value) values('install_non_market_apps','1');"
## disable automatic fetch of the time (avoid network traces)
adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "insert into global(name, value) values('auto_time','0');"
adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "insert into global(name, value) values('auto_time_zone','0');"
## set the timezone (same as the laptop)
mytimezone=$(date +"%:z")
declare -A timezone
timezone[-11:00]="Pacific/Midway"
timezone[-10:00]="Pacific/Honolulu"
timezone[-09:00]="America/Anchorage"
timezone[-08:00]="America/Los_Angeles"
timezone[-07:00]="America/Phoenix"
timezone[-06:00]="America/Costa_Rica"
timezone[-05:00]="America/New_York"
timezone[-04:30]="America/Caracas"
timezone[-04:00]="America/Barbados"
timezone[-03:30]="America/St_Johns"
timezone[-03:00]="America/Santiago"
timezone[-02:00]="America/Sao_Paulo"
timezone[-01:00]="Atlantic/Azores"
timezone[+00:00]="Europe/London"
timezone[+01:00]="Europe/Sarajevo"
timezone[+02:00]="Europe/Athens"
timezone[+03:00]="Europe/Minsk"
timezone[+03:30]="Asia/Tehran"
timezone[+04:00]="Europe/Moscow"
timezone[+04:30]="Asia/Kabul"
timezone[+05:00]="Asia/Karachi"
timezone[+05:30]="Asia/Calcutta"
timezone[+05:45]="Asia/Katmandu"
timezone[+06:00]="Asia/Yekaterinburg"
timezone[+06:30]="Asia/Rangoon"
timezone[+07:00]="Asia/Bangkok"
timezone[+08:00]="Australia/Perth"
timezone[+09:00]="Asia/Seoul"
timezone[+09:30]="Australia/Darwin"
timezone[+10:00]="Australia/Brisbane"
timezone[+10:30]="Australia/Adelaide"
timezone[+11:00]="Australia/Sydney"
timezone[+12:00]="Asia/Magadan"
timezone[+13:00]="Pacific/Fiji"
echo "Setting timezone of your laptop on your smartphone: ${mytimezone}, ${timezone[${mytimezone}]}"
adb shell "echo -n ${timezone[${mytimezone}]} > /data/property/persist.sys.timezone"
## rooted android / cyanogenmod set date from command line
wget -nc http://torsten-traenkner.de/cyanogenmod/settime.gz
gunzip -f settime.gz
adb push settime /data/local
adb shell chmod 755 /data/local/settime
adb shell /data/local/settime $(date +"%s")
## set system time to the hardware clock (real time clock - rtc)
wget -nc http://torsten-traenkner.de/cyanogenmod/hwclock.gz
gunzip -f hwclock.gz
adb push hwclock /data/local
adb shell chmod 755 /data/local/hwclock
adb shell "/data/local/hwclock -u --systohc --fast >/dev/null"
## set the hostname for the device
adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "insert into secure(name, value) values('device_hostname','computer');"
# set dark theme / dark background for filemanager
cat > com.cyanogenmod.filemanager.xml <
EOF
adb shell mkdir -p /data/data/com.cyanogenmod.filemanager/shared_prefs/
adb push com.cyanogenmod.filemanager.xml /data/data/com.cyanogenmod.filemanager/shared_prefs/
rm -f com.cyanogenmod.filemanager.xml
# disable tour
adb shell "sed -i 's||\n|g' /data/data/com.cyanogenmod.trebuchet/shared_prefs/com.cyanogenmod.trebuchet.prefs.xml"
## enable root access for the filemanager
wget -nc http://torsten-traenkner.de/cyanogenmod/su.sqlite.gz
wget -nc http://torsten-traenkner.de/cyanogenmod/superuser.sqlite.gz
gunzip -f superuser.sqlite.gz
gunzip -f su.sqlite.gz
adb shell mkdir /data/data/com.android.settings/databases/
adb push su.sqlite /data/data/com.android.settings/databases/
adb push superuser.sqlite /data/data/com.android.settings/databases/
# put flash light, file manager and terminal on the desktop (trebuchet)
# // 14 database values
# flash light
adb shell sqlite3 /data/data/com.cyanogenmod.trebuchet/databases/launcher.db "insert into favorites(title, intent, container, screen, cellX, cellY, spanX, spanY, itemType, appWidgetId, isShortcut, iconType, iconPackage, iconResource) values(NULL,'#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=net.cactii.flash2/.MainActivity;end',-100,2,1,3,1,1,0,-1,NULL,0,NULL,NULL);"
# file manager
adb shell sqlite3 /data/data/com.cyanogenmod.trebuchet/databases/launcher.db "insert into favorites(title, intent, container, screen, cellX, cellY, spanX, spanY, itemType, appWidgetId, isShortcut, iconType, iconPackage, iconResource) values(NULL,'#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.cyanogenmod.filemanager/.activities.NavigationActivity;end',-100,2,2,3,1,1,0,-1,NULL,0,NULL,NULL);"
# terminal
adb shell sqlite3 /data/data/com.cyanogenmod.trebuchet/databases/launcher.db "insert into favorites(title, intent, container, screen, cellX, cellY, spanX, spanY, itemType, appWidgetId, isShortcut, iconType, iconPackage, iconResource) values(NULL,'#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=jackpal.androidterm/.Term;end',-100,2,3,3,1,1,0,-1,NULL,0,NULL,NULL);"
echo "Settings finished."
echo "Rebooting smartphone for the settings to take effect."
# reboot the device to reload the new settings
adb reboot
exit