package cri.sanity;
import java.util.Map;
import android.media.AudioManager;
import cri.sanity.util.*;
// tool class: all preference keys; the default values; the upgrade phase.
public final class K
{
// general
public static final String ENABLED = "enabled";
public static final String QUICK_START = "quick_start";
public static final String SMS_ALERT = "sms_alert";
public static final String SILENT_LIMIT = "silent_limit";
public static final String AIRPLANE_LIMIT = "airplane_limit";
public static final String FORCE_BT_AUDIO = "force_bt_audio";
public static final String REVERSE_PROXIMITY = "reverse_proximity";
public static final String PWD = "pwd";
public static final String PWD_CLEAR = "pwd_clear";
// devices
public static final String AUTO_MOBDATA = "mobdata";
public static final String AUTO_WIFI = "wifi";
public static final String AUTO_GPS = "gps";
public static final String AUTO_BT = "bt";
public static final String SKIP_BT = "bt_skip";
public static final String SKIP_MOBDATA = "mobdata_skip";
public static final String SKIP_HOTSPOT = "hotspot_skip";
public static final String SKIP_TETHER = "tether_skip";
public static final String REVERSE_BT = "bt_reverse";
public static final String REVERSE_BT_TIMEOUT = "bt_reverse_timeout";
public static final String BT_OFF = "bt_off";
// proximity
public static final String DISABLE_PROXIMITY = "disable_proximity";
public static final String DISABLE_DELAY = "disable_delay";
public static final String ENABLE_PROXIMITY = "enable_proximity";
public static final String ENABLE_DELAY = "enable_delay";
public static final String SCREEN_OFF = "screen_off";
public static final String SCREEN_ON = "screen_on";
// speaker
public static final String SPEAKER_AUTO = "auto_speaker";
public static final String SPEAKER_DELAY = "delay_speaker";
public static final String SPEAKER_CALL = "speaker_call";
public static final String SPEAKER_CALL_DELAY = "delay_speaker_call";
public static final String SPEAKER_VOL = "vol_speaker";
public static final String SPEAKER_SILENT_END = "silent_end_speaker";
public static final String SPEAKER_ON_COUNT = "speaker_on_count";
public static final String SPEAKER_OFF_COUNT = "speaker_off_count";
// volume
public static final String VOL_PHONE = "vol_phone";
public static final String VOL_WIRED = "vol_wired";
public static final String VOL_BT = "vol_bt";
public static final String VOL_SOLO = "vol_solo";
// notification
public static final String NOTIFY_TIMEOUT = "notify_timeout";
public static final String NOTIFY_ENABLE = "notify_enable";
public static final String NOTIFY_DISABLE = "notify_disable";
public static final String NOTIFY_ACTIVITY = "notify_activity";
public static final String NOTIFY_VOLUME = "notify_volume";
public static final String NOTIFY_HEADSET = "notify_headset";
public static final String NOTIFY_REC_STOP = "notify_rec_stop";
// vibrate
public static final String VIBRATE_PICKUP = "vibrate_pickup";
public static final String VIBRATE_END = "vibrate_end";
public static final String VIBRATE_MODE = "vibrate_mode";
// call recorder
public static final String REC = "rec";
public static final String REC_FMT = "rec_fmt";
public static final String REC_SRC = "rec_src";
public static final String REC_START = "rec_start";
public static final String REC_STOP = "rec_stop";
public static final String REC_START_DELAY = "rec_start_delay";
public static final String REC_STOP_DELAY = "rec_stop_delay";
public static final String REC_START_SPEAKER = "rec_start_speaker";
public static final String REC_STOP_SPEAKER = "rec_stop_speaker";
public static final String REC_START_HEADSET = "rec_start_headset";
public static final String REC_STOP_HEADSET = "rec_stop_headset";
public static final String REC_START_TIMES = "rec_start_times";
public static final String REC_STOP_LIMIT = "rec_stop_limit";
public static final String REC_START_DIR = "rec_start_dir";
public static final String REC_AUTOREMOVE = "rec_autoremove";
public static final String REC_FILTER = "filter_enable_rec";
// call blocker
public static final String BLOCK_FILTER = "filter_enable_block";
public static final String BLOCK_MODE = "block_mode";
public static final String BLOCK_RESUME = "block_resume";
public static final String BLOCK_PICKUP = "block_pickup";
public static final String BLOCK_SKIP = "block_skip";
public static final String BLOCK_NOTIFY = "block_notify";
public static final String BLOCK_SMS = "blocksms";
public static final String BLOCK_SMS_MAX = "blocksms_max";
public static final String BLOCK_SMS_NOTIFY = "blocksms_notify";
public static final String BLOCK_SMS_FILTER = "filter_enable_blocksms";
// announce caller (text to speech)
public static final String TTS = "tts";
public static final String TTS_HEADSET = "tts_headset";
public static final String TTS_SKIP = "tts_skip";
public static final String TTS_SOLO = "tts_solo";
public static final String TTS_VOL = "tts_vol";
public static final String TTS_TONE = "tts_tone";
public static final String TTS_REPEAT = "tts_repeat";
public static final String TTS_PAUSE = "tts_pause";
public static final String TTS_ANONYM = "tts_anonym";
public static final String TTS_UNKNOWN = "tts_unknown";
public static final String TTS_PREFIX = "tts_prefix";
public static final String TTS_SUFFIX = "tts_suffix";
public static final String TTS_STREAM = "tts_stream";
public static final String TTS_FILTER = "filter_enable_tts";
public static final String TTS_SMS = "ttsms";
public static final String TTS_SMS_VOL = "ttsms_vol";
public static final String TTS_SMS_PREFIX = "ttsms_prefix";
public static final String TTS_SMS_SUFFIX = "ttsms_suffix";
public static final String TTS_SMS_FILTER = "filter_enable_ttsms";
// urgent calls
public static final String URGENT_FILTER = "filter_enable_urgent";
public static final String URGENT_SKIP = "urgent_skip";
public static final String URGENT_MODE = "urgent_mode";
// auto answer
public static final String ANSWER = "answer";
public static final String ANSWER_HEADSET = "answer_headset";
public static final String ANSWER_SKIP = "answer_skip";
public static final String ANSWER_DELAY = "answer_delay";
public static final String ANSWER_ALT = "answer_alt";
public static final String ANSWER_FILTER = "filter_enable_answer";
// anonymous calls
public static final String ANONYM = "anonym";
public static final String ANONYM_CONFIRM = "anonym_confirm";
public static final String ANONYM_NOTIFY = "anonym_notify";
public static final String ANONYM_PREFIX = "anonym_prefix";
public static final String ANONYM_FILTER = "filter_enable_anonym";
// internals (hidden to user)
public static final String FULL = "full";
public static final String BETA = "beta";
public static final String AGREE = "agree";
public static final String VER = "ver";
public static final String LICVER = "licver";
public static final String NAG = "nag";
public static final String BT_COUNT = "bt_count";
public static final String PRF_NAME = "prf_name";
public static final String CRON = "cron";
public static final String SMS_COUNT = "sms_count";
public static final String WS = "_s"; // wrap suffix for string values of integer keys
//--- methods: only class P should call these methods!
// all preferences default values
static final Object[] getDefaults() {
return new Object[] {
ENABLED , true, // main
QUICK_START , false,
SMS_ALERT , false,
SILENT_LIMIT , false,
AIRPLANE_LIMIT , false,
FORCE_BT_AUDIO , false,
REVERSE_PROXIMITY , false,
PWD , "",
PWD_CLEAR , false,
AUTO_MOBDATA , false, // devices
AUTO_WIFI , false,
AUTO_BT , false,
AUTO_GPS , false,
SKIP_BT , true,
SKIP_MOBDATA , false,
SKIP_HOTSPOT , true,
SKIP_TETHER , true,
REVERSE_BT , false,
REVERSE_BT_TIMEOUT , 30*1000,
BT_OFF , false,
DISABLE_PROXIMITY , false, // proximity
DISABLE_DELAY , 2000,
ENABLE_DELAY , 4000,
ENABLE_PROXIMITY , false,
SCREEN_OFF , true,
SCREEN_ON , true,
SPEAKER_AUTO , false, // speaker
SPEAKER_DELAY , 1000,
SPEAKER_CALL , 0,
SPEAKER_CALL_DELAY , 0,
SPEAKER_VOL , -1,
SPEAKER_SILENT_END , true,
SPEAKER_ON_COUNT , 0,
SPEAKER_OFF_COUNT , 0,
VOL_PHONE , -1, // volume
VOL_WIRED , -1,
VOL_BT , -1,
VOL_SOLO , false,
VIBRATE_PICKUP , false, // vibrate
VIBRATE_END , false,
VIBRATE_MODE , 21,
NOTIFY_TIMEOUT , true, // notify
NOTIFY_ENABLE , true,
NOTIFY_DISABLE , true,
NOTIFY_ACTIVITY , true,
NOTIFY_VOLUME , false,
NOTIFY_HEADSET , false,
NOTIFY_REC_STOP , true,
REC , false, // call recorder
REC_SRC , Rec.DEF_SRC,
REC_FMT , Rec.DEF_FMT,
REC_START , false,
REC_STOP , false,
REC_START_DELAY , 3000,
REC_STOP_DELAY , 3000,
REC_START_SPEAKER , true,
REC_STOP_SPEAKER , true,
REC_START_HEADSET , 0,
REC_STOP_HEADSET , 0,
REC_STOP_LIMIT , 0,
REC_START_TIMES , 0,
REC_START_DIR , 0,
REC_AUTOREMOVE , 0,
REC_FILTER , false,
BLOCK_FILTER , false, // call blocker
BLOCK_MODE , Blocker.MODE_RADIO,
BLOCK_RESUME , 0,
BLOCK_PICKUP , false,
BLOCK_SKIP , false,
BLOCK_NOTIFY , false,
BLOCK_SMS , false,
BLOCK_SMS_MAX , 10,
BLOCK_SMS_NOTIFY , false,
BLOCK_SMS_FILTER , false,
TTS , false, // announce caller and SMS
TTS_HEADSET , false,
TTS_SKIP , true,
TTS_SOLO , false,
TTS_VOL , -1,
TTS_TONE , 0,
TTS_REPEAT , 1000,
TTS_PAUSE , 1000,
TTS_ANONYM , A.s(R.string.anonymous),
TTS_UNKNOWN , A.s(R.string.unknown),
TTS_PREFIX , "",
TTS_SUFFIX , "",
TTS_FILTER , false,
TTS_STREAM , false,
TTS_SMS , false,
TTS_SMS_VOL , -1,
TTS_SMS_PREFIX , "",
TTS_SMS_SUFFIX , "",
TTS_SMS_FILTER , false,
URGENT_FILTER , false, // urgent calls
URGENT_SKIP , true,
URGENT_MODE , AudioManager.RINGER_MODE_NORMAL,
ANSWER , false, // auto answer
ANSWER_HEADSET , false,
ANSWER_SKIP , false,
ANSWER_DELAY , 7000,
ANSWER_ALT , false,
ANSWER_FILTER , false,
ANONYM , false, // anonymous calls
ANONYM_CONFIRM , false,
ANONYM_NOTIFY , false,
ANONYM_PREFIX , "#31#",
ANONYM_FILTER , false,
};
}
// upgrade current preferences from an older existing version
static final void upgrade(int oldVer) {
if(oldVer < 19500) {
for(String k : new String[]{ VOL_PHONE, VOL_WIRED, VOL_BT }) {
try {
switch(A.getsi(k)) {
case 0: P.setDef(k); break;
case 1: A.put(k, 0); break;
}
} catch(Exception e) { try {
A.put(k, A.has(k)? A.geti(k) : -1);
} catch(Exception e2) {
A.put(k, -1);
}}
}
}
if(oldVer < 19600)
A.put(SPEAKER_CALL, A.is(SPEAKER_CALL)? 3 : 0).del(SPEAKER_CALL);
if(oldVer < 20300) {
A.put(BLOCK_FILTER, A.is("block")).del("block");
A.put(SPEAKER_VOL, A.is("loud_speaker")? A.audioMan().getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL) : -1).del("loud_speaker");
}
if(oldVer>=20600 && oldVer<=20801) {
final StringBuilder days = new StringBuilder(7);
for(String sect : P.filterSections()) {
sect = '_' + sect;
days.setLength(0);
for(int i=1; i<=7; i++) {
final String d = Integer.toString(i);
final String k = "filter_dt_day" + d + sect;
if(A.is(k)) days.append(d);
A.del(k);
}
final int n = days.length();
if(n>0 && n<7) A.put("filter_dt_days"+sect, days.toString());
}
}
if(oldVer < 20901) {
A.del(K.VER).del("beta");
for(String key : A.prefs().getAll().keySet())
if(key.endsWith(K.WS) || (key.startsWith("filter_") && key.endsWith("null"))) A.del(key);
}
if(oldVer < 21002) {
A.del("rec_callscreen");
final Map<String,?> defs = P.getDefaults();
for(String k : P.intLabels()) {
if(!A.has(k)) continue;
try { A.geti(k); } catch(Exception e) {
try { A.put(k, A.getsi(k)); } catch(Exception e2) { A.put(k, ((Integer)defs.get(k)).intValue()); } finally { A.del(k); }}
}
}
}
}