/** @file TDSetting.java * * @author marco corvi * @date jan 2014 * * @brief TopoDroid application settings (preferenceces) * -------------------------------------------------------- * Copyright This sowftare is distributed under GPL-3.0 or later * See the file COPYING. * -------------------------------------------------------- */ package com.topodroid.DistoX; import android.os.Build; import android.content.Context; import android.provider.Settings.Secure; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.util.Log; class TDSetting { // --------------------------------------------------------- // PREFERENCES KEYS final static int NR_PRIMARY_PREFS = 12; static final String[] key = { // prefs keys // ------------------------- PRIMARY PREFS "DISTOX_EXTRA_BUTTONS", // 0 TODO move to general options "DISTOX_SIZE_BUTTONS", // "DISTOX_BUTTON_SIZE", // 1 "DISTOX_TEXT_SIZE", // 2 "DISTOX_MKEYBOARD", // 3 "DISTOX_TEAM", // 4 "DISTOX_COSURVEY", // 5 "DISTOX_INIT_STATION", // 6 default initial station for sketches "DISTOX_AZIMUTH_MANUAL", // 7 "DISTOX_DEVICE", // 8 N.B. indexKeyDeviceName - USED by TopoDroidApp to store the device "DISTOX_BLUETOOTH", // 9 "DISTOX_LOCALE", // 10 "DISTOX_CWD", // 11 CWD must be the last of primary preferences // ----------------------- DEVICE PREFERNCES "DISTOX_SOCK_TYPE", // 11 "DISTOX_COMM_RETRY", // 12 "DISTOX_WAIT_LASER", "DISTOX_WAIT_SHOT", "DISTOX_WAIT_DATA", "DISTOX_WAIT_CONN", "DISTOX_Z6_WORKAROUND", // 13 "DISTOX_CONN_MODE", // 14 "DISTOX_AUTO_PAIR", // 15 "DISTOX_SOCKET_DELAY", // 16 "DISTOX_AUTO_RECONNECT", // 17 // ------------------- SURVEY PREFERENCES "DISTOX_CLOSE_DISTANCE", // 18 "DISTOX_EXTEND_THR2", // 19 "DISTOX_VTHRESHOLD", // 20 LRUD vertical threshold "DISTOX_SURVEY_STATION", // 21 DISTOX_SURVEY_STATIONS must not be used "DISTOX_UNIT_LENGTH", // 22 "DISTOX_UNIT_ANGLE", // 23 "DISTOX_ACCEL_PERCENT", // 24 shot quality thresholds "DISTOX_MAG_PERCENT", "DISTOX_DIP_THR", // 26 "DISTOX_LOOP_CLOSURE_VALUE", // 27 whether to close loop "DISTOX_CHECK_ATTACHED", // 28 "DISTOX_PREV_NEXT", "DISTOX_UNIT_LOCATION", // 29 "DISTOX_CRS", // 30 // -------------------- CALIB PREFERENCES "DISTOX_GROUP_BY", // 31 "DISTOX_GROUP_DISTANCE", // 32 "DISTOX_CALIB_EPS", // 33 "DISTOX_CALIB_MAX_IT", // 34 "DISTOX_RAW_CDATA", // 35 "DISTOX_CALIB_ALGO", // 36 // -------------------- SKETCH PREFERENCES "DISTOX_AUTO_STATIONS", // 37 "DISTOX_CLOSENESS", // 38 "DISTOX_ERASENESS", // 38 "DISTOX_MIN_SHIFT", "DISTOX_POINTING", "DISTOX_LINE_SEGMENT", "DISTOX_LINE_ACCURACY", "DISTOX_LINE_CORNER", // 41 "DISTOX_LINE_STYLE", // 42 "DISTOX_DRAWING_UNIT", // 43 "DISTOX_PICKER_TYPE", // 44 "DISTOX_HTHRESHOLD", // UNUSED "DISTOX_STATION_SIZE", // 46 "DISTOX_LABEL_SIZE", // 47 "DISTOX_LINE_THICKNESS", // 48 "DISTOX_AUTO_SECTION_PT", // 49 "DISTOX_BACKUP_NUMBER", "DISTOX_BACKUP_INTERVAL", // -------------------- LASER PREFERENCES "DISTOX_SHOT_TIMER", // 50 // bearing-clino timer "DISTOX_BEEP_VOLUME", // 51 "DISTOX_LEG_SHOTS", // 52 nr. of shots to make a leg // -------------------- 3D-MODEL PREFERENCES "DISTOX_SKETCH_LINE_STEP", // 53 "DISTOX_DELTA_EXTRUDE", // 54 "DISTOX_COMPASS_READINGS", // 55 // -------------------- IMPORT-EXPORT PREFERENCES "DISTOX_SPLAY_EXTEND", // 56 whether to set extend to splay shots "DISTOX_BITMAP_SCALE", // 57 "DISTOX_THUMBNAIL", // 58 "DISTOX_DOT_RADIUS", // 59 "DISTOX_FIXED_THICKNESS", // 60 "DISTOX_ARROW_LENGTH", // 61 "DISTOX_EXPORT_SHOTS", // 62 "DISTOX_EXPORT_PLOT", // 63 "DISTOX_THERION_MAPS", "DISTOX_SVG_GRID", // export grid in SVG "DISTOX_SPLAY_VERT_THRS", // 64 over mSplayVertThrs splays are not displayed in plan view "DISTOX_BACKSIGHT", // 65 "DISTOX_MAG_ANOMALY", // 66 whether to compensate magnetic anomaly "DISTOX_VERT_SPLAY", // 68 over this splay are shown with dashed line "DISTOX_STATION_PREFIX", // 69 whether to add cave-name prefix to stations (cSurvey/compass) "DISTOX_STATION_NAMES", "DISTOX_ZOOM_CTRL", // 71 "DISTOX_SIDE_DRAG", // 72 whether to enable side-drag "DISTOX_DXF_SCALE", // "DISTOX_ACAD_VERSION", "DISTOX_BITMAP_BGCOLOR", // 75 "DISTOX_SURVEX_EOL", // 76 survex end of line "DISTOX_SURVEX_SPLAY", "DISTOX_SURVEX_LRUD", // 78 "DISTOX_SWAP_LR", // swap Left-Right in compass export "DISTOX_UNSCALED_POINTS", // 79 unscaled drawing point items "DISTOX_UNIT_GRID", // 80 // "DISTOX_XTHERION_AREAS", // 81 save areas a-la xtherion "DISTOX_THERION_SPLAYS", "DISTOX_RECENT_NR", // 82 number of most recent items (item picker) "DISTOX_AREA_BORDER", // 83 area border visibility "DISTOX_ORTHO_LRUD", // 86 orthogonal LRUD ( >=1 disable, min 0 ) // "DISTOX_SECTION_STATIONS", // "DISTOX_WALLS_TYPE", // 87 "DISTOX_WALLS_PLAN_THR", // 88 "DISTOX_WALLS_EXTENDED_THR", // 89 "DISTOX_WALLS_XCLOSE", // 90 "DISTOX_WALLS_XSTEP", // 91 "DISTOX_WALLS_CONCAVE", // 92 "DISTOX_DXF_BLOCKS", // DISTOX_DXF_BLOCKS // "DISTOX_SKETCH_USES_SPLAYS", // // "DISTOX_SKETCH_BERDER_STEP", // "DISTOX_SKETCH_SECTION_STEP", // "DISTOX_ALGO_MIN_ALPHA", "DISTOX_ALGO_MIN_BETA", "DISTOX_ALGO_MIN_GAMMA", "DISTOX_ALGO_MIN_DELTA", }; static boolean mDxfBlocks = true; // DXF_BLOCKS static float mAlgoMinAlpha = 0.1f; static float mAlgoMinBeta = 4.0f; static float mAlgoMinGamma = 1.0f; static float mAlgoMinDelta = 1.0f; static String keyDeviceName() { return "DISTOX_DEVICE"; } // static final String EXPORT_TYPE = "th"; // DISTOX_EXPORT_TH // prefs default values static String mDefaultTeam = ""; static final int LEVEL_BASIC = 0; static final int LEVEL_NORMAL = 1; static final int LEVEL_ADVANCED = 2; static final int LEVEL_EXPERIMENTAL = 3; static final int LEVEL_COMPLETE = 4; static int mActivityLevel = 1; static boolean mLevelOverBasic = true; static boolean mLevelOverNormal = false; static boolean mLevelOverAdvanced = false; static boolean mLevelOverExperimental = false; static int mSizeButtons = 42; // action bar buttons scale (either 1 or 2) static int mTextSize = 16; // list text size static boolean mKeyboard = true; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // IMPORT EXPORT static boolean mLRExtend = true; // whether to extend LR or not (Compass/VisualTopo input) static String mSurvexEol = "\n"; static boolean mSurvexSplay = false; static boolean mSurvexLRUD = false; static boolean mSwapLR = false; // swap LR in Compass export static boolean mOrthogonalLRUD = false; // whether angle > 0 static float mOrthogonalLRUDAngle = 0; // angle static float mOrthogonalLRUDCosine = 1; // cosine of the angle static boolean mExportStationsPrefix = false; // whether to prepend cave name to station in cSurvey/compass export // static boolean mXTherionAreas = false; static boolean mAutoStations = true; // whether to add stations automatically to scrap therion files static boolean mTherionSplays = true; // whether to add splay segments to auto stations static float mBitmapScale = 1.5f; static float mDxfScale = 1.0f; static int mBitmapBgcolor = 0x000000; static int mAcadVersion = 13; // AutoCAD version 9, or 13 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // LOCATION static String mCRS = "Long-Lat"; // default coord ref systen // static final String UNIT_LOCATION = "ddmmss"; static int mUnitLocation = 0; // 0 dec-degree, 1 ddmmss // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // CALIBRATION // static final String GROUP_DISTANCE = "40"; static float mGroupDistance = 40; static final float DISTOX_MAX_EPS = 0.01f; // hard limit static final String CALIB_EPS = "0.000001"; static float mCalibEps = 0.000001f; // calibartion epsilon static int mCalibMaxIt = 200; // calibration max nr of iterations // calibration data grouping policies static final int GROUP_BY_DISTANCE = 0; static final int GROUP_BY_FOUR = 1; static final int GROUP_BY_ONLY_16 = 2; // static final String GROUP_BY = "1"; // GROUP_BY_FOUR static int mGroupBy = GROUP_BY_FOUR; // how to group calib data // static boolean mRawData = false; // whether to display calibration raw data as well static int mRawCData = 0; static int mCalibAlgo = 0; // calibration algorithm: 0 auto, 1 linear, 2 non-linear // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // DEVICE final static int CONN_MODE_BATCH = 0; // DistoX connection mode final static int CONN_MODE_CONTINUOUS = 1; final static int CONN_MODE_MULTI = 2; static int mConnectionMode = CONN_MODE_BATCH; static boolean isConnectionModeBatch() { return mConnectionMode != CONN_MODE_CONTINUOUS; } static boolean mZ6Workaround = true; static boolean mAutoReconnect = false; static boolean mAutoPair = true; static int mConnectSocketDelay = 0; // wait time if not paired [0.1 sec] // static final boolean CHECK_BT = true; static int mCheckBT = 1; // BT: 0 disabled, 1 check on start, 2 enabled static final int TD_SOCK_DEFAULT = 0; // BT socket type static final int TD_SOCK_INSEC = 1; static final int TD_SOCK_PORT = 2; static final int TD_SOCK_INSEC_PORT = 3; // static final int TD_SOCK_INSEC_INVOKE = 4; // static int mDefaultSockType = (android.os.Build.MANUFACTURER.equals("samsung") ) ? TD_SOCK_INSEC : TD_SOCK_DEFAULT; static String mDefaultSockStrType = (android.os.Build.MANUFACTURER.equals("samsung") ) ? "1" : "0"; static int mSockType = TD_SOCK_DEFAULT; static int mCommRetry = 1; static int mCommType = 0; // 0: on-demand, 1: continuous static int mWaitLaser = 1000; static int mWaitShot = 4000; static int mWaitData = 250; // delay between data static int mWaitConn = 500; // delay waiting a connection static int mWaitCommand = 100; static boolean mCheckAttached = false; // whether to check is there are shots non-attached static boolean mPrevNext = true; // whether to display prev-next buttons in shot dialog // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // SHOTS static float mVThreshold = 80f; // verticality threshold (LRUD) static float mHThreshold; // horizontal plot threshold static int mExportShotsFormat = -1; // DISTOX_EXPORT_NONE static int mExportPlotFormat = -1; // DISTOX_EXPORT_NONE static boolean mTherionMaps = false; static boolean mSvgGrid = false; static int mSurveyStations = 1; // automatic survey stations: 0 no, 1 forward-after-splay, 2 backward-after-splay static boolean mShotAfterSplays = true; // 3 forward-before-splay, 4 backward-before-splay static boolean isSurveyForward() { return (mSurveyStations%2) == 1; } static boolean isSurveyBackward() { return mSurveyStations>0 && (mSurveyStations%2) == 0; } // static int mScreenTimeout = 60000; // 60 secs static int mTimerCount = 10; // Acc/Mag timer countdown (secs) static int mBeepVolume = 50; // beep volume static int mCompassReadings = 4; // number of compass readings to average // static final String CLOSE_DISTANCE = "0.05"; // 50 cm / 1000 cm static float mCloseDistance = 0.05f; static int mMinNrLegShots = 3; static String mInitStation = "0"; static boolean mBacksight = false; // whether to check backsight static boolean mBacksightShot = false; // backsight shooting policy static boolean mTripodShot = false; // tripod shooting policy static boolean mMagAnomaly = false; // local magnetic anomaly survey static float mSplayVertThrs = 80; static boolean mAzimuthManual = false; // whether to manually set extend / or use reference azimuth static float mVertSplay = 50; static int mStationNames = 0; // type of station names (0: alpha, 1: number) static int mLoopClosure = 0; // loop closure: 0 none, 1 normal, 3 triangles static final String UNIT_LENGTH = "meters"; static final String UNIT_ANGLE = "degrees"; // static final String UNIT_ANGLE_GRADS = "grads"; // static final String UNIT_ANGLE_SLOPE = "slope"; // conversion factor from internal units (m) to user units static float mUnitLength = 1; static float mUnitAngle = 1; static String mUnitLengthStr = "m"; // N.B. Therion syntax: "m", "ft" static String mUnitAngleStr = "deg"; // N.B. Therion syntax: "deg", "grad" // static final String EXTEND_THR = "10"; static float mExtendThr = 10; // extend vertically splays in [90-30, 90+30] of the leg static int mThumbSize = 200; // thumbnail size // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // SKETCH DRAWING // static boolean mZoomControls = false; static int mZoomCtrl = 1; static boolean mSideDrag = false; static float mUnit = 1.4f; // drawing unit // selection_radius = cutoff + closeness / zoom static final float mCloseCutoff = 0.01f; // minimum selection radius static float mCloseness = 24f; // selection radius static float mEraseness = 36f; // eraser radius static int mMinShift = 60; static int mPointingRadius = 16; // static final String LINE_SHIFT = "20.0"; static float mUnitGrid = 1; // 1: meter, 0.9... yard static final int PICKER_RECENT = 0; // Drawing-tools picker type static final int PICKER_LIST = 1; static final int PICKER_GRID = 2; static final int PICKER_GRID_3 = 3; static int mPickerType = PICKER_RECENT; static int mRecentNr = 4; // nr. most recent symbols static final int LINE_STYLE_BEZIER = 0; // drawing line styles static final int LINE_STYLE_ONE = 1; static final int LINE_STYLE_TWO = 2; static final int LINE_STYLE_THREE = 3; static final String LINE_STYLE = "2"; // LINE_STYLE_TWO NORMAL static int mLineStyle = LINE_STYLE_BEZIER; static int mLineType; // line type: 1 1 2 3 static int mLineSegment = 10; static int mLineSegment2 = 100; // square of mLineSegment static float mLineAccuracy = 1f; static float mLineCorner = 20; // corner threshold static float mStationSize = 20; // size of station names [pt] static float mLabelSize = 24; // size of labels [pt] static float mFixedThickness = 1; // width of fixed lines static float mLineThickness = 1; // witdh of drawing lines static boolean mAutoSectionPt = false; static int mBackupNumber = 5; static int mBackupInterval = 60; static float mDotRadius = 5; static float mArrowLength = 8; // NOTE not used, but could set a default for section splays // static int mSectionStations = 3; // 1: From, 2: To, 3: both static boolean mUnscaledPoints = false; static boolean mAreaBorder = true; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // 3D static float mSketchSideSize; static float mDeltaExtrude; // static boolean mSketchUsesSplays; // whether 3D models surfaces use splays // static float mSketchBorderStep; // static float mSketchSectionStep; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // DATA ACCURACY static float mAccelerationThr = 1; // acceleration threshold (shot quality) static float mMagneticThr = 1; // magnetic threshold static float mDipThr = 2; // dip threshold // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // WALLS static final int WALLS_NONE = 0; static final int WALLS_CONVEX = 1; static final int WALLS_LAST = 1; // placeholder static int mWallsType = WALLS_NONE; static float mWallsPlanThr = 70; static float mWallsExtendedThr = 45; static float mWallsXClose = 0.1f; static float mWallsXStep = 1.0f; static float mWallsConcave = 0.1f; // ------------------------------------------------------------------ // static void setZoomControls( boolean ctrl ) // { // mZoomControls = ctrl; // // FIXME forward setting to DrawingWindow // } static void setZoomControls( String ctrl, boolean is_multitouch ) { try { int i = Integer.parseInt( ctrl ); if ( i >= 0 && i <= 2 ) mZoomCtrl = i; if ( mZoomCtrl == 0 && ! is_multitouch ) mZoomCtrl = 1; } catch ( NumberFormatException e ) { } } static private void setMagAnomaly( boolean val ) { mMagAnomaly = val; if ( mMagAnomaly && mSurveyStations > 0 ) { mBacksightShot = true; mTripodShot = false; mSurveyStations = 1; mShotAfterSplays = true; } } // backgroind color RGB_565 private static void setBitmapBgcolor( String color ) { String[] vals = color.split("\\s+"); if ( vals.length == 3 ) { try { int r = Integer.parseInt( vals[0] ); int g = Integer.parseInt( vals[1] ); int b = Integer.parseInt( vals[2] ); if ( r > 255 ) r = 255; if ( r < 0 ) r = 0; if ( g > 255 ) g = 255; if ( g < 0 ) g = 0; if ( b > 255 ) b = 255; if ( b < 0 ) b = 0; mBitmapBgcolor = 0xff000000 | ( r << 16 ) | ( g << 8 ) | b; } catch ( NumberFormatException e ) { } } } // ------------------------------------------------------------------ static private float tryFloat( SharedPreferences prefs, String key, String def_value ) { float f = 0; try { f = Float.parseFloat( prefs.getString( key, def_value ) ); } catch ( NumberFormatException e ) { TDLog.Error("Integer Format Error. Key " + key + " " + e.getMessage() ); f = Float.parseFloat(def_value); setPreference( prefs, key, def_value ); } return f; } static private int tryInt( SharedPreferences prefs, String key, String def_value ) { int i = 0; try { i = Integer.parseInt( prefs.getString( key, def_value ) ); } catch( NumberFormatException e ) { TDLog.Error("Integer Format Error. Key " + key + " " + e.getMessage() ); i = Integer.parseInt(def_value); setPreference( prefs, key, def_value ); } return i; } // static private float tryFloat( SharedPreferences prefs, String key, String def_value, float cur_value ) // { // float f = cur_value; // try { // f = Float.parseFloat( prefs.getString( key, def_value ) ); // } catch ( NumberFormatException e ) { } // setPreference( prefs, key, f ); // return f; // } // static private float tryFloat( SharedPreferences prefs, String key, String def_value, float cur_value, float min_value ) // { // float f = cur_value; // try { // f = Float.parseFloat( prefs.getString( key, def_value ) ); // if ( f < min_value ) f = min_value; // } catch ( NumberFormatException e ) { } // setPreference( prefs, key, f ); // return f; // } // static private float tryFloat( SharedPreferences prefs, String key, String def_value, // float cur_value, float min_value, float max_value ) // { // TDLog.Error("try float. def " + def_value + " cur " + cur_value + " min " + min_value + " max " + max_value ); // float f = cur_value; // try { // f = Float.parseFloat( prefs.getString( key, def_value ) ); // if ( f < min_value ) f = min_value; // if ( f > max_value ) f = max_value; // } catch ( NumberFormatException e ) { } // setPreference( prefs, key, f ); // return f; // } // static private int tryInt( SharedPreferences prefs, String key, String def_value, int cur_value ) // { // int i = cur_value; // try { // i = Integer.parseInt( prefs.getString( key, def_value ) ); // } catch ( NumberFormatException e ) { } // setPreference( prefs, key, i ); // return i; // } // static private int tryInt( SharedPreferences prefs, String key, String def_value, int cur_value, int min_value ) // { // int i = cur_value; // try { // i = Integer.parseInt( prefs.getString( key, def_value ) ); // if ( i < min_value ) i = min_value; // } catch ( NumberFormatException e ) { } // setPreference( prefs, key, i ); // return i; // } // static private int tryInt( SharedPreferences prefs, String key, String def_value, // int cur_value, int min_value, int max_value ) // { // int i = cur_value; // try { // i = Integer.parseInt( prefs.getString( key, def_value ) ); // if ( i < min_value ) i = min_value; // if ( i > max_value ) i = max_value; // } catch ( NumberFormatException e ) { } // setPreference( prefs, key, i ); // return i; // } static private int getSizeButtons( int size ) { switch ( size ) { case 0: return 36; // small case 1: return 42; // normal case 3: return 48; // medium case 4: return 64; // large case 2: return 84; // huge } return mSizeButtons; } static void loadPrimaryPreferences( TopoDroidApp app, SharedPreferences prefs ) { // ------------------- GENERAL PREFERENCES int k = 0; mActivityLevel = Integer.parseInt( prefs.getString( key[k++], "1" ) ); // DISTOX_EXTRA_BUTTONS choice: 0, 1, 2, 3 setActivityBooleans( app ); mSizeButtons = getSizeButtons( tryInt( prefs, key[k++], "1" ) ); // choice: 1, 2, 3, 4 // DISTOX_BUTTON_SIZE mTextSize = tryInt( prefs, key[k++], "16" ); // DISTOX_TEXT_SIZE mKeyboard = prefs.getBoolean( key[k++], true ); // DISTOX_MKEYBOARD mDefaultTeam = prefs.getString( key[k++], "" ); // DISTOX_TEAM boolean co_survey = prefs.getBoolean( key[k++], false ); // DISTOX_COSURVEY mInitStation = prefs.getString( key[k++], "0" ).replaceAll("\\s+", ""); // DISTOX_INIT_STATION if ( mInitStation.length() == 0 ) mInitStation = "0"; DistoXStationName.setInitialStation( mInitStation ); mAzimuthManual = prefs.getBoolean( key[k++], false ); // DISTOX_AZIMUTH_MANUAL TDAzimuth.mFixedExtend = ( TDSetting.mAzimuthManual )? 1L : 0L; // TDAzimuth.resetRefAzimuth( TDAzimuth.mRefAzimuth ); // BUG may call setRefAzimuthButton on non-UI thread // ------------------- DEVICE PREFERENCES -def--fallback--min-max k++; // DISTOX_DEVICE - UNUSED HERE mCheckBT = tryInt( prefs, key[k++], "1" ); // DISTOX_BLUETOOTH choice: 0, 1, 2 // TDLog.Profile("locale"); app.setLocale( prefs.getString( key[k++], "" ), false ); // DISTOX_LOCALE // String cwd = prefs.getString( key[k++], "TopoDroid" ); // if ( ! cwd.equals( mCWD ) ) { // mCWD = cwd; // TDPath.setPaths( mCWD ); // mData.openDatabase(); // } } static void loadSecondaryPreferences( TopoDroidApp app, SharedPreferences prefs ) { int k = NR_PRIMARY_PREFS;; // ------------------- DEVICE PREFERENCES mSockType = tryInt( prefs, key[k++], mDefaultSockStrType ); // DISTOX_SOCK_TYPE choice: 0, 1, (2, 3) mCommRetry = tryInt( prefs, key[k++], "1" ); // DISTOX_COMM_RETRY mWaitLaser = tryInt( prefs, key[k++], "1000" ); // DISTOX_WAIT_LASER mWaitShot = tryInt( prefs, key[k++], "4000" ); // DISTOX_WAIT_SHOT mWaitData = tryInt( prefs, key[k++], "250" ); // DISTOX_WAIT_DATA mWaitConn = tryInt( prefs, key[k++], "500" ); // DISTOX_WAIT_CONN mZ6Workaround = prefs.getBoolean( key[k++], true ); // DISTOX_Z6_WORKAROUND mConnectionMode = tryInt( prefs, key[k++], "0" ); // DISTOX_CONN_MODE choice: 0, 1, 2 mAutoPair = prefs.getBoolean( key[ k++ ], true ); // DISTOX_AUTO_PAIR mConnectSocketDelay = tryInt(prefs, key[ k++ ], "0" ); // DISTOX_SOCKET_DELAY mAutoReconnect = prefs.getBoolean( key[k++], false ); // DISTOX_AUTO_RECONNECT // ------------------- SURVEY PREFERENCES mCloseDistance = tryFloat( prefs, key[k++], "0.05" ); // DISTOX_CLOSE_DISTANCE mExtendThr = tryFloat( prefs, key[k++], "10" ); // DISTOX_EXTEND_THR2 mVThreshold = tryFloat( prefs, key[k++], "80" ); // DISTOX_VTHRESHOLD parseSurveyStations( prefs.getString( key[k++], "1" ) ); // DISTOX_SURVEY_STATIONS if ( prefs.getString( key[k++], UNIT_LENGTH ).equals(UNIT_LENGTH) ) { mUnitLength = 1.0f; mUnitLengthStr = "m"; } else { mUnitLength = TopoDroidUtil.M2FT; mUnitLengthStr = "ft"; } if ( prefs.getString( key[k++], UNIT_ANGLE ).equals(UNIT_ANGLE) ) { mUnitAngle = 1.0f; mUnitAngleStr = "deg"; } else { mUnitAngle = TopoDroidUtil.DEG2GRAD; mUnitAngleStr = "grad"; } mAccelerationThr = tryFloat( prefs, key[k++], "1" ); // DISTOX_ACCEL_PERCENT mMagneticThr = tryFloat( prefs, key[k++], "1" ); // DISTOX_MAG_PERCENT mDipThr = tryFloat( prefs, key[k++], "2" ); // DISTOX_DIP_THR // mLoopClosure = prefs.getBoolean( key[k++], false ); // DISTOX_LOOP_CLOSURE mLoopClosure = tryInt( prefs, key[k++], "0" ); mCheckAttached = prefs.getBoolean( key[k++], false ); // DISTOX_CHECK_ATTACHED 13 mPrevNext = prefs.getBoolean( key[k++], true ); // DISTOX_PREV_NEXT mUnitLocation = prefs.getString( key[k++], "ddmmss" ).equals("ddmmss") ? TDConst.DDMMSS // choice : TDConst.DEGREE; mCRS = prefs.getString( key[k++], "Long-Lat" ); // DISTOX_CRS // ------------------- CALIBRATION PREFERENCES mGroupBy = tryInt( prefs, key[k++], "1" ); // DISTOX_GROUP_BY choice: 0, 1, 2 mGroupDistance = tryFloat( prefs, key[k++], "40" ); // DISTOX_GROUP_DISTANCE mCalibEps = tryFloat( prefs, key[k++], CALIB_EPS ); mCalibMaxIt = tryInt( prefs, key[k++], "200" ); // DISTOX_CALIB_MAX_IT // mRawData = prefs.getBoolean( key[k++], false ); // DISTOX_RAW_DATA 20 mRawCData = tryInt( prefs, key[k++], "0" ); // DISTOX_RAW_CDATA 20 mCalibAlgo = tryInt( prefs, key[k++], "0" ); // choice: 0, 1, 2 // ------------------- DRAWING PREFERENCES -def----fallback------min/max mAutoStations = prefs.getBoolean( key[k++], true ); // DISTOX_AUTO_STATIONS mCloseness = tryFloat( prefs, key[k++], "24" ); // DISTOX_CLOSENESS mEraseness = tryFloat( prefs, key[k++], "36" ); // DISTOX_ERASENESS mMinShift = tryInt( prefs, key[k++], "60" ); // DISTOX_MIN_SHIFT mPointingRadius= tryInt( prefs, key[k++], "16" ); // DISTOX_POINTING mLineSegment = tryInt( prefs, key[k++], "10" ); // DISTOX_LINE_SEGMENT mLineSegment2 = mLineSegment * mLineSegment; mLineAccuracy = tryFloat( prefs, key[k++], "1" ); // DISTOX_LINE_ACCURACY mLineCorner = tryFloat( prefs, key[k++], "20" ); // DISTOX_LINE_CORNER setLineStyleAndType( prefs.getString( key[k++], LINE_STYLE ) ); // DISTOX_LINE_STYLE mUnit = tryFloat( prefs, key[k++], "1.4" ); // DISTOX_DRAWING_UNIT mPickerType = tryInt( prefs, key[k++], "0" ); // DISTOX_PICKER_TYPE choice: 0, 1, 2 mHThreshold = tryFloat( prefs, key[k++], "70" ); // DISTOX_HTHRESHOLD mStationSize = tryFloat( prefs, key[k++], "20" ); // DISTOX_STATION_SIZE mLabelSize = tryFloat( prefs, key[k++], "24" ); // DISTOX_LABEL_SIZE mLineThickness = tryFloat( prefs, key[k++], "1" ); // DISTOX_LINE_THICKNESS mAutoSectionPt = prefs.getBoolean( key[k++], false ); // DISTOX_AUTO_SECTION_PT mBackupNumber = tryInt( prefs, key[k++], "5" ); // DISTOX_BACKUP_NUMBER mBackupInterval = tryInt( prefs, key[k++], "60" ); // DISTOX_BACKUP_INTERVAL mTimerCount = tryInt( prefs, key[k++], "10" ); // DISTOX_SHOT_TIMER mBeepVolume = tryInt( prefs, key[k++], "50" ); // DISTOX_BEEP_VOLUME mMinNrLegShots = tryInt( prefs, key[k++], "3" ); // DISTOX_LEG_SHOTS choice: 2, 3, 4 // ------------------- SKETCH PREFERENCES mSketchSideSize = tryFloat( prefs, key[k++], "0.5" ); // DISTOX_SKETCH_LINE_STEP mDeltaExtrude = tryFloat( prefs, key[k++], "50" ); // DISTOX_DELTA_EXTRUDE // mSketchUsesSplays = prefs.getBoolean( key[k++], false ); // mSketchBorderStep = Float.parseFloat( prefs.getString( key[k++], "0.2") ); // mSketchSectionStep = Float.parseFloat( prefs.getString( key[k++], "0.5") ); mCompassReadings = tryInt( prefs, key[k++], "4" ); // DISTOX_COMPASS_READING mLRExtend = prefs.getBoolean( key[k++], true ); // DISTOX_SPLAY_EXTEND mBitmapScale = tryFloat( prefs, key[k++], "1.5" ); // DISTOX_BITMAP_SCALE mThumbSize = tryInt( prefs, key[k++], "200" ); // DISTOX_THUMBNAIL mDotRadius = tryFloat( prefs, key[k++], "5" ); // DISTOX_DOT_RADIUS mFixedThickness = tryFloat( prefs, key[k++], "1" ); // DISTOX_FIXED_THICKNESS mArrowLength = tryFloat( prefs, key[k++], "8" ); // DISTOX_ARROW_LENGTH mExportShotsFormat = tryInt( prefs, key[k++], "-1" ); // DISTOX_EXPORT_SHOTS choice: mExportPlotFormat = tryInt( prefs, key[k++], "-1" ); // DISTOX_EXPORT_PLOT choice: 14, 2, 11, 12, 13 mTherionMaps = prefs.getBoolean( key[k++], false ); // DISTOX_THERION_MAPS mSvgGrid = prefs.getBoolean( key[k++], false ); // DISTOX_SVG_GRID mSplayVertThrs = tryFloat( prefs, key[k++], "80" ); // DISTOX_SPLAY_VERT_THRS mBacksight = prefs.getBoolean( key[k++], false ); // DISTOX_BACKSIGHT setMagAnomaly( prefs.getBoolean( key[k++], false ) ); // DISTOX_MAG_ANOMALY mVertSplay = tryFloat( prefs, key[k++], "50" ); // DISTOX_VERT_SPLAY mExportStationsPrefix = prefs.getBoolean( key[k++], false ); // DISTOX_STATION_PREFIX mStationNames = (prefs.getString( key[k++], "alpha").equals("number"))? 1 : 0; // DISTOX_STATION_NAMES // setZoomControls( prefs.getBoolean( key[k++], false ) ); // DISTOX_ZOOM_CONTROLS setZoomControls( prefs.getString( key[k++], "1"), app.isMultitouch() ); // DISTOX_ZOOM_CTRL mSideDrag = prefs.getBoolean( key[k++], false ); // DISTOX_SIDE_DRAG mDxfScale = tryFloat( prefs, key[k++], "1.0" ); // DISTOX_DXF_SCALE // mAcadVersion = tryInt( prefs, key[k++], "13" ); // DISTOX_ACAD_VERSION choice: 9, 13 setBitmapBgcolor( prefs.getString( key[k++], "0 0 0" ) ); // DISTOX_BITMAP_BGCOLOR mSurvexEol = ( prefs.getString( key[k++], "LF" ).equals("LF") )? "\n" : "\r\n"; // DISTOX_SURVEX_EOL mSurvexSplay = prefs.getBoolean( key[k++], false ); // DISTOX_SURVEX_SPLAY mSurvexLRUD = prefs.getBoolean( key[k++], false ); // DISTOX_SURVEX_LRUD mSwapLR = prefs.getBoolean( key[k++], false ); // DISTOX_SWAP_LR mUnscaledPoints = prefs.getBoolean( key[k++], false ); // DISTOX_UNSCALED_POINTS mUnitGrid = tryFloat( prefs, key[k++], "1" ); // DISTOX_UNIT_GRID // mXTherionAreas = prefs.getBoolean( key[k++], false ); // DISTOX_XTHERION_AREAS mTherionSplays = prefs.getBoolean( key[k++], false ); // DISTOX_THERION_SPLAYS mRecentNr = tryInt( prefs, key[k++], "4" ); // DISTOX_RECENT_NR choice: 3, 4, 5, 6 mAreaBorder = prefs.getBoolean( key[k++], true ); // DISTOX_AREA_BORDER mOrthogonalLRUDAngle = tryFloat( prefs, key[k++], "0"); // DISTOX_ORTHO_LRUD mOrthogonalLRUDCosine = TDMath.cosd( mOrthogonalLRUDAngle ); mOrthogonalLRUD = ( mOrthogonalLRUDAngle < 0.000001f ); // mSectionStations = tryInt( prefs, key[k++], "3"); // DISTOX_SECTION_STATIONS mWallsType = tryInt( prefs, key[k++], "0" ); // DISTOX_WALLS_TYPE choice: 0, 1 mWallsPlanThr = tryFloat( prefs, key[k++], "70" ); // DISTOX_WALLS_PLAN_THR mWallsExtendedThr = tryFloat( prefs, key[k++], "45" ); // DISTOX_WALLS_EXTENDED_THR mWallsXClose = tryFloat( prefs, key[k++], "0.1" ); // DISTOX_WALLS_XCLOSE mWallsXStep = tryFloat( prefs, key[k++], "1.0" ); // DISTOX_WALLS_XSTEP mWallsConcave = tryFloat( prefs, key[k++], "0.1" ); // DISTOX_WALLS_CONCAVE mDxfBlocks = prefs.getBoolean( key[k++], true ); // DISTOX_DXF_BLOCKS mAlgoMinAlpha = tryFloat( prefs, key[k++], "0.1" ); // DISTOX_ALGO_MIN_ALPHA mAlgoMinBeta = tryFloat( prefs, key[k++], "4.0" ); // DISTOX_ALGO_MIN_BETA mAlgoMinGamma = tryFloat( prefs, key[k++], "1.0" ); // DISTOX_ALGO_MIN_GAMMA mAlgoMinDelta = tryFloat( prefs, key[k++], "1.0" ); // DISTOX_ALGO_MIN_DELTA } static private void setActivityBooleans( Context ctx ) { mLevelOverBasic = mActivityLevel > LEVEL_BASIC; mLevelOverNormal = mActivityLevel > LEVEL_NORMAL; mLevelOverAdvanced = mActivityLevel > LEVEL_ADVANCED; mLevelOverExperimental = mActivityLevel > LEVEL_EXPERIMENTAL; if ( mLevelOverAdvanced ) { String android_id = Secure.getString( ctx.getContentResolver(), Secure.ANDROID_ID ); // Log.v("DistoX", "android_id <" + android_id + ">"); if ( // "e5582eda21cafac3".equals( android_id ) || // Nexus-4 "8c894b79b6dce351".equals( android_id ) ) { // Samsung Note-3 mLevelOverExperimental = true; } } if ( ! mLevelOverAdvanced ) { mMagAnomaly = false; } } static void checkPreference( SharedPreferences prefs, String k, MainWindow main_window, TopoDroidApp app ) { int nk = 0; // key index float f; // int i; // Log.v(TopoDroidApp.TAG, "onSharePreferenceChanged " + k ); // ---------------- PRIMARY PREFERENCES --------------------------- if ( k.equals( key[ nk++ ] ) ) { // DISTOX_EXTRA_BUTTONS int level = tryInt( prefs, k, "1" ); if ( level != mActivityLevel ) { mActivityLevel = level; setActivityBooleans( app ); if ( main_window != null ) { main_window.resetButtonBar(); main_window.setMenuAdapter( app.getResources() ); } } } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_BUTTON_SIZE int size = getSizeButtons( tryInt( prefs, k, "1" ) ); if ( size != mSizeButtons ) { mSizeButtons = size; if ( main_window != null ) main_window.resetButtonBar(); } } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_TEXT_SIZE mTextSize = tryInt( prefs, k, "16" ); } else if ( k.equals( key[ nk++ ] ) ) { mKeyboard = prefs.getBoolean( k, true ); // DISTOX_MKEYBOARD } else if ( k.equals( key[ nk++ ] ) ) { mDefaultTeam = prefs.getString( k, "" ); // DISTOX_TEAM } else if ( k.equals( key[ nk++ ] ) ) { boolean co_survey = prefs.getBoolean( k, false ); // DISTOX_COSURVEY if ( co_survey != app.mCoSurveyServer ) { app.setCoSurvey( co_survey ); // set flag and start/stop server } } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_INIT_STATION mInitStation = prefs.getString( k, "0" ).replaceAll("\\s+", ""); if ( mInitStation.length() == 0 ) mInitStation = "0"; DistoXStationName.setInitialStation( mInitStation ); } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_AZIMUTH_MANUAL mAzimuthManual = prefs.getBoolean( k, false ); TDAzimuth.resetRefAzimuth( TDAzimuth.mRefAzimuth ); } else if ( k.equals( key[ nk++ ] ) ) { // mDevice = mData.getDevice( prefs.getString( k, "" ) ); // DISTOX_DEVICE - UNUSED HERE } else if ( k.equals( key[ nk++ ] ) ) { mCheckBT = tryInt( prefs, k, "1" ); // DISTOX_BLUETOOTH (choice) } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_LOCALE app.setLocale( prefs.getString( k, "" ), true ); } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_CWD app.setCWD( prefs.getString( k, "TopoDroid" ) ); // ---------------- SECOINDARY PREFERENCES --------------------------- } else if ( k.equals( key[ nk++ ] ) ) { mSockType = tryInt( prefs, k, mDefaultSockStrType ); // "DISTOX_SOCK_TYPE (choice) } else if ( k.equals( key[ nk++ ] ) ) { mCommRetry = tryInt( prefs, k, "1" ); // DISTOX_COMM_RETRY } else if ( k.equals( key[ nk++ ] ) ) { mWaitLaser = tryInt( prefs, k, "1000" ); // DISTOX_WAIT_LASER } else if ( k.equals( key[ nk++ ] ) ) { mWaitShot = tryInt( prefs, k, "4000" ); // DISTOX_WAIT_SHOT } else if ( k.equals( key[ nk++ ] ) ) { mWaitData = tryInt( prefs, k, "250" ); // DISTOX_WAIT_DATA } else if ( k.equals( key[ nk++ ] ) ) { mWaitConn = tryInt( prefs, k, "500" ); // DISTOX_WAIT_CONN } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_Z6_WORKAROUND mZ6Workaround = prefs.getBoolean( k, true ); } else if ( k.equals( key[ nk++ ] ) ) { mConnectionMode = tryInt( prefs, k, "0" ); // DISTOX_CONN_MODE (choice) } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_AUTO_PAIR mAutoPair = prefs.getBoolean( k, true ); app.checkAutoPairing(); } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_SOCKET_DELAY mConnectSocketDelay = tryInt(prefs, k, "0" ); } else if ( k.equals( key[ nk++ ] ) ) { mAutoReconnect = prefs.getBoolean( k, false ); // DISTOX_AUTO_RECONNECT } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_CLOSE_DISTANCE mCloseDistance = tryFloat( prefs, k, "0.05" ); } else if ( k.equals( key[ nk++ ] ) ) { mExtendThr = tryFloat( prefs, k, "10" ); // DISTOX_EXTEND_THR2 } else if ( k.equals( key[ nk++ ] ) ) { mVThreshold = tryFloat( prefs, k, "80" ); // DISTOX_VTHRESHOLD } else if ( k.equals( key[ nk++ ] ) ) { parseSurveyStations( prefs.getString( k, "1" ) ); // DISTOX_SURVEY_STATION } else if ( k.equals( key[ nk++ ] ) ) { if ( prefs.getString( k, UNIT_LENGTH ).equals(UNIT_LENGTH) ) { mUnitLength = 1.0f; mUnitLengthStr = "m"; } else { mUnitLength = TopoDroidUtil.M2FT; mUnitLengthStr = "ft"; } // TDLog.Log( TDLog.LOG_UNITS, "mUnitLength changed " + mUnitLength ); } else if ( k.equals( key[ nk++ ] ) ) { if ( prefs.getString( k, UNIT_ANGLE ).equals(UNIT_ANGLE) ) { mUnitAngle = 1.0f; mUnitAngleStr = "deg"; } else { mUnitAngle = TopoDroidUtil.DEG2GRAD; mUnitAngleStr = "grad"; } // TDLog.Log( TDLog.LOG_UNITS, "mUnitAngle changed " + mUnitAngle ); } else if ( k.equals( key[ nk++ ] ) ) { mAccelerationThr = tryFloat( prefs, k, "1" ); // DISTOX_ACCEL_PERCENT } else if ( k.equals( key[ nk++ ] ) ) { mMagneticThr = tryFloat( prefs, k, "1" ); // DISTOX_MAG_PERCENT } else if ( k.equals( key[ nk++ ] ) ) { mDipThr = tryFloat( prefs, k, "2" ); // DISTOX_DIP_THR } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_LOOP_CLOSURE // mLoopClosure = prefs.getBoolean( k, false ); mLoopClosure = tryInt( prefs, k, "0" ); } else if ( k.equals( key[ nk++ ] ) ) { mCheckAttached = prefs.getBoolean( k, false ); } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_PREV_NEXT mPrevNext = prefs.getBoolean( k, true ); } else if ( k.equals( key[ nk++ ] ) ) { mUnitLocation = prefs.getString( k, "ddmmss" ).equals("ddmmss") ? TDConst.DDMMSS : TDConst.DEGREE; // TDLog.Log( TDLog.LOG_UNITS, "mUnitLocation changed " + mUnitLocation ); // } else if ( k.equals( key[ nk++ ] ) ) { // try { // mAltitude = Integer.parseInt( prefs.getString( k, ALTITUDE ) ); // DISTOX_ALTITUDE 15 // } catch ( NumberFormatException e ) { mAltitude = _WGS84; } } else if ( k.equals( key[ nk++ ] ) ) { mCRS = prefs.getString( k, "Long-Lat" ); // DISTOX_CRS } else if ( k.equals( key[ nk++ ] ) ) { mGroupBy = tryInt( prefs, k, "1" ); // DISTOX_GROUP_BY (choice) } else if ( k.equals( key[ nk++ ] ) ) { mGroupDistance = tryFloat( prefs, k, "40" ); } else if ( k.equals( key[ nk++ ] ) ) { mCalibEps = tryFloat( prefs, k, CALIB_EPS ); } else if ( k.equals( key[ nk++ ] ) ) { mCalibMaxIt = tryInt( prefs, k, "200" ); // DISTOX_CALIB_MAX_IT } else if ( k.equals( key[ nk++ ] ) ) { // mRawData = prefs.getBoolean( k, false ); // DISTOX_RAW_DATA mRawCData = tryInt( prefs, k, "0" ); // DISTOX_RAW_iCDATA } else if ( k.equals( key[ nk++ ] ) ) { mCalibAlgo = tryInt( prefs, k, "0" ); // DISTOX_CALIB_ALGO } else if ( k.equals( key[ nk++ ] ) ) { mAutoStations = prefs.getBoolean( k, true ); // DISTOX_AUTO_STATIONS } else if ( k.equals( key[ nk++ ] ) ) { mCloseness = tryFloat( prefs, k, "24" ); } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_ERASENESS mEraseness = tryFloat( prefs, k, "36" ); } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_MIN_SHIFT mMinShift = tryInt( prefs, k, "60" ); } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_POINTING mPointingRadius= tryInt( prefs, k, "16" ); } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_LINE_SEGMENT mLineSegment = tryInt( prefs, k, "10" ); mLineSegment2 = mLineSegment * mLineSegment; } else if ( k.equals( key[ nk++ ] ) ) { mLineAccuracy = tryFloat( prefs, k, "1" ); } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_LINE_CORNER mLineCorner = tryFloat( prefs, k, "20" ); } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_LINE_STYLE setLineStyleAndType( prefs.getString( k, LINE_STYLE ) ); } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_DRAWING_UNIT try { f = Float.parseFloat( prefs.getString( k, "1.4" ) ); if ( f > 0 && f != mUnit ) { mUnit = f; BrushManager.reloadPointLibrary( app.getResources() ); } } catch ( NumberFormatException e ) { } } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_PICKER_TYPE mPickerType = tryInt( prefs, k, "0" ); } else if ( k.equals( key[ nk++ ] ) ) { mHThreshold = tryFloat( prefs, k, "70" ); // DISTOX_HTHRESHOLD } else if ( k.equals( key[ nk++ ] ) ) { try { f = Float.parseFloat( prefs.getString( k, "20" ) ); // DISTOX_STATION_SIZE if ( f >= 1 && f != mStationSize ) { mStationSize = f; BrushManager.setTextSizes( ); } } catch ( NumberFormatException e ) { } } else if ( k.equals( key[ nk++ ] ) ) { try { f = Float.parseFloat( prefs.getString( k, "24" ) ); // DISTOX_LABEL_SIZE if ( f >= 1 && f != mLabelSize ) { mLabelSize = f; BrushManager.setTextSizes( ); } } catch ( NumberFormatException e ) { } // FIXME changing label size affects only new labels // not existing labels (until they are edited) } else if ( k.equals( key[ nk++ ] ) ) { try { f = Float.parseFloat( prefs.getString( k, "1" ) ); // DISTOX_LINE_THICKNESS if ( f >= 0.5f && f != mLineThickness ) { mLineThickness = f; BrushManager.reloadLineLibrary( app.getResources() ); } } catch ( NumberFormatException e ) { } } else if ( k.equals( key[ nk++ ] ) ) { mAutoSectionPt = prefs.getBoolean( k, false ); // DISTOX_AUTO_SECTION_PT } else if ( k.equals( key[ nk++ ] ) ) { mBackupNumber = tryInt( prefs, k, "5" ); // DISTOX_BACKUP_NUMBER } else if ( k.equals( key[ nk++ ] ) ) { mBackupInterval = tryInt( prefs, k, "60" ); // DISTOX_BACKUP_INTERVAL } else if ( k.equals( key[ nk++ ] ) ) { mTimerCount = tryInt( prefs, k, "10" ); // DISTOX_SHOT_TIMER } else if ( k.equals( key[ nk++ ] ) ) { mBeepVolume = tryInt( prefs, k, "50" ); // DISTOX_BEEP_VOLUME } else if ( k.equals( key[ nk++ ] ) ) { mMinNrLegShots = tryInt( prefs, k, "3" ); // DISTOX_LEG_SHOTS (choice) } else if ( k.equals( key[ nk++ ] ) ) { mSketchSideSize = tryFloat( prefs, k, "0.5" ); // 0.5 meter // DISTOX_SKETCH_LINE_STEP } else if ( k.equals( key[ nk++ ] ) ) { mDeltaExtrude = tryFloat( prefs, k, "50" ); // DISTOX_DELTA_EXTRUDE } else if ( k.equals( key[ nk++ ] ) ) { mCompassReadings = tryInt( prefs, k, "4" ); // DISTOX_COMPASS_READINGS } else if ( k.equals( key[ nk++ ] ) ) { mLRExtend = prefs.getBoolean( k, true ); // DISTOX_SPLAY_EXTEND } else if ( k.equals( key[ nk++ ] ) ) { mBitmapScale = tryFloat( prefs, k, "1.5" ); // DISTOX_BITMAP_SCALE } else if ( k.equals( key[ nk++ ] ) ) { mThumbSize = tryInt( prefs, k, "200" ); // DISTOX_THUMBNAIL } else if ( k.equals( key[ nk++ ] ) ) { mDotRadius = tryFloat( prefs, k, "5" ); // DISTOX_DOT_RADIUS } else if ( k.equals( key[ nk++ ] ) ) { try { f = Float.parseFloat( prefs.getString( k, "1" ) ); // DISTOX_FIXED_THICKNESS if ( f >= 0.5f && f <= 10 && f != mFixedThickness ) { mFixedThickness = f; BrushManager.setStrokeWidths(); } } catch ( NumberFormatException e ) { } } else if ( k.equals( key[ nk++ ] ) ) { mArrowLength = tryFloat( prefs, k, "8" ); // DISTOX_ARROW_LENGTH } else if ( k.equals( key[ nk++ ] ) ) { mExportShotsFormat = tryInt( prefs, k, "-1" ); // DISTOX_EXPORT_SHOTS (choice) } else if ( k.equals( key[ nk++ ] ) ) { mExportPlotFormat = tryInt( prefs, k, "-1" ); // DISTOX_EXPORT_PLOT (choice) } else if ( k.equals( key[ nk++ ] ) ) { mTherionMaps = prefs.getBoolean( k, false ); // DISTOX_THERION_MAPS } else if ( k.equals( key[ nk++ ] ) ) { mSvgGrid = prefs.getBoolean( k, false ); // DISTOX_SVG_GRID } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_SPLAY_VERT_THRS mSplayVertThrs = tryFloat( prefs, k, "80" ); } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_BACKSIGHT mBacksight = prefs.getBoolean( k, false ); } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_MAG_ANOMALY setMagAnomaly( prefs.getBoolean( k, false ) ); } else if ( k.equals( key[ nk++ ] ) ) { mVertSplay = tryFloat( prefs, k, "50" ); } else if ( k.equals( key[ nk++ ] ) ) { mExportStationsPrefix = prefs.getBoolean( k, false ); // DISTOX_STATION_PREFIX } else if ( k.equals( key[ nk++ ] ) ) { mStationNames = (prefs.getString( k, "alpha").equals("number"))? 1 : 0; // DISTOX_STATION_NAMES } else if ( k.equals( key[ nk++ ] ) ) { // setZoomControls( prefs.getBoolean( k, false ) ); // DISTOX_ZOOM_CONTROLS setZoomControls( prefs.getString( k, "1"), app.isMultitouch() ); // DISTOX_ZOOM_CTRL } else if ( k.equals( key[ nk++ ] ) ) { mSideDrag = prefs.getBoolean( k, false ); // DISTOX_SIDE_DRAG } else if ( k.equals( key[ nk++ ] ) ) { mDxfScale = tryFloat( prefs, k, "1" ); // DISTOX_DXF_SCALE // } else if ( k.equals( key[ nk++ ] ) ) { // try { // mAcadVersion = Integer.parseInt( prefs.getString( k, "13") ); // DISTOX_ACAD_VERSION // } catch ( NumberFormatException e) { } } else if ( k.equals( key[ nk++ ] ) ) { setBitmapBgcolor( prefs.getString( k, "0 0 0" ) ); // DISTOX_BITMAP_BGCOLOR } else if ( k.equals( key[ nk++ ] ) ) { mSurvexEol = ( prefs.getString( k, "LF" ).equals("LF") )? "\n" : "\r\n"; // DISTOX_SURVEX_EOL } else if ( k.equals( key[ nk++ ] ) ) { mSurvexSplay = prefs.getBoolean( k, false ); // DISTOX_SURVEX_SPLAY } else if ( k.equals( key[ nk++ ] ) ) { mSurvexLRUD = prefs.getBoolean( k, false ); // DISTOX_SURVEX_LRUD } else if ( k.equals( key[ nk++ ] ) ) { mSwapLR = prefs.getBoolean( k, false ); // DISTOX_SWAP_LR } else if ( k.equals( key[ nk++ ] ) ) { mUnscaledPoints = prefs.getBoolean( k, false ); // DISTOX_UNSCALED_POINTS } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_UNIT_GRID mUnitGrid = Float.parseFloat( prefs.getString( k, "1" ) ); // } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_XTHERION_AREAS // mXTherionAreas = prefs.getBoolean( k, false ); } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_THERION_SPLAYS mTherionSplays = prefs.getBoolean( k, false ); } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_RECENT_NR mRecentNr = tryInt( prefs, k, "4" ); } else if ( k.equals( key[ nk++ ] ) ) { mAreaBorder = prefs.getBoolean( k, true ); // DISTOX_AREA_BORDER } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_ORTHO_LRUD mOrthogonalLRUDAngle = tryFloat( prefs, k, "0"); mOrthogonalLRUDCosine = TDMath.cosd( mOrthogonalLRUDAngle ); mOrthogonalLRUD = ( mOrthogonalLRUDAngle < 0.000001f ); // } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_SECTION_STATIONS // mSectionStations = tryInt( prefs, k, "3"); } else if ( k.equals( key[ nk++ ] ) ) { // DISTOX_WALLS_TYPE mWallsType = tryInt(prefs, k, "0" ); } else if ( k.equals( key[ nk++ ] ) ) { mWallsPlanThr = tryFloat( prefs, k, "70" ); // DISTOX_WALLS_PLAN_THR } else if ( k.equals( key[ nk++ ] ) ) { mWallsExtendedThr = tryFloat( prefs, k, "45" ); // DISTOX_WALLS_EXTENDED_THR } else if ( k.equals( key[ nk++ ] ) ) { mWallsXClose = tryFloat( prefs, k, "0.1" ); // DISTOX_WALLS_XCLOSE } else if ( k.equals( key[ nk++ ] ) ) { mWallsXStep = tryFloat( prefs, k, "1.0" ); // DISTOX_WALLS_XSTEP } else if ( k.equals( key[ nk++ ] ) ) { mWallsConcave = tryFloat( prefs, k, "0.1" ); // DISTOX_WALLS_CONCAVE } else if ( k.equals( key[ nk++ ] ) ) { mDxfBlocks = prefs.getBoolean( k, true ); // DISTOX_DXF_BLOCKS } else if ( k.equals( key[ nk++ ] ) ) { mAlgoMinAlpha = tryFloat( prefs, k, "0.1" ); // DISTOX_ALGO_MIN_ALPHA } else if ( k.equals( key[ nk++ ] ) ) { mAlgoMinBeta = tryFloat( prefs, k, "4.0" ); // DISTOX_ALGO_MIN_BETA } else if ( k.equals( key[ nk++ ] ) ) { mAlgoMinGamma = tryFloat( prefs, k, "1.0" ); // DISTOX_ALGO_MIN_GAMMA } else if ( k.equals( key[ nk++ ] ) ) { mAlgoMinDelta = tryFloat( prefs, k, "1.0" ); // DISTOX_ALGO_MIN_DELTA // } else if ( k.equals( key[ nk++ ] ) ) { // mSketchUsesSplays = prefs.getBoolean( k, false ); // } else if ( k.equals( key[ nk++ ] ) ) { // mSketchBorderStep = Float.parseFloat( prefs.getString( k, "0.2") ); // } else if ( k.equals( key[ nk++ ] ) ) { // mSketchSectionStep = Float.parseFloat( prefs.getString( k, "0.5") ); } else { TDLog.checkLogPreferences( prefs, k ); } } private static void setLineStyleAndType( String style ) { mLineStyle = LINE_STYLE_BEZIER; // default mLineType = 1; if ( style.equals( "0" ) ) { mLineStyle = LINE_STYLE_BEZIER; mLineType = 1; } else if ( style.equals( "1" ) ) { mLineStyle = LINE_STYLE_ONE; mLineType = 1; } else if ( style.equals( "2" ) ) { mLineStyle = LINE_STYLE_TWO; mLineType = 2; } else if ( style.equals( "3" ) ) { mLineStyle = LINE_STYLE_THREE; mLineType = 3; } } private static void parseSurveyStations( String str ) { try { mSurveyStations = Integer.parseInt( str ); } catch ( NumberFormatException e ) { mSurveyStations = 1; } if ( mSurveyStations == 6 ) { // TRIPOD mBacksightShot = false; mTripodShot = true; mSurveyStations = 1; mShotAfterSplays = true; } else if ( mSurveyStations == 5 ) { // BACKSIGHT mBacksightShot = true; mTripodShot = false; mSurveyStations = 1; mShotAfterSplays = true; } else { mBacksightShot = false; mTripodShot = false; mShotAfterSplays = ( mSurveyStations <= 2 ); if ( mSurveyStations > 2 ) mSurveyStations -= 2; } // Log.v("DistoX", "mSurveyStations " + mSurveyStations + " mShotAfterSplays " + mShotAfterSplays ); } // void clearPreferences() // { // SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences( this ); // SharedPreferences.Editor editor = sp.edit(); // editor.clear(); // editor.commit(); // } static void setPreference( SharedPreferences sp, String name, String value ) { Editor editor = sp.edit(); editor.putString( name, value ); editor.commit(); } // static void setPreference( SharedPreferences sp, String name, int val ) // { // Editor editor = sp.edit(); // editor.putString( name, Integer.toString(val) ); // editor.commit(); // } // static void setPreference( SharedPreferences sp, String name, float val ) // { // Editor editor = sp.edit(); // editor.putString( name, Float.toString(val) ); // editor.commit(); // } // =================================================================== // ENFORCE BOUNDS static private String parseIntValue( String value, int def, int min ) { int i = def; try { i = Integer.parseInt( value ); if ( i < min ) i = min; } catch ( NumberFormatException e ) { } return Integer.toString( i ); } static private String parseIntValue( String value, int def, int min, int max ) { int i = def; try { i = Integer.parseInt( value ); if ( i < min ) i = min; if ( i > max ) i = max; } catch ( NumberFormatException e ) { } return Integer.toString( i ); } static private String parseFloatValue( String value, float def, float min ) { float i = def; try { i = (float)(Double.parseDouble( value )); if ( i < min ) i = min; } catch ( NumberFormatException e ) { TDLog.Error("Parse Float Number exception. Value " + value ); } return Float.toString( i ); } static private String parseFloatValue( String value, float def, float min, float max ) { // TDLog.Error("parse float " + value + " def " + def + " min " + min + " max " + max ); float i = def; try { i = (float)(Double.parseDouble( value )); if ( i < min ) i = min; if ( i > max ) i = max; } catch ( NumberFormatException e ) { TDLog.Error("Parse Float Number exception. Value " + value ); } // Log.v("DistoX", "parse float " + value + " def " + def + " min " + min + " max " + max + " return " + i ); return Float.toString( i ); } static String enforcePreferenceBounds( String name, String value ) { // Log.v("DistoX", "enforce name " + name + " value <" + value + ">" ); // if ( name.equals( "DISTOX_COSURVEY" ) //S if ( name.equals( "DISTOX_INIT_STATION" ) //B if ( name.equals( "DISTOX_AZIMUTH_MANUAL" ) if ( name.equals( "DISTOX_TEXT_SIZE" ) ) return parseIntValue( value, mTextSize, 1 ); if ( name.equals( "DISTOX_CLOSE_DISTANCE" ) ) return parseFloatValue( value, mCloseDistance, 0.0001f ); if ( name.equals( "DISTOX_EXTEND_THR2" ) ) return parseFloatValue( value, mExtendThr, 0, 90 ); if ( name.equals( "DISTOX_VTHRESHOLD" ) ) return parseFloatValue( value, mVThreshold, 0, 90 ); //C if ( name.equals( "DISTOX_SURVEY_STATION" ) //C if ( name.equals( "DISTOX_UNIT_LENGTH" ) //C if ( name.equals( "DISTOX_UNIT_ANGLE" ) if ( name.equals( "DISTOX_ACCEL_PERCENT" ) ) return parseFloatValue( value, mAccelerationThr, 0 ); if ( name.equals( "DISTOX_MAG_PERCENT" ) ) return parseFloatValue( value, mMagneticThr, 0 ); if ( name.equals( "DISTOX_DIP_THR" ) ) return parseFloatValue( value, mDipThr, 0 ); //B if ( name.equals( "DISTOX_LOOP_CLOSURE" ) //B if ( name.equals( "DISTOX_CHECK_ATTACHED" ) //B if ( name.equals( "DISTOX_PREV_NEXT" ) //C if ( name.equals( "DISTOX_UNIT_LOCATION" ) //S if ( name.equals( "DISTOX_CRS" ) //C if ( name.equals( "DISTOX_GROUP_BY" ) if ( name.equals( "DISTOX_GROUP_DISTANCE" ) ) return parseFloatValue( value, mGroupDistance, 0 ); if ( name.equals( "DISTOX_CALIB_EPS" ) ) return parseFloatValue( value, mCalibEps, 0.000001f ); if ( name.equals( "DISTOX_CALIB_MAX_IT" ) ) return parseIntValue( value, mCalibMaxIt, 10 ); // //B if ( name.equals( "DISTOX_RAW_DATA" ) //C if ( name.equals( "DISTOX_RAW_CDATA" ) //C if ( name.equals( "DISTOX_CALIB_ALGO" ) //S if ( name.equals( "DISTOX_DEVICE" ) //C if ( name.equals( "DISTOX_BLUETOOTH" ) //C if ( name.equals( "DISTOX_SOCK_TYPE" ) if ( name.equals( "DISTOX_COMM_RETRY" ) ) return parseIntValue( value, mCommRetry, 1, 5 ); if ( name.equals( "DISTOX_WAIT_LASER" ) ) return parseIntValue( value, mWaitLaser, 100, 5000 ); if ( name.equals( "DISTOX_WAIT_SHOT" ) ) return parseIntValue( value, mWaitShot, 100, 10000 ); if ( name.equals( "DISTOX_WAIT_DATA" ) ) return parseIntValue( value, mWaitData, 0, 2000 ); if ( name.equals( "DISTOX_WAIT_CONN" ) ) return parseIntValue( value, mWaitConn, 50, 2000 ); //C if ( name.equals( "DISTOX_CONN_MODE" ) // if ( name.equals( "DISTOX_AUTO_STATIONS" ) if ( name.equals( "DISTOX_CLOSENESS" ) ) return parseFloatValue( value, mCloseness, 1 ); if ( name.equals( "DISTOX_ERASENESS" ) ) return parseFloatValue( value, mEraseness, 1 ); if ( name.equals( "DISTOX_MIN_SHIFT" ) ) return parseIntValue( value, mMinShift, 10 ); if ( name.equals( "DISTOX_POINTING" ) ) return parseIntValue( value, mPointingRadius, 1 ); if ( name.equals( "DISTOX_LINE_SEGMENT" ) ) return parseIntValue( value, mLineSegment, 1 ); if ( name.equals( "DISTOX_LINE_ACCURACY" ) ) return parseFloatValue( value, mLineAccuracy, 0.1f ); if ( name.equals( "DISTOX_LINE_CORNER" ) ) return parseFloatValue( value, mLineCorner, 0.1f ); // if ( name.equals( "DISTOX_LINE_STYLE" ) // if ( name.equals( "DISTOX_DRAWING_UNIT" ) // if ( name.equals( "DISTOX_PICKER_TYPE" ) if ( name.equals( "DISTOX_HTHRESHOLD" ) ) return parseFloatValue( value, mHThreshold, 0, 90 ); if ( name.equals( "DISTOX_STATION_SIZE" ) ) return parseFloatValue( value, mStationSize, 1 ); if ( name.equals( "DISTOX_LABEL_SIZE" ) ) return parseFloatValue( value, mLabelSize, 1 ); if ( name.equals( "DISTOX_LINE_THICKNESS" ) ) return parseFloatValue( value, mLineThickness, 1, 10 ); if ( name.equals( "DISTOX_BACKUP_NUMBER" ) ) return parseIntValue( value, mBackupNumber, 4, 10 ); if ( name.equals( "DISTOX_BACKUP_INTERVAL") ) return parseIntValue( value, mBackupInterval, 5, 600 ); // if ( name.equals( "DISTOX_TEAM" ) if ( name.equals( "DISTOX_SHOT_TIMER" ) ) return parseIntValue( value, mTimerCount, 0 ); if ( name.equals( "DISTOX_BEEP_VOLUME" ) ) return parseIntValue( value, mBeepVolume, 10, 100 ); // if ( name.equals( "DISTOX_LEG_SHOTS" ) if ( name.equals( "DISTOX_SKETCH_LINE_STEP" ) ) return parseFloatValue( value, mSketchSideSize, 0.01f ); if ( name.equals( "DISTOX_DELTA_EXTRUDE" ) ) return parseFloatValue( value, mDeltaExtrude, 0.01f ); if ( name.equals( "DISTOX_COMPASS_READINGS" ) ) return parseIntValue( value, mCompassReadings, 1 ); //B if ( name.equals( "DISTOX_SPLAY_EXTEND" ) //B if ( name.equals( "DISTOX_AUTO_RECONNECT" ) if ( name.equals( "DISTOX_BITMAP_SCALE" ) ) return parseFloatValue( value, mBitmapScale, 0.5f, 10f ); if ( name.equals( "DISTOX_THUMBNAIL" ) ) return parseIntValue( value, mThumbSize, 80, 400 ); if ( name.equals( "DISTOX_DOT_RADIUS" ) ) return parseFloatValue( value, mDotRadius, 1, 100 ); if ( name.equals( "DISTOX_FIXED_THICKNESS" ) ) return parseFloatValue( value, mFixedThickness, 1, 10 ); if ( name.equals( "DISTOX_ARROW_LENGTH" ) ) return parseFloatValue( value, mArrowLength, 1, 40 ); //C if ( name.equals( "DISTOX_EXPORT_SHOTS" ) //C if ( name.equals( "DISTOX_EXPORT_PLOT" ) //B if ( name.equals( "DISTOX_THERION_MAPS" ) //B if ( name.equals( "DISTOX_SVG_GRID" ) if ( name.equals( "DISTOX_SPLAY_VERT_THRS" ) ) return parseFloatValue( value, mSplayVertThrs, 0, 91 ); //B if ( name.equals( "DISTOX_BACKSIGHT" ) //B if ( name.equals( "DISTOX_Z6_WORKAROUND" ) //B if ( name.equals( "DISTOX_MAG_ANOMALY" ) if ( name.equals( "DISTOX_VERT_SPLAY" ) ) return parseFloatValue( value, mVertSplay, 0, 91 ); //B if ( name.equals( "DISTOX_STATION_PREFIX" ) //C if ( name.equals( "DISTOX_STATION_NAMES" ) //C if ( name.equals( "DISTOX_ZOOM_CTRL" ) //B if ( name.equals( "DISTOX_SIDE_DRAG" ) //B if ( name.equals( "DISTOX_MKEYBOARD" ) if ( name.equals( "DISTOX_DXF_SCALE" ) ) return parseFloatValue( value, mDxfScale, 0.1f, 10f ); //C if ( name.equals( "DISTOX_ACAD_VERSION" ) //X if ( name.equals( "DISTOX_BITMAP_BGCOLOR" ) //B if ( name.equals( "DISTOX_AUTO_PAIR" ) if ( name.equals( "DISTOX_SOCKET_DELAY" ) ) return parseIntValue( value, mConnectSocketDelay, 0, 100 ); //C if ( name.equals( "DISTOX_SURVEX_EOL" ) //B if ( name.equals( "DISTOX_SURVEX_SPLAY" ) //B if ( name.equals( "DISTOX_SURVEX_LRUD" ) //B if ( name.equals( "DISTOX_SWAP_LR" ) //B if ( name.equals( "DISTOX_UNSCALED_POINTS" ) //C if ( name.equals( "DISTOX_UNIT_GRID" ) //B if ( name.equals( "DISTOX_XTHERION_AREAS" ) //B if ( name.equals( "DISTOX_THERION_SPLAYS" ) //C if ( name.equals( "DISTOX_RECENT_NR" ) //B if ( name.equals( "DISTOX_AREA_BORDER" ) if ( name.equals( "DISTOX_ORTHO_LRUD" ) ) return parseFloatValue( value, mOrthogonalLRUDAngle, 0, 90 ); // if ( name.equals( "DISTOX_WALLS_TYPE" ) if ( name.equals( "DISTOX_WALLS_PLAN_THR" ) ) return parseFloatValue( value, mWallsPlanThr, 0, 90 ); if ( name.equals( "DISTOX_WALLS_EXTENDED_THR" ) ) return parseFloatValue( value, mWallsExtendedThr, 0, 90 ); if ( name.equals( "DISTOX_WALLS_XCLOSE" ) ) return parseFloatValue( value, mWallsXClose, 0 ); if ( name.equals( "DISTOX_WALLS_XSTEP" ) ) return parseFloatValue( value, mWallsXStep, 0 ); if ( name.equals( "DISTOX_WALLS_CONCAVE" ) ) return parseFloatValue( value, mWallsConcave, 0 ); // if ( name.equals( "DISTOX_DXF_BLOCKS" ) // DISTOX_DXF_BLOCKS if ( name.equals( "DISTOX_ALGO_MIN_ALPHA" ) ) return parseFloatValue( value, mAlgoMinAlpha, 0, 1 ); if ( name.equals( "DISTOX_ALGO_MIN_BETA" ) ) return parseFloatValue( value, mAlgoMinBeta, 0 ); if ( name.equals( "DISTOX_ALGO_MIN_GAMMA" ) ) return parseFloatValue( value, mAlgoMinGamma, 0 ); if ( name.equals( "DISTOX_ALGO_MIN_DELTA" ) ) return parseFloatValue( value, mAlgoMinDelta, -10 ); //C if ( name.equals( "DISTOX_LOCALE" ) //A if ( name.equals( "DISTOX_CWD" ) return value; } }