aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/AndroidManifest.xml8
-rw-r--r--main/res/layout/settings_activity.xml853
-rw-r--r--main/res/menu/main_activity_options.xml5
-rw-r--r--main/src/cgeo/geocaching/MainActivity.java8
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCConnector.java4
-rw-r--r--main/src/cgeo/geocaching/settings/EditPasswordPreference.java2
-rw-r--r--main/src/cgeo/geocaching/settings/LogSignaturePreference.java4
-rw-r--r--main/src/cgeo/geocaching/settings/NewSettingsActivity.java524
-rw-r--r--main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java4
-rw-r--r--main/src/cgeo/geocaching/settings/Settings.java210
-rw-r--r--main/src/cgeo/geocaching/settings/SettingsActivity.java1327
-rw-r--r--tests/src/cgeo/geocaching/StaticMapsProviderTest.java9
-rw-r--r--tests/src/cgeo/geocaching/cgeoApplicationTest.java19
-rw-r--r--tests/src/cgeo/geocaching/connector/gc/GCConnectorTest.java5
-rw-r--r--tests/src/cgeo/geocaching/files/GPXImporterTest.java9
-rw-r--r--tests/src/cgeo/geocaching/geopoint/UnitsTest.java19
-rw-r--r--tests/src/cgeo/geocaching/settings/TestSettings.java42
-rw-r--r--tests/src/cgeo/geocaching/speech/TextFactoryTest.java3
18 files changed, 513 insertions, 2542 deletions
diff --git a/main/AndroidManifest.xml b/main/AndroidManifest.xml
index 034ecd0..c5781f2 100644
--- a/main/AndroidManifest.xml
+++ b/main/AndroidManifest.xml
@@ -130,14 +130,8 @@
android:label="@string/search_address_result"
android:windowSoftInputMode="stateHidden" >
</activity>
- <activity
- android:name=".settings.SettingsActivity"
- android:configChanges="keyboardHidden|orientation"
- android:label="@string/settings"
- android:windowSoftInputMode="stateHidden" >
- </activity>
<activity
- android:name=".settings.NewSettingsActivity"
+ android:name=".settings.SettingsActivity"
android:label="@string/settings_titlebar"
android:theme="@style/settings"
android:configChanges="keyboardHidden|orientation" >
diff --git a/main/res/layout/settings_activity.xml b/main/res/layout/settings_activity.xml
deleted file mode 100644
index 9d80e13..0000000
--- a/main/res/layout/settings_activity.xml
+++ /dev/null
@@ -1,853 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:background="?background_color"
- android:orientation="vertical" >
-
- <include layout="@layout/actionbar" />
-
- <ScrollView
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical"
- android:padding="4dip" >
-
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
-
- <!-- ** -->
-
- <RelativeLayout style="@style/separator_horizontal_layout" >
-
- <View style="@style/separator_horizontal" />
-
- <TextView
- style="@style/separator_horizontal_headline"
- android:text="@string/init_geocaching" />
- </RelativeLayout>
-
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_margin="3dip"
- android:orientation="horizontal"
- android:padding="3dip" >
-
- <CheckBox
- android:id="@+id/gc_option"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:gravity="center"
- android:padding="1dip" />
-
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:gravity="left"
- android:paddingRight="3dip"
- android:text="@string/init_gc_activate"
- android:textColor="?text_color"
- android:textSize="14sp" />
- </LinearLayout>
-
- <TextView
- android:id="@+id/legal_note"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginBottom="5dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:linksClickable="true"
- android:padding="3dip"
- android:text="@string/settings_gc_legal_note"
- android:textColor="?text_color"
- android:textColorLink="?text_color_link"
- android:textSize="14sp" />
-
- <EditText
- android:id="@+id/username"
- style="@style/edittext_full"
- android:hint="@string/init_username" />
-
- <EditText
- android:id="@+id/password"
- style="@style/edittext_full"
- android:hint="@string/init_password"
- android:inputType="textPassword" />
-
- <Button
- android:id="@+id/log_me_in"
- style="@style/button_full"
- android:lines="2"
- android:scrollHorizontally="false"
- android:singleLine="false"
- android:text="@string/init_login" />
- <!-- ** -->
-
- <RelativeLayout style="@style/separator_horizontal_layout" >
-
- <View style="@style/separator_horizontal" />
-
- <TextView
- style="@style/separator_horizontal_headline"
- android:text="@string/init_oc" />
- </RelativeLayout>
-
- <CheckBox
- android:id="@+id/oc_option"
- style="@style/checkbox_full"
- android:text="@string/settings_activate_oc" />
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="5dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:padding="3dip"
- android:text="@string/init_oc_de_description"
- android:textColor="?text_color"
- android:textSize="14sp" />
-
- <Button
- android:id="@+id/register_oc_de"
- style="@style/button_full"
- android:text="@string/init_register_oc_de" />
- <!-- ** -->
-
- <RelativeLayout style="@style/separator_horizontal_layout" >
-
- <View style="@style/separator_horizontal" />
-
- <TextView
- style="@style/separator_horizontal_headline"
- android:text="@string/init_gcvote" />
- </RelativeLayout>
-
- <EditText
- android:id="@+id/passvote"
- style="@style/edittext_full"
- android:hint="@string/init_passvote"
- android:inputType="textPassword" />
- <!-- ** -->
-
- <RelativeLayout style="@style/separator_horizontal_layout" >
-
- <View style="@style/separator_horizontal" />
-
- <TextView
- style="@style/separator_horizontal_headline"
- android:text="@string/init_twitter" />
- </RelativeLayout>
-
- <TextView
- android:id="@+id/about_twitter"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginBottom="5dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:linksClickable="true"
- android:padding="3dip"
- android:text="@string/about_twitter"
- android:textColor="?text_color"
- android:textColorLink="?text_color_link"
- android:textSize="14sp" />
-
- <Button
- android:id="@+id/authorize_twitter"
- style="@style/button_full"
- android:text="@string/init_twitter_authorize" />
-
- <CheckBox
- android:id="@+id/twitter_option"
- style="@style/checkbox_full"
- android:text="@string/settings_activate_twitter" />
-
- <RelativeLayout style="@style/separator_horizontal_layout" >
-
- <View style="@style/separator_horizontal" />
-
- <TextView
- style="@style/separator_horizontal_headline"
- android:text="@string/init_signature" />
- </RelativeLayout>
-
- <EditText
- android:id="@+id/signature"
- style="@style/edittext_full"
- android:layout_height="wrap_content"
- android:hint="@string/init_signature"
- android:inputType="textMultiLine|textCapSentences"
- android:minLines="3"
- android:singleLine="false" />
-
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal" >
-
- <Button
- android:id="@+id/signature_template"
- style="@style/button_full"
- android:layout_width="wrap_content"
- android:layout_weight="2"
- android:text="@string/init_signature_template_button"
- android:textSize="14sp" />
-
- <Button
- android:id="@+id/signature_help"
- style="@style/button_full"
- android:layout_width="wrap_content"
- android:layout_weight="1"
- android:text="@string/init_signature_help_button"
- android:textSize="14sp" />
- </LinearLayout>
-
- <CheckBox
- android:id="@+id/sigautoinsert"
- style="@style/checkbox_full"
- android:text="@string/init_sigautoinsert" />
-
- <RelativeLayout style="@style/separator_horizontal_layout" >
-
- <View style="@style/separator_horizontal" />
-
- <TextView
- style="@style/separator_horizontal_headline"
- android:text="@string/init_details" />
- </RelativeLayout>
-
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_margin="3dip"
- android:orientation="vertical"
- android:padding="3dip" >
-
- <CheckBox
- android:id="@+id/autoload"
- style="@style/checkbox_full"
- android:text="@string/init_summary_autoload" />
-
- <CheckBox
- android:id="@+id/ratingwanted"
- style="@style/checkbox_full"
- android:text="@string/init_summary_ratingwanted" />
-
- <CheckBox
- android:id="@+id/elevationwanted"
- style="@style/checkbox_full"
- android:text="@string/init_summary_elevationwanted" />
-
- <CheckBox
- android:id="@+id/friendlogswanted"
- style="@style/checkbox_full"
- android:text="@string/init_summary_friendlogswanted" />
-
- <CheckBox
- android:id="@+id/openlastdetailspage"
- style="@style/checkbox_full"
- android:text="@string/init_summary_openlastdetailspage" />
-
- <CheckBox
- android:id="@+id/offline"
- style="@style/checkbox_full"
- android:text="@string/init_summary_offline" />
-
- <CheckBox
- android:id="@+id/offline_wp"
- style="@style/checkbox_full"
- android:text="@string/init_summary_offline_wp" />
-
- <CheckBox
- android:id="@+id/save_log_img"
- style="@style/checkbox_full"
- android:text="@string/init_summary_save_log_img" />
- </LinearLayout>
- <!-- ** -->
-
- <RelativeLayout style="@style/separator_horizontal_layout" >
-
- <View style="@style/separator_horizontal" />
-
- <TextView
- style="@style/separator_horizontal_headline"
- android:text="@string/init_other" />
- </RelativeLayout>
-
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_margin="3dip"
- android:orientation="vertical"
- android:padding="3dip" >
-
- <CheckBox
- android:id="@+id/skin"
- style="@style/checkbox_full"
- android:text="@string/init_summary_skin" />
-
- <CheckBox
- android:id="@+id/address"
- style="@style/checkbox_full"
- android:text="@string/init_summary_address" />
-
- <CheckBox
- android:id="@+id/captcha"
- style="@style/checkbox_full"
- android:text="@string/init_summary_captcha" />
-
- <CheckBox
- android:id="@+id/livelist"
- style="@style/checkbox_full"
- android:text="@string/init_summary_livelist" />
-
- <CheckBox
- android:id="@+id/loaddirectionimg"
- style="@style/checkbox_full"
- android:text="@string/init_summary_loaddirectionimg" />
-
- <CheckBox
- android:id="@+id/useenglish"
- style="@style/checkbox_full"
- android:text="@string/init_summary_useenglish" />
-
- <CheckBox
- android:id="@+id/units"
- style="@style/checkbox_full"
- android:text="@string/init_summary_units" />
-
- <CheckBox
- android:id="@+id/exclude"
- style="@style/checkbox_full"
- android:text="@string/init_summary_exclude" />
-
- <CheckBox
- android:id="@+id/disabled"
- style="@style/checkbox_full"
- android:text="@string/init_summary_disabled" />
-
- <CheckBox
- android:id="@+id/trackautovisit"
- style="@style/checkbox_full"
- android:text="@string/init_summary_trackautovisit" />
-
- <CheckBox
- android:id="@+id/log_offline"
- style="@style/checkbox_full"
- android:text="@string/init_summary_log_offline" />
-
- <CheckBox
- android:id="@+id/choose_list"
- style="@style/checkbox_full"
- android:text="@string/init_summary_choose_list" />
-
- <CheckBox
- android:id="@+id/trail"
- style="@style/checkbox_full"
- android:text="@string/init_summary_maptrail" />
-
- <CheckBox
- android:id="@+id/plain_logs"
- style="@style/checkbox_full"
- android:text="@string/init_summary_plain_logs" />
-
- <CheckBox
- android:id="@+id/use_native_ua"
- style="@style/checkbox_full"
- android:text="@string/init_summary_use_native_ua" />
- </LinearLayout>
- <!-- ** -->
-
- <RelativeLayout style="@style/separator_horizontal_layout" >
-
- <View style="@style/separator_horizontal" />
-
- <TextView
- style="@style/separator_horizontal_headline"
- android:text="@string/init_showwaypoints" />
- </RelativeLayout>
-
- <EditText
- android:id="@+id/showwaypointsthreshold"
- style="@style/edittext_full"
- android:inputType="number"
- android:lines="1"
- android:scrollHorizontally="true"
- android:singleLine="true" />
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginBottom="5dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:linksClickable="true"
- android:padding="3dip"
- android:text="@string/init_showwaypoint_description"
- android:textColor="?text_color"
- android:textColorLink="?text_color_link"
- android:textSize="14sp" />
- <!-- maps -->
-
- <RelativeLayout style="@style/separator_horizontal_layout" >
-
- <View style="@style/separator_horizontal" />
-
- <TextView
- style="@style/separator_horizontal_headline"
- android:text="@string/init_mapsources" />
- </RelativeLayout>
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginBottom="5dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:autoLink="web"
- android:linksClickable="true"
- android:padding="3dip"
- android:text="@string/settings_info_offline_maps"
- android:textColor="?text_color"
- android:textColorLink="?text_color_link"
- android:textSize="14sp" />
-
- <Spinner
- android:id="@+id/mapsource"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:prompt="@string/init_mapsource_select" />
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginBottom="5dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:autoLink="web"
- android:linksClickable="true"
- android:padding="3dip"
- android:text="@string/init_map_directory_description"
- android:textColor="?text_color"
- android:textColorLink="?text_color_link"
- android:textSize="14sp" />
-
- <LinearLayout
- android:id="@+id/init_mapdir_group"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal" >
-
- <Button
- android:id="@+id/select_map_directory"
- style="@style/button_full"
- android:layout_width="wrap_content"
- android:text="@string/init_select_map_directory" />
-
- <EditText
- android:id="@+id/map_directory"
- style="@style/edittext_full"
- android:inputType="textNoSuggestions"
- android:lines="1"
- android:scrollHorizontally="true"
- android:singleLine="true" />
- </LinearLayout>
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:layout_marginBottom="5dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:gravity="left"
- android:padding="3dip"
- android:text="@string/init_rendertheme_folder"
- android:textColor="?text_color"
- android:textSize="14sp" />
-
- <LinearLayout
- android:id="@+id/init_themefilegroup"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal" >
-
- <Button
- android:id="@+id/select_themefolder"
- style="@style/button_full"
- android:layout_width="wrap_content"
- android:text="@string/init_select_themefolder" />
-
- <EditText
- android:id="@+id/themefolder"
- style="@style/edittext_full"
- android:inputType="textNoSuggestions"
- android:lines="1"
- android:scrollHorizontally="true"
- android:singleLine="true" />
- </LinearLayout>
-
- <!-- GPX -->
-
- <RelativeLayout style="@style/separator_horizontal_layout" >
-
- <View style="@style/separator_horizontal" />
-
- <TextView
- style="@style/separator_horizontal_headline"
- android:text="@string/init_gpx_exportdir" />
- </RelativeLayout>
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginBottom="5dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:autoLink="web"
- android:linksClickable="true"
- android:padding="3dip"
- android:text="@string/init_gpx_exportdir_description"
- android:textColor="?text_color"
- android:textColorLink="?text_color_link"
- android:textSize="14sp" />
-
- <LinearLayout
- android:id="@+id/init_gpx_export_group"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal" >
-
- <Button
- android:id="@+id/select_gpx_exportdir"
- style="@style/button_full"
- android:layout_width="wrap_content"
- android:text="@string/init_select_gpx_exportdir" />
-
- <EditText
- android:id="@+id/gpx_exportdir"
- style="@style/edittext_full"
- android:inputType="textNoSuggestions"
- android:lines="1"
- android:scrollHorizontally="true"
- android:singleLine="true" />
- </LinearLayout>
- <!-- ** -->
-
- <RelativeLayout style="@style/separator_horizontal_layout" >
-
- <View style="@style/separator_horizontal" />
-
- <TextView
- style="@style/separator_horizontal_headline"
- android:text="@string/init_gpx_importdir" />
- </RelativeLayout>
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginBottom="5dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:autoLink="web"
- android:linksClickable="true"
- android:padding="3dip"
- android:text="@string/init_gpx_importdir_description"
- android:textColor="?text_color"
- android:textColorLink="?text_color_link"
- android:textSize="14sp" />
-
- <LinearLayout
- android:id="@+id/init_gpx_import_group"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal" >
-
- <Button
- android:id="@+id/select_gpx_importdir"
- style="@style/button_full"
- android:layout_width="wrap_content"
- android:text="@string/init_select_gpx_importdir" />
-
- <EditText
- android:id="@+id/gpx_importdir"
- style="@style/edittext_full"
- android:inputType="textNoSuggestions"
- android:lines="1"
- android:scrollHorizontally="true"
- android:singleLine="true" />
- </LinearLayout>
- <!-- ** -->
-
- <RelativeLayout style="@style/separator_horizontal_layout" >
-
- <View style="@style/separator_horizontal" />
-
- <TextView
- style="@style/separator_horizontal_headline"
- android:text="@string/init_altitude" />
- </RelativeLayout>
-
- <EditText
- android:id="@+id/altitude"
- style="@style/edittext_full"
- android:inputType="numberSigned"
- android:lines="1"
- android:scrollHorizontally="true"
- android:singleLine="true" />
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginBottom="5dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:linksClickable="true"
- android:padding="3dip"
- android:text="@string/init_altitude_description"
- android:textColor="?text_color"
- android:textColorLink="?text_color_link"
- android:textSize="14sp" />
- <!-- ** -->
-
- <RelativeLayout style="@style/separator_horizontal_layout" >
-
- <View style="@style/separator_horizontal" />
-
- <TextView
- style="@style/separator_horizontal_headline"
- android:text="@string/init_default_navigation_tool" />
- </RelativeLayout>
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginBottom="5dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:linksClickable="true"
- android:padding="3dip"
- android:text="@string/init_default_navigation_tool_description"
- android:textColor="?text_color"
- android:textColorLink="?text_color_link"
- android:textSize="14sp" />
-
- <Spinner
- android:id="@+id/default_navigation_tool"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:prompt="@string/init_default_navigation_tool_select" />
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginBottom="5dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:linksClickable="true"
- android:padding="3dip"
- android:text="@string/init_default_navigation_tool_2_description"
- android:textColor="?text_color"
- android:textColorLink="?text_color_link"
- android:textSize="14sp" />
-
- <Spinner
- android:id="@+id/default_navigation_tool_2"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:prompt="@string/init_default_navigation_tool_select" />
- <!-- ** -->
-
- <RelativeLayout style="@style/separator_horizontal_layout" >
-
- <View style="@style/separator_horizontal" />
-
- <TextView
- style="@style/separator_horizontal_headline"
- android:text="@string/init_sendToCgeo" />
- </RelativeLayout>
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginBottom="5dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:linksClickable="true"
- android:padding="3dip"
- android:text="@string/init_sendToCgeo_name"
- android:textColor="?text_color"
- android:textColorLink="?text_color_link"
- android:textSize="14sp" />
-
- <EditText
- android:id="@+id/webDeviceName"
- style="@style/edittext_full"
- android:inputType="textNoSuggestions"
- android:lines="1"
- android:maxLength="15"
- android:scrollHorizontally="true"
- android:singleLine="true" />
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginBottom="5dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:autoLink="web"
- android:linksClickable="true"
- android:padding="3dip"
- android:text="@string/init_sendToCgeo_description"
- android:textColor="?text_color"
- android:textColorLink="?text_color_link"
- android:textSize="14sp" />
-
- <Button
- android:id="@+id/sendToCgeo_register"
- style="@style/button_full"
- android:text="@string/init_sendToCgeo_register" />
- <!-- ** -->
-
- <RelativeLayout style="@style/separator_horizontal_layout" >
-
- <View style="@style/separator_horizontal" />
-
- <TextView
- style="@style/separator_horizontal_headline"
- android:text="@string/init_backup" />
- </RelativeLayout>
-
- <TextView
- android:id="@+id/backup_last"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginBottom="5dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:linksClickable="true"
- android:padding="3dip"
- android:text="@null"
- android:textColor="?text_color"
- android:textColorLink="?text_color_link"
- android:textSize="14sp" />
-
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_margin="3dip"
- android:orientation="horizontal"
- android:padding="3dip" >
-
- <Button
- android:id="@+id/backup_backup"
- style="@style/button_full"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:onClick="backup"
- android:text="@string/init_backup_backup" />
-
- <Button
- android:id="@+id/backup_restore"
- style="@style/button_full"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:onClick="restore"
- android:text="@string/init_backup_restore" />
- </LinearLayout>
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginBottom="5dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:linksClickable="true"
- android:padding="3dip"
- android:text="@string/init_backup_note"
- android:textColor="?text_color"
- android:textColorLink="?text_color_link"
- android:textSize="14sp" />
- <!-- ** -->
-
- <RelativeLayout style="@style/separator_horizontal_layout" >
-
- <View style="@style/separator_horizontal" />
-
- <TextView
- style="@style/separator_horizontal_headline"
- android:text="@string/init_dbonsdcard_title" />
- </RelativeLayout>
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginBottom="5dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:linksClickable="true"
- android:padding="3dip"
- android:text="@string/init_dbonsdcard_note"
- android:textColor="?text_color"
- android:textColorLink="?text_color_link"
- android:textSize="14sp" />
-
- <CheckBox
- android:id="@+id/dbonsdcard"
- style="@style/checkbox_full"
- android:text="@string/init_dbonsdcard" />
- <!-- ** -->
-
- <RelativeLayout style="@style/separator_horizontal_layout" >
-
- <View style="@style/separator_horizontal" />
-
- <TextView
- style="@style/separator_horizontal_headline"
- android:text="@string/init_debug_title" />
- </RelativeLayout>
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginBottom="5dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:linksClickable="true"
- android:padding="3dip"
- android:text="@string/init_debug_note"
- android:textColor="?text_color"
- android:textColorLink="?text_color_link"
- android:textSize="14sp" />
-
- <CheckBox
- android:id="@+id/debug"
- style="@style/checkbox_full"
- android:text="@string/init_debug" />
- </LinearLayout>
- </ScrollView>
-
-</LinearLayout> \ No newline at end of file
diff --git a/main/res/menu/main_activity_options.xml b/main/res/menu/main_activity_options.xml
index 55a1eef..e06e948 100644
--- a/main/res/menu/main_activity_options.xml
+++ b/main/res/menu/main_activity_options.xml
@@ -2,11 +2,6 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
- android:id="@+id/menu_oldsettings"
- android:icon="@drawable/ic_menu_preferences"
- android:title="@string/menu_oldsettings">
- </item>
- <item
android:id="@+id/menu_settings"
android:icon="@drawable/ic_menu_preferences"
android:title="@string/menu_settings">
diff --git a/main/src/cgeo/geocaching/MainActivity.java b/main/src/cgeo/geocaching/MainActivity.java
index 24dd2c8..961217f 100644
--- a/main/src/cgeo/geocaching/MainActivity.java
+++ b/main/src/cgeo/geocaching/MainActivity.java
@@ -11,9 +11,8 @@ import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Units;
import cgeo.geocaching.maps.CGeoMap;
-import cgeo.geocaching.settings.NewSettingsActivity;
-import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.settings.SettingsActivity;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.ui.Formatter;
import cgeo.geocaching.utils.GeoDirHandler;
import cgeo.geocaching.utils.Log;
@@ -292,11 +291,8 @@ public class MainActivity extends AbstractActivity {
case R.id.menu_helpers:
startActivity(new Intent(this, UsefulAppsActivity.class));
return true;
- case R.id.menu_oldsettings:
- startActivity(new Intent(this, SettingsActivity.class));
- return true;
case R.id.menu_settings:
- startActivity(new Intent(this, NewSettingsActivity.class));
+ startActivity(new Intent(this, SettingsActivity.class));
return true;
case R.id.menu_history:
cgeocaches.startActivityHistory(this);
diff --git a/main/src/cgeo/geocaching/connector/gc/GCConnector.java b/main/src/cgeo/geocaching/connector/gc/GCConnector.java
index 354bc9e..44d6e8f 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCConnector.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCConnector.java
@@ -15,8 +15,8 @@ import cgeo.geocaching.connector.capability.ISearchByViewPort;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Viewport;
-import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.settings.SettingsActivity;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.CancellableHandler;
import cgeo.geocaching.utils.Log;
@@ -309,7 +309,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode,
// invoke settings activity to insert login details
if (status == StatusCode.NO_LOGIN_INFO_STORED && fromActivity != null) {
- SettingsActivity.startActivity(fromActivity);
+ SettingsActivity.startWithServicesPage(fromActivity);
}
}
return status == StatusCode.NO_ERROR;
diff --git a/main/src/cgeo/geocaching/settings/EditPasswordPreference.java b/main/src/cgeo/geocaching/settings/EditPasswordPreference.java
index c2fac6a..d89f128 100644
--- a/main/src/cgeo/geocaching/settings/EditPasswordPreference.java
+++ b/main/src/cgeo/geocaching/settings/EditPasswordPreference.java
@@ -9,7 +9,7 @@ import android.util.AttributeSet;
* <p>
* Use it exactly as an EditTextPreference
*
- * @see NewSettingsActivity - search for EditPasswordPreference
+ * @see SettingsActivity - search for EditPasswordPreference
* @author koem
*/
public class EditPasswordPreference extends EditTextPreference {
diff --git a/main/src/cgeo/geocaching/settings/LogSignaturePreference.java b/main/src/cgeo/geocaching/settings/LogSignaturePreference.java
index 2fdd5ac..d0c9739 100644
--- a/main/src/cgeo/geocaching/settings/LogSignaturePreference.java
+++ b/main/src/cgeo/geocaching/settings/LogSignaturePreference.java
@@ -11,7 +11,7 @@ import android.widget.EditText;
public class LogSignaturePreference extends DialogPreference {
- private NewSettingsActivity settingsActivity;
+ private SettingsActivity settingsActivity;
private EditText editText;
public LogSignaturePreference(Context context, AttributeSet attrs) {
@@ -30,7 +30,7 @@ public class LogSignaturePreference extends DialogPreference {
@Override
protected void onBindDialogView(View view) {
- settingsActivity = (NewSettingsActivity) this.getContext();
+ settingsActivity = (SettingsActivity) this.getContext();
editText = (EditText) view.findViewById(R.id.signature_dialog_text);
editText.setText(getPersistedString(""));
diff --git a/main/src/cgeo/geocaching/settings/NewSettingsActivity.java b/main/src/cgeo/geocaching/settings/NewSettingsActivity.java
deleted file mode 100644
index c80563b..0000000
--- a/main/src/cgeo/geocaching/settings/NewSettingsActivity.java
+++ /dev/null
@@ -1,524 +0,0 @@
-package cgeo.geocaching.settings;
-
-import cgeo.geocaching.Intents;
-import cgeo.geocaching.R;
-import cgeo.geocaching.SelectMapfileActivity;
-import cgeo.geocaching.cgData;
-import cgeo.geocaching.cgeoapplication;
-import cgeo.geocaching.activity.ActivityMixin;
-import cgeo.geocaching.apps.cache.navi.NavigationAppFactory;
-import cgeo.geocaching.apps.cache.navi.NavigationAppFactory.NavigationAppsEnum;
-import cgeo.geocaching.files.SimpleDirChooser;
-import cgeo.geocaching.maps.MapProviderFactory;
-import cgeo.geocaching.maps.interfaces.MapSource;
-import cgeo.geocaching.ui.Formatter;
-import cgeo.geocaching.utils.Log;
-import cgeo.geocaching.utils.LogTemplateProvider;
-import cgeo.geocaching.utils.LogTemplateProvider.LogTemplate;
-
-import org.apache.commons.lang3.StringUtils;
-import org.openintents.intents.FileManagerIntents;
-
-import android.app.ProgressDialog;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Environment;
-import android.preference.EditTextPreference;
-import android.preference.ListPreference;
-import android.preference.Preference;
-import android.preference.Preference.OnPreferenceChangeListener;
-import android.preference.Preference.OnPreferenceClickListener;
-import android.preference.PreferenceActivity;
-import android.preference.PreferenceManager;
-import android.preference.PreferenceScreen;
-import android.view.ContextMenu;
-import android.view.ContextMenu.ContextMenuInfo;
-import android.view.MenuItem;
-import android.view.MenuItem.OnMenuItemClickListener;
-import android.view.View;
-import android.widget.EditText;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * A {@link PreferenceActivity} that presents a set of application settings. On
- * handset devices, settings are presented as a single list. On tablets,
- * settings are split by category, with category headers shown to the left of
- * the list of settings.
- * <p>
- * See <a href="http://developer.android.com/design/patterns/settings.html"> Android Design: Settings</a> for design
- * guidelines and the <a href="http://developer.android.com/guide/topics/ui/settings.html">Settings API Guide</a> for
- * more information on developing a Settings UI.
- *
- * @author koem (initial author)
- */
-public class NewSettingsActivity extends PreferenceActivity {
-
- private static final String INTENT_GOTO = "GOTO";
- private static final int INTENT_GOTO_SERVICES = 1;
-
- private EditText signatureText;
-
- /**
- * Enum for dir choosers. This is how we can retrieve information about the
- * directory and preference key in onActivityResult() easily just by knowing
- * the result code.
- */
- private enum DirChooserType {
- GPX_IMPORT_DIR(1, R.string.pref_gpxImportDir,
- Environment.getExternalStorageDirectory().getPath() + "/gpx"),
- GPX_EXPORT_DIR(2, R.string.pref_gpxExportDir,
- Environment.getExternalStorageDirectory().getPath() + "/gpx"),
- THEMES_DIR(3, R.string.pref_renderthemepath, "");
- public final int requestCode;
- public final int keyId;
- public final String defaultValue;
-
- private DirChooserType(int requestCode, int keyId, String defaultValue) {
- this.requestCode = requestCode;
- this.keyId = keyId;
- this.defaultValue = defaultValue;
- }
- }
-
- private final static int DIR_CHOOSER_MAPS_DIRECTORY_REQUEST = 4;
-
- @SuppressWarnings("deprecation")
- @Override
- protected void onCreate(Bundle savedInstanceState) {
-
- if (Settings.isLightSkin()) {
- setTheme(R.style.settings_light);
- } else {
- setTheme(R.style.settings);
- }
-
- super.onCreate(savedInstanceState);
-
- addPreferencesFromResource(R.xml.preferences);
-
- initPreferences();
-
- Intent intent = getIntent();
- int gotoPage = intent.getIntExtra(INTENT_GOTO, 0);
- if (gotoPage == INTENT_GOTO_SERVICES) {
- // start with services screen
- PreferenceScreen main = (PreferenceScreen) findPreference(getKey(R.string.pref_fakekey_main_screen));
- int index = findPreference(getKey(R.string.pref_fakekey_services_screen)).getOrder();
- main.onItemClick(null, null, index, 0);
- }
- }
-
- @SuppressWarnings("deprecation")
- private void initPreferences() {
- initMapSourcePreference();
- initDirChoosers();
- initDefaultNavigationPreferences();
- initBackupButtons();
- initDbLocationPreference();
- initDebugPreference();
- initBasicMemberPreferences();
- initSend2CgeoPreferences();
-
- Map<String, ?> prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getAll();
- for (String key : prefs.keySet()) {
- Preference pref = findPreference(key);
- if (pref instanceof EditTextPreference || pref instanceof EditPasswordPreference) {
- bindSummaryToStringValue(pref);
- } else if (pref instanceof NumberPickerPreference) {
- bindSummaryToIntValue(pref);
- }
- }
- }
-
- private static String getKey(final int prefKeyId) {
- return cgeoapplication.getInstance().getString(prefKeyId);
- }
-
- // workaround, because OnContextItemSelected nor onMenuItemSelected is never called
- OnMenuItemClickListener TEMPLATE_CLICK = new OnMenuItemClickListener() {
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- LogTemplate template = LogTemplateProvider.getTemplate(item.getItemId());
- if (template != null) {
- insertSignatureTemplate(template);
- return true;
- }
- return false;
- }
- };
-
- // workaround, because OnContextItemSelected nor onMenuItemSelected is never called
- void setSignatureTextView(EditText view) {
- this.signatureText = view;
- }
-
- @Override
- public void onCreateContextMenu(ContextMenu menu, View v,
- ContextMenuInfo menuInfo) {
- // context menu for signature templates
- if (v.getId() == R.id.signature_templates) {
- menu.setHeaderTitle(R.string.init_signature_template_button);
- ArrayList<LogTemplate> templates = LogTemplateProvider.getTemplates();
- for (int i = 0; i < templates.size(); ++i) {
- menu.add(0, templates.get(i).getItemId(), 0, templates.get(i).getResourceId());
- menu.getItem(i).setOnMenuItemClickListener(TEMPLATE_CLICK);
- }
- }
- super.onCreateContextMenu(menu, v, menuInfo);
- }
-
- private void insertSignatureTemplate(final LogTemplate template) {
- String insertText = "[" + template.getTemplateString() + "]";
- ActivityMixin.insertAtPosition(signatureText, insertText, true);
- }
-
- /**
- * fill the choice list for map sources
- */
- @SuppressWarnings("deprecation")
- private void initMapSourcePreference() {
- ListPreference pref = (ListPreference) findPreference(getKey(R.string.pref_mapsource));
-
- List<MapSource> mapSources = MapProviderFactory.getMapSources();
- CharSequence[] entries = new CharSequence[mapSources.size()];
- CharSequence[] values = new CharSequence[mapSources.size()];
- for (int i = 0; i < mapSources.size(); ++i) {
- entries[i] = mapSources.get(i).getName();
- values[i] = String.valueOf(mapSources.get(i).getNumericalId());
- }
- pref.setEntries(entries);
- pref.setEntryValues(values);
- }
-
- /**
- * fill the choice list for default navigation tools
- */
- @SuppressWarnings("deprecation")
- private void initDefaultNavigationPreferences() {
-
- final List<NavigationAppsEnum> apps = NavigationAppFactory.getInstalledDefaultNavigationApps();
-
- CharSequence[] entries = new CharSequence[apps.size()];
- CharSequence[] values = new CharSequence[apps.size()];
- for (int i = 0; i < apps.size(); ++i) {
- entries[i] = apps.get(i).toString();
- values[i] = String.valueOf(apps.get(i).id);
- }
-
- ListPreference pref = (ListPreference) findPreference(getKey(R.string.pref_defaultNavigationTool));
- pref.setEntries(entries);
- pref.setEntryValues(values);
- pref = (ListPreference) findPreference(getKey(R.string.pref_defaultNavigationTool2));
- pref.setEntries(entries);
- pref.setEntryValues(values);
- }
-
- /**
- * fire up a dir chooser on click on the preference
- *
- * @see #onActivityResult() for processing of the selected directory
- *
- * @param key
- * key of the preference
- * @param defaultValue
- * default directory - in case the preference has never been
- * set yet
- */
- @SuppressWarnings("deprecation")
- private void initDirChoosers() {
- for (final DirChooserType dct : DirChooserType.values()) {
- final String dir = Settings.getString(dct.keyId, dct.defaultValue);
-
- findPreference(getKey(dct.keyId)).setOnPreferenceClickListener(
- new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- startDirChooser(dct, dir);
- return false;
- }
- });
- }
-
- findPreference(getKey(R.string.pref_mapDirectory)).setOnPreferenceClickListener(
- new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- Intent i = new Intent(NewSettingsActivity.this,
- SelectMapfileActivity.class);
- startActivityForResult(i, DIR_CHOOSER_MAPS_DIRECTORY_REQUEST);
- return false;
- }
- });
- }
-
- private void startDirChooser(DirChooserType dct, String startDirectory) {
- try {
- final Intent dirChooser = new Intent(FileManagerIntents.ACTION_PICK_DIRECTORY);
- if (StringUtils.isNotBlank(startDirectory)) {
- dirChooser.setData(Uri.fromFile(new File(startDirectory)));
- }
- dirChooser.putExtra(FileManagerIntents.EXTRA_TITLE,
- getString(R.string.simple_dir_chooser_title));
- dirChooser.putExtra(FileManagerIntents.EXTRA_BUTTON_TEXT,
- getString(android.R.string.ok));
- startActivityForResult(dirChooser, dct.requestCode);
- } catch (android.content.ActivityNotFoundException ex) {
- // OI file manager not available
- final Intent dirChooser = new Intent(this, SimpleDirChooser.class);
- dirChooser.putExtra(Intents.EXTRA_START_DIR, startDirectory);
- startActivityForResult(dirChooser, dct.requestCode);
- }
- }
-
- @SuppressWarnings("deprecation")
- private void setChosenDirectory(DirChooserType dct, Intent data) {
- final String directory = new File(data.getData().getPath()).getAbsolutePath();
- if (StringUtils.isNotBlank(directory)) {
- Preference p = findPreference(getKey(dct.keyId));
- if (p == null) {
- return;
- }
- Settings.putString(dct.keyId, directory);
- p.setSummary(directory);
- }
- }
-
- @SuppressWarnings("deprecation")
- public void initBackupButtons() {
- Preference backup = findPreference(getKey(R.string.pref_fakekey_preference_backup));
- backup.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(final Preference preference) {
- final Context context = preference.getContext();
- // avoid overwriting an existing backup with an empty database
- // (can happen directly after reinstalling the app)
- if (cgData.getAllCachesCount() == 0) {
- ActivityMixin.helpDialog(NewSettingsActivity.this,
- context.getString(R.string.init_backup),
- context.getString(R.string.init_backup_unnecessary));
- return false;
- }
-
- final ProgressDialog dialog = ProgressDialog.show(context,
- context.getString(R.string.init_backup),
- context.getString(R.string.init_backup_running), true, false);
- new Thread() {
- @Override
- public void run() {
- final String backupFileName = cgData.backupDatabase();
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- dialog.dismiss();
- ActivityMixin.helpDialog(NewSettingsActivity.this,
- context.getString(R.string.init_backup_backup),
- backupFileName != null
- ? context.getString(R.string.init_backup_success)
- + "\n" + backupFileName
- : context.getString(R.string.init_backup_failed));
- VALUE_CHANGE_LISTENER.onPreferenceChange(findPreference(
- getKey(R.string.pref_fakekey_preference_backup_info)), "");
- }
- });
- }
- }.start();
- return true;
- }
- });
-
- Preference restore = findPreference(getKey(R.string.pref_fakekey_preference_restore));
- restore.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(final Preference preference) {
- ((cgeoapplication) NewSettingsActivity.this.getApplication())
- .restoreDatabase(NewSettingsActivity.this);
- return true;
- }
- });
- }
-
- @SuppressWarnings("deprecation")
- private void initDbLocationPreference() {
- Preference p = findPreference(getKey(R.string.pref_dbonsdcard));
- p.setPersistent(false);
- p.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- boolean oldValue = Settings.isDbOnSDCard();
- ((cgeoapplication) NewSettingsActivity.this.getApplication())
- .moveDatabase(NewSettingsActivity.this);
- return oldValue != Settings.isDbOnSDCard();
- }
- });
- }
-
- @SuppressWarnings("deprecation")
- private void initDebugPreference() {
- Preference p = findPreference(getKey(R.string.pref_debug));
- p.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- Log.setDebug((Boolean) newValue);
- return true;
- }
- });
- }
-
- @SuppressWarnings("deprecation")
- private void initBasicMemberPreferences() {
- findPreference(getKey(R.string.pref_loaddirectionimg)).setEnabled(
- !Settings.isPremiumMember());
- findPreference(getKey(R.string.pref_showcaptcha)).setEnabled(
- !Settings.isPremiumMember());
- }
-
- private static void initSend2CgeoPreferences() {
- Settings.putString(R.string.pref_webDeviceName, Settings.getWebDeviceName());
- }
-
- public static void startWithServicesPage(Context fromActivity) {
- final Intent intent = new Intent(fromActivity, NewSettingsActivity.class);
- intent.putExtra(INTENT_GOTO, INTENT_GOTO_SERVICES);
- fromActivity.startActivity(intent);
- }
-
- @SuppressWarnings("deprecation")
- @Override
- protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (resultCode != RESULT_OK) {
- return;
- }
-
- for (DirChooserType dct : DirChooserType.values()) {
- if (requestCode == dct.requestCode) {
- setChosenDirectory(dct, data);
- return;
- }
- }
-
- switch (requestCode) {
- case DIR_CHOOSER_MAPS_DIRECTORY_REQUEST:
- if (data.hasExtra(Intents.EXTRA_MAP_FILE)) {
- final String mapFile = data.getStringExtra(Intents.EXTRA_MAP_FILE);
- Settings.setMapFile(mapFile);
- if (!Settings.isValidMapFile(Settings.getMapFile())) {
- ActivityMixin.showToast(this, R.string.warn_invalid_mapfile);
- }
- }
- initMapSourcePreference();
- findPreference(getKey(R.string.pref_mapDirectory)).setSummary(
- Settings.getMapFileDirectory());
- break;
- default:
- throw new IllegalArgumentException();
- }
- }
-
- /**
- * A preference value change listener that updates the preference's summary
- * to reflect its new value.
- */
- private static Preference.OnPreferenceChangeListener VALUE_CHANGE_LISTENER = new Preference.OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference preference, Object value) {
- String stringValue = value.toString();
-
- if (preference instanceof EditPasswordPreference) {
- if (StringUtils.isBlank((String) value)) {
- preference.setSummary("");
- } else {
- preference.setSummary("\u2022 \u2022 \u2022 \u2022 \u2022 \u2022 \u2022 \u2022 \u2022 \u2022");
- }
- } else if (preference instanceof ListPreference) {
- // For list preferences, look up the correct display value in
- // the preference's 'entries' list.
- ListPreference listPreference = (ListPreference) preference;
- int index = listPreference.findIndexOfValue(stringValue);
-
- // Set the summary to reflect the new value.
- preference.setSummary(
- index >= 0
- ? listPreference.getEntries()[index]
- : null);
- } else if (getKey(R.string.pref_fakekey_preference_backup_info).equals(preference.getKey())) {
- File lastBackupFile = cgData.getRestoreFile();
- String text;
- if (lastBackupFile != null) {
- text = preference.getContext().getString(R.string.init_backup_last) + " "
- + Formatter.formatTime(lastBackupFile.lastModified())
- + ", " + Formatter.formatDate(lastBackupFile.lastModified());
- } else {
- text = preference.getContext().getString(R.string.init_backup_last_no);
- }
- preference.setSummary(text);
- } else {
- // For all other preferences, set the summary to the value's
- // simple string representation.
- preference.setSummary(stringValue);
- }
- return true;
- }
- };
-
- /**
- * Binds a preference's summary to its value. More specifically, when the
- * preference's value is changed, its summary (line of text below the
- * preference title) is updated to reflect the value. The summary is also
- * immediately updated upon calling this method. The exact display format is
- * dependent on the type of preference.
- *
- * @see #VALUE_CHANGE_LISTENER
- */
- private static void bindSummaryToValue(Preference preference, Object value) {
- // Set the listener to watch for value changes.
- if (preference == null) {
- return;
- }
- preference.setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER);
-
- // Trigger the listener immediately with the preference's
- // current value.
- VALUE_CHANGE_LISTENER.onPreferenceChange(preference, value);
- }
-
- /**
- * auto-care for the summary of the preference of string type with this key
- *
- * @param key
- */
- private static void bindSummaryToStringValue(Preference pref) {
- if (pref == null) {
- return;
- }
-
- String value = PreferenceManager
- .getDefaultSharedPreferences(pref.getContext())
- .getString(pref.getKey(), "");
-
- bindSummaryToValue(pref, value);
- }
-
- /**
- * auto-care for the summary of the preference of int type with this key
- *
- * @param key
- */
- private static void bindSummaryToIntValue(Preference pref) {
- if (pref == null) {
- return;
- }
-
- int value = PreferenceManager
- .getDefaultSharedPreferences(pref.getContext())
- .getInt(pref.getKey(), 0);
-
- bindSummaryToValue(pref, value);
- }
-}
diff --git a/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java b/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java
index 70c2c44..a019c4a 100644
--- a/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java
+++ b/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java
@@ -22,7 +22,7 @@ import android.view.ViewGroup;
public class RegisterSend2CgeoPreference extends Preference {
ProgressDialog progressDialog;
- NewSettingsActivity activity;
+ SettingsActivity activity;
public RegisterSend2CgeoPreference(Context context) {
super(context);
@@ -67,7 +67,7 @@ public class RegisterSend2CgeoPreference extends Preference {
@Override
protected View onCreateView(ViewGroup parent) {
- activity = (NewSettingsActivity) getContext();
+ activity = (SettingsActivity) getContext();
setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
diff --git a/main/src/cgeo/geocaching/settings/Settings.java b/main/src/cgeo/geocaching/settings/Settings.java
index 2279780..bb6a6e7 100644
--- a/main/src/cgeo/geocaching/settings/Settings.java
+++ b/main/src/cgeo/geocaching/settings/Settings.java
@@ -285,31 +285,10 @@ public final class Settings {
return username != null ? username : getString(R.string.pref_username, null);
}
- // TODO: remove with SettingsActivity
- public static boolean setLogin(final String username, final String password) {
- Settings.username = username;
- Settings.password = password;
- if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) {
- // erase username and password
- boolean a = remove(R.string.pref_username);
- boolean b = remove(R.string.pref_password);
- return a && b;
- }
- // save username and password
- boolean a = putString(R.string.pref_username, username);
- boolean b = putString(R.string.pref_password, password);
- return a && b;
- }
-
public static boolean isGCConnectorActive() {
return getBoolean(R.string.pref_connectorGCActive, true);
}
- // TODO: remove with SettingsActivity
- public static boolean setGCConnectorActive(final boolean isActive) {
- return putBoolean(R.string.pref_connectorGCActive, isActive);
- }
-
public static boolean isPremiumMember() {
// Basic Member, Premium Member, ???
String memberStatus = Settings.getMemberStatus();
@@ -375,16 +354,6 @@ public final class Settings {
return !StringUtils.isBlank(preUsername) && !StringUtils.isBlank(prePassword);
}
- // TODO: remove with SettingsActivity
- public static boolean setGCvoteLogin(final String password) {
- if (StringUtils.isBlank(password)) {
- // erase password
- return remove(R.string.pref_pass_vote);
- }
- // save password
- return putString(R.string.pref_pass_vote, password);
- }
-
public static ImmutablePair<String, String> getGCvoteLogin() {
final String username = getString(R.string.pref_username, null);
final String password = getString(R.string.pref_pass_vote, null);
@@ -396,16 +365,6 @@ public final class Settings {
return new ImmutablePair<String, String>(username, password);
}
- // TODO: remove with SettingsActivity
- public static boolean setSignature(final String signature) {
- if (StringUtils.isBlank(signature)) {
- // erase signature
- return remove(R.string.pref_signature);
- }
- // save signature
- return putString(R.string.pref_signature, signature);
- }
-
public static String getSignature() {
return getString(R.string.pref_signature, null);
}
@@ -509,20 +468,10 @@ public final class Settings {
return getBoolean(R.string.pref_log_offline, false);
}
- // TODO: remove with SettingsActivity
- static void setChooseList(final boolean choose) {
- putBoolean(R.string.pref_choose_list, choose);
- }
-
public static boolean getChooseList() {
return getBoolean(R.string.pref_choose_list, false);
}
- // TODO: remove with SettingsActivity
- static void setLoadDirImg(final boolean value) {
- putBoolean(R.string.pref_loaddirectionimg, value);
- }
-
public static boolean getLoadDirImg() {
return !isPremiumMember() && getBoolean(R.string.pref_loaddirectionimg, true);
}
@@ -543,11 +492,6 @@ public final class Settings {
return getBoolean(R.string.pref_excludemine, false);
}
- // TODO: remove with SettingsActivity
- public static void setExcludeMine(final boolean exclude) {
- putBoolean(R.string.pref_excludemine, exclude);
- }
-
public static void setUseEnglish(final boolean english) {
putBoolean(R.string.pref_useenglish, english);
setLanguage(english);
@@ -561,83 +505,38 @@ public final class Settings {
return getBoolean(R.string.pref_showaddress, true);
}
- // TODO: remove with SettingsActivity
- public static void setShowAddress(final boolean showAddress) {
- putBoolean(R.string.pref_showaddress, showAddress);
- }
-
public static boolean isShowCaptcha() {
return !isPremiumMember() && getBoolean(R.string.pref_showcaptcha, false);
}
- // TODO: remove with SettingsActivity
- public static void setShowCaptcha(final boolean showCaptcha) {
- putBoolean(R.string.pref_showcaptcha, showCaptcha);
- }
-
public static boolean isExcludeDisabledCaches() {
return getBoolean(R.string.pref_excludedisabled, false);
}
- // TODO: remove with SettingsActivity
- public static void setExcludeDisabledCaches(final boolean exclude) {
- putBoolean(R.string.pref_excludedisabled, exclude);
- }
-
public static boolean isStoreOfflineMaps() {
return getBoolean(R.string.pref_offlinemaps, true);
}
- // TODO: remove with SettingsActivity
- public static void setStoreOfflineMaps(final boolean offlineMaps) {
- putBoolean(R.string.pref_offlinemaps, offlineMaps);
- }
-
public static boolean isStoreOfflineWpMaps() {
return getBoolean(R.string.pref_offlinewpmaps, false);
}
- // TODO: remove with SettingsActivity
- public static void setStoreOfflineWpMaps(final boolean offlineMaps) {
- putBoolean(R.string.pref_offlinewpmaps, offlineMaps);
- }
-
public static boolean isStoreLogImages() {
return getBoolean(R.string.pref_logimages, false);
}
- // TODO: remove with SettingsActivity
- public static void setStoreLogImages(final boolean storeLogImages) {
- putBoolean(R.string.pref_logimages, storeLogImages);
- }
-
public static boolean isAutoLoadDescription() {
return getBoolean(R.string.pref_autoloaddesc, true);
}
- // TODO: remove with SettingsActivity
- public static void setAutoLoadDesc(final boolean autoLoad) {
- putBoolean(R.string.pref_autoloaddesc, autoLoad);
- }
-
public static boolean isRatingWanted() {
return getBoolean(R.string.pref_ratingwanted, true);
}
- // TODO: remove with SettingsActivity
- public static void setRatingWanted(final boolean ratingWanted) {
- putBoolean(R.string.pref_ratingwanted, ratingWanted);
- }
-
public static boolean isElevationWanted() {
return getBoolean(R.string.pref_elevationwanted, false);
}
- // TODO: remove with SettingsActivity
- public static void setElevationWanted(final boolean elevationWanted) {
- putBoolean(R.string.pref_elevationwanted, elevationWanted);
- }
-
public static boolean isFriendLogsWanted() {
if (!isLogin()) {
// don't show a friends log if the user is anonymous
@@ -646,47 +545,22 @@ public final class Settings {
return getBoolean(R.string.pref_friendlogswanted, true);
}
- // TODO: remove with SettingsActivity
- public static void setFriendLogsWanted(final boolean friendLogsWanted) {
- putBoolean(R.string.pref_friendlogswanted, friendLogsWanted);
- }
-
public static boolean isLiveList() {
return getBoolean(R.string.pref_livelist, true);
}
- // TODO: remove with SettingsActivity
- public static void setLiveList(final boolean liveList) {
- putBoolean(R.string.pref_livelist, liveList);
- }
-
public static boolean isTrackableAutoVisit() {
return getBoolean(R.string.pref_trackautovisit, false);
}
- // TODO: remove with SettingsActivity
- public static void setTrackableAutoVisit(final boolean autoVisit) {
- putBoolean(R.string.pref_trackautovisit, autoVisit);
- }
-
public static boolean isAutoInsertSignature() {
return getBoolean(R.string.pref_sigautoinsert, false);
}
- // TODO: remove with SettingsActivity
- public static void setAutoInsertSignature(final boolean autoInsert) {
- putBoolean(R.string.pref_sigautoinsert, autoInsert);
- }
-
public static boolean isUseImperialUnits() {
return getBoolean(R.string.pref_units, false);
}
- // TODO: remove with SettingsActivity
- public static void setUseImperialUnits(final boolean imperial) {
- putBoolean(R.string.pref_units, imperial);
- }
-
public static boolean isLiveMap() {
return getBoolean(R.string.pref_maplive, true);
}
@@ -817,11 +691,6 @@ public final class Settings {
return getBoolean(R.string.pref_skin, false);
}
- // TODO: remove with SettingsActivity
- public static void setLightSkin(final boolean lightSkin) {
- putBoolean(R.string.pref_skin, lightSkin);
- }
-
public static String getKeyConsumerPublic() {
return keyConsumerPublic;
}
@@ -834,11 +703,6 @@ public final class Settings {
return getInt(R.string.pref_altcorrection, 0);
}
- // TODO: remove with SettingsActivity
- public static boolean setAltitudeCorrection(final int altitude) {
- return putInt(R.string.pref_altcorrection, altitude);
- }
-
public static String getWebDeviceCode() {
return getString(R.string.pref_webDeviceCode, null);
}
@@ -862,7 +726,6 @@ public final class Settings {
return getInt(R.string.pref_gcshowwaypointsthreshold, SHOW_WP_THRESHOLD_DEFAULT);
}
- // TODO: remove with SettingsActivity
public static void setShowWaypointsThreshold(final int threshold) {
putInt(R.string.pref_gcshowwaypointsthreshold, threshold);
}
@@ -924,11 +787,6 @@ public final class Settings {
return getBoolean(R.string.pref_opendetailslastpage, false);
}
- // TODO: remove with SettingsActivity
- public static void setOpenLastDetailsPage(final boolean openLastPage) {
- putBoolean(R.string.pref_opendetailslastpage, openLastPage);
- }
-
public static int getLastDetailsPage() {
return getInt(R.string.pref_lastdetailspage, 1);
}
@@ -971,12 +829,6 @@ public final class Settings {
return Log.isDebug();
}
- // TODO: remove with SettingsActivity
- public static void setDebug(final boolean debug) {
- putBoolean(R.string.pref_debug, debug);
- Log.setDebug(debug);
- }
-
public static boolean getHideLiveMapHint() {
return getBoolean(R.string.pref_hidelivemaphint, false);
}
@@ -1006,21 +858,11 @@ public final class Settings {
Environment.getExternalStorageDirectory().getPath() + "/gpx");
}
- // TODO: remove with SettingsActivity
- public static void setGpxExportDir(final String gpxExportDir) {
- putString(R.string.pref_gpxExportDir, gpxExportDir);
- }
-
public static String getGpxImportDir() {
return getString(R.string.pref_gpxImportDir,
Environment.getExternalStorageDirectory().getPath() + "/gpx");
}
- // TODO: remove with SettingsActivity
- public static void setGpxImportDir(final String gpxImportDir) {
- putString(R.string.pref_gpxImportDir, gpxImportDir);
- }
-
public static boolean getShareAfterExport() {
return getBoolean(R.string.pref_shareafterexport, true);
}
@@ -1041,11 +883,6 @@ public final class Settings {
return getString(R.string.pref_renderthemepath, "");
}
- // TODO: remove with SettingsActivity
- public static boolean setCustomRenderThemeBaseFolder(final String folder) {
- return putString(R.string.pref_renderthemepath, folder);
- }
-
public static String getCustomRenderThemeFilePath() {
return getString(R.string.pref_renderthemefile, "");
}
@@ -1087,20 +924,10 @@ public final class Settings {
return getBoolean(R.string.pref_plainLogs, false);
}
- // TODO: remove with SettingsActivity
- public static void setPlainLogs(final boolean plainLogs) {
- putBoolean(R.string.pref_plainLogs, plainLogs);
- }
-
public static boolean getUseNativeUa() {
return getBoolean(R.string.pref_nativeUa, false);
}
- // TODO: remove with SettingsActivity
- public static void setUseNativeUa(final boolean useNativeUa) {
- putBoolean(R.string.pref_nativeUa, useNativeUa);
- }
-
public static String getCacheTwitterMessage() {
// TODO make customizable from UI
return cacheTwitterMessage;
@@ -1118,4 +945,41 @@ public final class Settings {
public static void setLogImageScale(final int scale) {
putInt(R.string.pref_logImageScale, scale);
}
+
+ // Only for tests!
+ static void setExcludeDisabledCaches(final boolean exclude) {
+ putBoolean(R.string.pref_excludedisabled, exclude);
+ }
+
+ static void setExcludeMine(final boolean exclude) {
+ putBoolean(R.string.pref_excludemine, exclude);
+ }
+
+ static boolean setLogin(final String username, final String password) {
+ Settings.username = username;
+ Settings.password = password;
+ if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) {
+ // erase username and password
+ boolean a = remove(R.string.pref_username);
+ boolean b = remove(R.string.pref_password);
+ return a && b;
+ }
+ // save username and password
+ boolean a = putString(R.string.pref_username, username);
+ boolean b = putString(R.string.pref_password, password);
+ return a && b;
+ }
+
+ static void setStoreOfflineMaps(final boolean offlineMaps) {
+ putBoolean(R.string.pref_offlinemaps, offlineMaps);
+ }
+
+ static void setStoreOfflineWpMaps(final boolean offlineWpMaps) {
+ putBoolean(R.string.pref_offlinewpmaps, offlineWpMaps);
+ }
+
+ static void setUseImperialUnits(final boolean imperial) {
+ putBoolean(R.string.pref_units, imperial);
+ }
+
}
diff --git a/main/src/cgeo/geocaching/settings/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java
index e8ce1ff..7c78d08 100644
--- a/main/src/cgeo/geocaching/settings/SettingsActivity.java
+++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java
@@ -4,1070 +4,521 @@ import cgeo.geocaching.Intents;
import cgeo.geocaching.R;
import cgeo.geocaching.SelectMapfileActivity;
import cgeo.geocaching.cgData;
-import cgeo.geocaching.activity.AbstractActivity;
+import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.apps.cache.navi.NavigationAppFactory;
import cgeo.geocaching.apps.cache.navi.NavigationAppFactory.NavigationAppsEnum;
-import cgeo.geocaching.compatibility.Compatibility;
-import cgeo.geocaching.connector.gc.Login;
-import cgeo.geocaching.connector.oc.OCAuthorizationActivity;
-import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.files.SimpleDirChooser;
import cgeo.geocaching.maps.MapProviderFactory;
import cgeo.geocaching.maps.interfaces.MapSource;
-import cgeo.geocaching.network.Cookies;
-import cgeo.geocaching.network.Network;
-import cgeo.geocaching.network.Parameters;
-import cgeo.geocaching.twitter.TwitterAuthorizationActivity;
import cgeo.geocaching.ui.Formatter;
import cgeo.geocaching.utils.Log;
import cgeo.geocaching.utils.LogTemplateProvider;
import cgeo.geocaching.utils.LogTemplateProvider.LogTemplate;
-import cgeo.geocaching.utils.RunnableWithArgument;
-
-import ch.boye.httpclientandroidlib.HttpResponse;
import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.tuple.ImmutablePair;
import org.openintents.intents.FileManagerIntents;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
-import android.content.res.Configuration;
-import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
+import android.os.Environment;
+import android.preference.EditTextPreference;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.Preference.OnPreferenceClickListener;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceManager;
+import android.preference.PreferenceScreen;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
-import android.view.Menu;
import android.view.MenuItem;
+import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemSelectedListener;
-import android.widget.ArrayAdapter;
-import android.widget.Button;
-import android.widget.CheckBox;
import android.widget.EditText;
-import android.widget.Spinner;
-import android.widget.TextView;
import java.io.File;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.List;
+import java.util.Map;
+
+/**
+ * A {@link PreferenceActivity} that presents a set of application settings. On
+ * handset devices, settings are presented as a single list. On tablets,
+ * settings are split by category, with category headers shown to the left of
+ * the list of settings.
+ * <p>
+ * See <a href="http://developer.android.com/design/patterns/settings.html"> Android Design: Settings</a> for design
+ * guidelines and the <a href="http://developer.android.com/guide/topics/ui/settings.html">Settings API Guide</a> for
+ * more information on developing a Settings UI.
+ *
+ * @author koem (initial author)
+ */
+public class SettingsActivity extends PreferenceActivity {
+
+ private static final String INTENT_GOTO = "GOTO";
+ private static final int INTENT_GOTO_SERVICES = 1;
+
+ private EditText signatureText;
-public class SettingsActivity extends AbstractActivity {
-
- private final static int SELECT_MAPFILE_REQUEST = 1;
- private final static int SELECT_GPX_EXPORT_REQUEST = 2;
- private final static int SELECT_GPX_IMPORT_REQUEST = 3;
- private final static int SELECT_THEMEFOLDER_REQUEST = 4;
-
- private ProgressDialog loginDialog = null;
- private ProgressDialog webDialog = null;
- private boolean enableTemplatesMenu = false;
- private Handler logInHandler = new Handler() {
-
- @Override
- public void handleMessage(Message msg) {
- try {
- if (loginDialog != null && loginDialog.isShowing()) {
- loginDialog.dismiss();
- }
-
- if (msg.obj == null || (msg.obj instanceof Drawable)) {
- helpDialog(res.getString(R.string.init_login_popup), res.getString(R.string.init_login_popup_ok),
- (Drawable) msg.obj);
- } else {
- helpDialog(res.getString(R.string.init_login_popup),
- res.getString(R.string.init_login_popup_failed_reason) + " " +
- ((StatusCode) msg.obj).getErrorString(res) + ".");
- }
- } catch (Exception e) {
- showToast(res.getString(R.string.err_login_failed));
-
- Log.e("SettingsActivity.logInHandler", e);
- }
-
- if (loginDialog != null && loginDialog.isShowing()) {
- loginDialog.dismiss();
- }
-
- init();
+ /**
+ * Enum for dir choosers. This is how we can retrieve information about the
+ * directory and preference key in onActivityResult() easily just by knowing
+ * the result code.
+ */
+ private enum DirChooserType {
+ GPX_IMPORT_DIR(1, R.string.pref_gpxImportDir,
+ Environment.getExternalStorageDirectory().getPath() + "/gpx"),
+ GPX_EXPORT_DIR(2, R.string.pref_gpxExportDir,
+ Environment.getExternalStorageDirectory().getPath() + "/gpx"),
+ THEMES_DIR(3, R.string.pref_renderthemepath, "");
+ public final int requestCode;
+ public final int keyId;
+ public final String defaultValue;
+
+ private DirChooserType(int requestCode, int keyId, String defaultValue) {
+ this.requestCode = requestCode;
+ this.keyId = keyId;
+ this.defaultValue = defaultValue;
}
- };
-
- private Handler webAuthHandler = new Handler() {
-
- @Override
- public void handleMessage(Message msg) {
- try {
- if (webDialog != null && webDialog.isShowing()) {
- webDialog.dismiss();
- }
-
- if (msg.what > 0) {
- helpDialog(res.getString(R.string.init_sendToCgeo), res.getString(R.string.init_sendToCgeo_register_ok).replace("####", String.valueOf(msg.what)));
- } else {
- helpDialog(res.getString(R.string.init_sendToCgeo), res.getString(R.string.init_sendToCgeo_register_fail));
- }
- } catch (Exception e) {
- showToast(res.getString(R.string.init_sendToCgeo_register_fail));
-
- Log.e("SettingsActivity.webHandler", e);
- }
-
- if (webDialog != null && webDialog.isShowing()) {
- webDialog.dismiss();
- }
+ }
- init();
- }
- };
+ private final static int DIR_CHOOSER_MAPS_DIRECTORY_REQUEST = 4;
+ @SuppressWarnings("deprecation")
@Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState, R.layout.settings_activity);
+ protected void onCreate(Bundle savedInstanceState) {
- init();
- }
+ if (Settings.isLightSkin()) {
+ setTheme(R.style.settings_light);
+ } else {
+ setTheme(R.style.settings);
+ }
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
+ super.onCreate(savedInstanceState);
- init();
- }
+ addPreferencesFromResource(R.xml.preferences);
- @Override
- public void onPause() {
- saveValues();
- super.onPause();
- }
+ initPreferences();
- @Override
- public void onStop() {
- saveValues();
- Compatibility.dataChanged(getPackageName());
- super.onStop();
+ Intent intent = getIntent();
+ int gotoPage = intent.getIntExtra(INTENT_GOTO, 0);
+ if (gotoPage == INTENT_GOTO_SERVICES) {
+ // start with services screen
+ PreferenceScreen main = (PreferenceScreen) findPreference(getKey(R.string.pref_fakekey_main_screen));
+ int index = findPreference(getKey(R.string.pref_fakekey_services_screen)).getOrder();
+ main.onItemClick(null, null, index, 0);
+ }
}
- @Override
- public void onDestroy() {
- saveValues();
-
- super.onDestroy();
+ @SuppressWarnings("deprecation")
+ private void initPreferences() {
+ initMapSourcePreference();
+ initDirChoosers();
+ initDefaultNavigationPreferences();
+ initBackupButtons();
+ initDbLocationPreference();
+ initDebugPreference();
+ initBasicMemberPreferences();
+ initSend2CgeoPreferences();
+
+ Map<String, ?> prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getAll();
+ for (String key : prefs.keySet()) {
+ Preference pref = findPreference(key);
+ if (pref instanceof EditTextPreference || pref instanceof EditPasswordPreference) {
+ bindSummaryToStringValue(pref);
+ } else if (pref instanceof NumberPickerPreference) {
+ bindSummaryToIntValue(pref);
+ }
+ }
}
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.settings_activity_options, menu);
- return true;
+ private static String getKey(final int prefKeyId) {
+ return cgeoapplication.getInstance().getString(prefKeyId);
}
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getItemId() == R.id.menu_clear) {
- ((EditText) findViewById(R.id.username)).setText("");
- ((EditText) findViewById(R.id.password)).setText("");
- ((EditText) findViewById(R.id.passvote)).setText("");
-
- if (saveValues()) {
- showToast(res.getString(R.string.init_cleared));
- } else {
- showToast(res.getString(R.string.err_init_cleared));
+ // workaround, because OnContextItemSelected nor onMenuItemSelected is never called
+ OnMenuItemClickListener TEMPLATE_CLICK = new OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ LogTemplate template = LogTemplateProvider.getTemplate(item.getItemId());
+ if (template != null) {
+ insertSignatureTemplate(template);
+ return true;
}
-
- finish();
+ return false;
}
+ };
- return false;
+ // workaround, because OnContextItemSelected nor onMenuItemSelected is never called
+ void setSignatureTextView(EditText view) {
+ this.signatureText = view;
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
- if (enableTemplatesMenu) {
+ // context menu for signature templates
+ if (v.getId() == R.id.signature_templates) {
menu.setHeaderTitle(R.string.init_signature_template_button);
- for (LogTemplate template : LogTemplateProvider.getTemplates()) {
- menu.add(0, template.getItemId(), 0, template.getResourceId());
+ ArrayList<LogTemplate> templates = LogTemplateProvider.getTemplates();
+ for (int i = 0; i < templates.size(); ++i) {
+ menu.add(0, templates.get(i).getItemId(), 0, templates.get(i).getResourceId());
+ menu.getItem(i).setOnMenuItemClickListener(TEMPLATE_CLICK);
}
}
+ super.onCreateContextMenu(menu, v, menuInfo);
}
- @Override
- public boolean onContextItemSelected(MenuItem item) {
- LogTemplate template = LogTemplateProvider.getTemplate(item.getItemId());
- if (template != null) {
- return insertSignatureTemplate(template);
- }
- return super.onContextItemSelected(item);
- }
-
- private boolean insertSignatureTemplate(final LogTemplate template) {
- EditText sig = (EditText) findViewById(R.id.signature);
+ private void insertSignatureTemplate(final LogTemplate template) {
String insertText = "[" + template.getTemplateString() + "]";
- ActivityMixin.insertAtPosition(sig, insertText, true);
- return true;
+ ActivityMixin.insertAtPosition(signatureText, insertText, true);
}
- public void init() {
-
- // geocaching.com settings
- final CheckBox gcCheck = (CheckBox) findViewById(R.id.gc_option);
- gcCheck.setChecked(Settings.isGCConnectorActive());
- gcCheck.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setGCConnectorActive(gcCheck.isChecked());
- }
- });
- final ImmutablePair<String, String> login = Settings.getGcLogin();
- if (login != null) {
- ((EditText) findViewById(R.id.username)).setText(login.left);
- ((EditText) findViewById(R.id.password)).setText(login.right);
+ /**
+ * fill the choice list for map sources
+ */
+ @SuppressWarnings("deprecation")
+ private void initMapSourcePreference() {
+ ListPreference pref = (ListPreference) findPreference(getKey(R.string.pref_mapsource));
+
+ List<MapSource> mapSources = MapProviderFactory.getMapSources();
+ CharSequence[] entries = new CharSequence[mapSources.size()];
+ CharSequence[] values = new CharSequence[mapSources.size()];
+ for (int i = 0; i < mapSources.size(); ++i) {
+ entries[i] = mapSources.get(i).getName();
+ values[i] = String.valueOf(mapSources.get(i).getNumericalId());
}
+ pref.setEntries(entries);
+ pref.setEntryValues(values);
+ }
- Button logMeIn = (Button) findViewById(R.id.log_me_in);
- logMeIn.setOnClickListener(new LoginListener());
-
- TextView legalNote = (TextView) findViewById(R.id.legal_note);
- legalNote.setClickable(true);
- legalNote.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View arg0) {
- startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.geocaching.com/about/termsofuse.aspx")));
- }
- });
-
- // opencaching.de settings
- final CheckBox ocCheck = (CheckBox) findViewById(R.id.oc_option);
- ocCheck.setChecked(Settings.isOCConnectorActive());
- ocCheck.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setOCConnectorActive(ocCheck.isChecked());
- }
- });
+ /**
+ * fill the choice list for default navigation tools
+ */
+ @SuppressWarnings("deprecation")
+ private void initDefaultNavigationPreferences() {
- Button checkOCUser = (Button) findViewById(R.id.register_oc_de);
- checkOCUser.setOnClickListener(new OCDEAuthorizeCgeoListener());
+ final List<NavigationAppsEnum> apps = NavigationAppFactory.getInstalledDefaultNavigationApps();
- // gcvote settings
- final ImmutablePair<String, String> gcvoteLogin = Settings.getGCvoteLogin();
- if (null != gcvoteLogin && null != gcvoteLogin.right) {
- ((EditText) findViewById(R.id.passvote)).setText(gcvoteLogin.right);
+ CharSequence[] entries = new CharSequence[apps.size()];
+ CharSequence[] values = new CharSequence[apps.size()];
+ for (int i = 0; i < apps.size(); ++i) {
+ entries[i] = apps.get(i).toString();
+ values[i] = String.valueOf(apps.get(i).id);
}
- // Twitter settings
- Button authorizeTwitter = (Button) findViewById(R.id.authorize_twitter);
- authorizeTwitter.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View arg0) {
- Intent authIntent = new Intent(SettingsActivity.this, TwitterAuthorizationActivity.class);
- startActivity(authIntent);
- }
- });
-
- final CheckBox twitterButton = (CheckBox) findViewById(R.id.twitter_option);
- twitterButton.setChecked(Settings.isUseTwitter() && Settings.isTwitterLoginValid());
- twitterButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setUseTwitter(twitterButton.isChecked());
- if (Settings.isUseTwitter() && !Settings.isTwitterLoginValid()) {
- Intent authIntent = new Intent(SettingsActivity.this, TwitterAuthorizationActivity.class);
- startActivity(authIntent);
- }
-
- twitterButton.setChecked(Settings.isUseTwitter());
- }
- });
+ ListPreference pref = (ListPreference) findPreference(getKey(R.string.pref_defaultNavigationTool));
+ pref.setEntries(entries);
+ pref.setEntryValues(values);
+ pref = (ListPreference) findPreference(getKey(R.string.pref_defaultNavigationTool2));
+ pref.setEntries(entries);
+ pref.setEntryValues(values);
+ }
- // Signature settings
- EditText sigEdit = (EditText) findViewById(R.id.signature);
- if (sigEdit.getText().length() == 0) {
- sigEdit.setText(Settings.getSignature());
+ /**
+ * fire up a dir chooser on click on the preference
+ *
+ * @see #onActivityResult() for processing of the selected directory
+ *
+ * @param key
+ * key of the preference
+ * @param defaultValue
+ * default directory - in case the preference has never been
+ * set yet
+ */
+ @SuppressWarnings("deprecation")
+ private void initDirChoosers() {
+ for (final DirChooserType dct : DirChooserType.values()) {
+ final String dir = Settings.getString(dct.keyId, dct.defaultValue);
+
+ findPreference(getKey(dct.keyId)).setOnPreferenceClickListener(
+ new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ startDirChooser(dct, dir);
+ return false;
+ }
+ });
}
- Button sigBtn = (Button) findViewById(R.id.signature_help);
- sigBtn.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- helpDialog(res.getString(R.string.init_signature_help_title), res.getString(R.string.init_signature_help_text));
- }
- });
- Button templates = (Button) findViewById(R.id.signature_template);
- registerForContextMenu(templates);
- templates.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- enableTemplatesMenu = true;
- openContextMenu(v);
- enableTemplatesMenu = false;
- }
- });
- final CheckBox autoinsertButton = (CheckBox) findViewById(R.id.sigautoinsert);
- autoinsertButton.setChecked(Settings.isAutoInsertSignature());
- autoinsertButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setAutoInsertSignature(autoinsertButton.isChecked());
- }
- });
-
- // Cache details
- final CheckBox autoloadButton = (CheckBox) findViewById(R.id.autoload);
- autoloadButton.setChecked(Settings.isAutoLoadDescription());
- autoloadButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setAutoLoadDesc(autoloadButton.isChecked());
- }
- });
-
- final CheckBox ratingWantedButton = (CheckBox) findViewById(R.id.ratingwanted);
- ratingWantedButton.setChecked(Settings.isRatingWanted());
- ratingWantedButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setRatingWanted(ratingWantedButton.isChecked());
- }
- });
-
- final CheckBox elevationWantedButton = (CheckBox) findViewById(R.id.elevationwanted);
- elevationWantedButton.setChecked(Settings.isElevationWanted());
- elevationWantedButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setElevationWanted(elevationWantedButton.isChecked());
- }
- });
-
- final CheckBox friendLogsWantedButton = (CheckBox) findViewById(R.id.friendlogswanted);
- friendLogsWantedButton.setChecked(Settings.isFriendLogsWanted());
- friendLogsWantedButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setFriendLogsWanted(friendLogsWantedButton.isChecked());
- }
- });
-
- final CheckBox openLastDetailsPageButton = (CheckBox) findViewById(R.id.openlastdetailspage);
- openLastDetailsPageButton.setChecked(Settings.isOpenLastDetailsPage());
- openLastDetailsPageButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setOpenLastDetailsPage(openLastDetailsPageButton.isChecked());
- }
- });
-
- // Other settings
- final CheckBox skinButton = (CheckBox) findViewById(R.id.skin);
- skinButton.setChecked(Settings.isLightSkin());
- skinButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setLightSkin(skinButton.isChecked());
- }
- });
-
- final CheckBox addressButton = (CheckBox) findViewById(R.id.address);
- addressButton.setChecked(Settings.isShowAddress());
- addressButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setShowAddress(addressButton.isChecked());
- }
- });
-
- final CheckBox captchaButton = (CheckBox) findViewById(R.id.captcha);
- captchaButton.setEnabled(!Settings.isPremiumMember());
- captchaButton.setChecked(Settings.isShowCaptcha());
- captchaButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setShowCaptcha(captchaButton.isChecked());
- }
- });
-
- final CheckBox dirImgButton = (CheckBox) findViewById(R.id.loaddirectionimg);
- dirImgButton.setEnabled(!Settings.isPremiumMember());
- dirImgButton.setChecked(Settings.getLoadDirImg());
- dirImgButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setLoadDirImg(!Settings.getLoadDirImg());
- dirImgButton.setChecked(Settings.getLoadDirImg());
- }
- });
-
- final CheckBox useEnglishButton = (CheckBox) findViewById(R.id.useenglish);
- useEnglishButton.setChecked(Settings.isUseEnglish());
- useEnglishButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setUseEnglish(useEnglishButton.isChecked());
- }
- });
-
- final CheckBox excludeButton = (CheckBox) findViewById(R.id.exclude);
- excludeButton.setChecked(Settings.isExcludeMyCaches());
- excludeButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setExcludeMine(excludeButton.isChecked());
- }
- });
-
- final CheckBox disabledButton = (CheckBox) findViewById(R.id.disabled);
- disabledButton.setChecked(Settings.isExcludeDisabledCaches());
- disabledButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setExcludeDisabledCaches(disabledButton.isChecked());
- }
- });
-
- TextView showWaypointsThreshold = (TextView) findViewById(R.id.showwaypointsthreshold);
- showWaypointsThreshold.setText(String.valueOf(Settings.getWayPointsThreshold()));
-
- final CheckBox autovisitButton = (CheckBox) findViewById(R.id.trackautovisit);
- autovisitButton.setChecked(Settings.isTrackableAutoVisit());
- autovisitButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setTrackableAutoVisit(autovisitButton.isChecked());
- }
- });
-
- final CheckBox offlineButton = (CheckBox) findViewById(R.id.offline);
- offlineButton.setChecked(Settings.isStoreOfflineMaps());
- offlineButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setStoreOfflineMaps(offlineButton.isChecked());
- }
- });
-
- final CheckBox offlineWpButton = (CheckBox) findViewById(R.id.offline_wp);
- offlineWpButton.setChecked(Settings.isStoreOfflineWpMaps());
- offlineWpButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setStoreOfflineWpMaps(offlineWpButton.isChecked());
- }
- });
-
- final CheckBox saveLogImgButton = (CheckBox) findViewById(R.id.save_log_img);
- saveLogImgButton.setChecked(Settings.isStoreLogImages());
- saveLogImgButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setStoreLogImages(saveLogImgButton.isChecked());
- }
- });
-
- final CheckBox livelistButton = (CheckBox) findViewById(R.id.livelist);
- livelistButton.setChecked(Settings.isLiveList());
- livelistButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setLiveList(livelistButton.isChecked());
- }
- });
-
- final CheckBox unitsButton = (CheckBox) findViewById(R.id.units);
- unitsButton.setChecked(Settings.isUseImperialUnits());
- unitsButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setUseImperialUnits(unitsButton.isChecked());
- }
- });
-
- final CheckBox logOffline = (CheckBox) findViewById(R.id.log_offline);
- logOffline.setChecked(Settings.getLogOffline());
- logOffline.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setLogOffline(!Settings.getLogOffline());
- logOffline.setChecked(Settings.getLogOffline());
- }
- });
-
- final CheckBox chooseList = (CheckBox) findViewById(R.id.choose_list);
- chooseList.setChecked(Settings.getChooseList());
- chooseList.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setChooseList(!Settings.getChooseList());
- chooseList.setChecked(Settings.getChooseList());
- }
- });
-
- final CheckBox plainLogs = (CheckBox) findViewById(R.id.plain_logs);
- plainLogs.setChecked(Settings.getPlainLogs());
- plainLogs.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setPlainLogs(!Settings.getPlainLogs());
- plainLogs.setChecked(Settings.getPlainLogs());
- }
- });
-
- // Workaround for cspire customers on mobile connections #1843
- final CheckBox useNativeUserAgent = (CheckBox) findViewById(R.id.use_native_ua);
- useNativeUserAgent.setChecked(Settings.getUseNativeUa());
- useNativeUserAgent.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setUseNativeUa(!Settings.getUseNativeUa());
- useNativeUserAgent.setChecked(Settings.getUseNativeUa());
- }
- });
-
- // Altitude settings
- EditText altitudeEdit = (EditText) findViewById(R.id.altitude);
- altitudeEdit.setText(String.valueOf(Settings.getAltitudeCorrection()));
-
- //Send2cgeo settings
- String webDeviceName = Settings.getWebDeviceName();
-
- ((EditText) findViewById(R.id.webDeviceName)).setText(webDeviceName);
-
- Button webAuth = (Button) findViewById(R.id.sendToCgeo_register);
- webAuth.setOnClickListener(new WebAuthListener());
-
- // Map source settings
- updateMapSourceMenu();
- Button selectMapDirectory = (Button) findViewById(R.id.select_map_directory);
- selectMapDirectory.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Intent selectIntent = new Intent(SettingsActivity.this, SelectMapfileActivity.class);
- startActivityForResult(selectIntent, SELECT_MAPFILE_REQUEST);
- }
- });
-
- // Theme folder settings
- initThemefolderEdittext(false);
-
- Button selectThemefolder = (Button) findViewById(R.id.select_themefolder);
- selectThemefolder.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- selectDirectory(Settings.getCustomRenderThemeBaseFolder(), SELECT_THEMEFOLDER_REQUEST);
- }
- });
-
- // GPX Export directory
- final EditText gpxExportDir = (EditText) findViewById(R.id.gpx_exportdir);
- gpxExportDir.setText(Settings.getGpxExportDir());
- Button selectGpxExportDir = (Button) findViewById(R.id.select_gpx_exportdir);
- selectGpxExportDir.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- selectDirectory(Settings.getGpxExportDir(), SELECT_GPX_EXPORT_REQUEST);
- }
- });
-
- // GPX Import directory
- final EditText gpxImportDir = (EditText) findViewById(R.id.gpx_importdir);
- gpxImportDir.setText(Settings.getGpxImportDir());
- Button selectGpxImportDir = (Button) findViewById(R.id.select_gpx_importdir);
- selectGpxImportDir.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- selectDirectory(Settings.getGpxImportDir(), SELECT_GPX_IMPORT_REQUEST);
- }
- });
-
- // Display trail on map
- final CheckBox trailButton = (CheckBox) findViewById(R.id.trail);
- trailButton.setChecked(Settings.isMapTrail());
- trailButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Settings.setMapTrail(trailButton.isChecked());
- }
- });
+ findPreference(getKey(R.string.pref_mapDirectory)).setOnPreferenceClickListener(
+ new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ Intent i = new Intent(SettingsActivity.this,
+ SelectMapfileActivity.class);
+ startActivityForResult(i, DIR_CHOOSER_MAPS_DIRECTORY_REQUEST);
+ return false;
+ }
+ });
+ }
- // Default navigation tool settings
- Spinner defaultNavigationToolSelector = (Spinner) findViewById(R.id.default_navigation_tool);
- final List<NavigationAppsEnum> apps = NavigationAppFactory.getInstalledDefaultNavigationApps();
- ArrayAdapter<NavigationAppsEnum> naviAdapter = new ArrayAdapter<NavigationAppsEnum>(this, android.R.layout.simple_spinner_item, apps) {
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- TextView textView = (TextView) super.getView(position, convertView, parent);
- textView.setText(getItem(position).app.getName());
- return textView;
+ private void startDirChooser(DirChooserType dct, String startDirectory) {
+ try {
+ final Intent dirChooser = new Intent(FileManagerIntents.ACTION_PICK_DIRECTORY);
+ if (StringUtils.isNotBlank(startDirectory)) {
+ dirChooser.setData(Uri.fromFile(new File(startDirectory)));
}
+ dirChooser.putExtra(FileManagerIntents.EXTRA_TITLE,
+ getString(R.string.simple_dir_chooser_title));
+ dirChooser.putExtra(FileManagerIntents.EXTRA_BUTTON_TEXT,
+ getString(android.R.string.ok));
+ startActivityForResult(dirChooser, dct.requestCode);
+ } catch (android.content.ActivityNotFoundException ex) {
+ // OI file manager not available
+ final Intent dirChooser = new Intent(this, SimpleDirChooser.class);
+ dirChooser.putExtra(Intents.EXTRA_START_DIR, startDirectory);
+ startActivityForResult(dirChooser, dct.requestCode);
+ }
+ }
- @Override
- public View getDropDownView(int position, View convertView, ViewGroup parent) {
- TextView textView = (TextView) super.getDropDownView(position, convertView, parent);
- textView.setText(getItem(position).app.getName());
- return textView;
- }
- };
- naviAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- defaultNavigationToolSelector.setAdapter(naviAdapter);
- int defaultNavigationTool = Settings.getDefaultNavigationTool();
- int ordinal = 0;
- for (int i = 0; i < apps.size(); i++) {
- if (apps.get(i).id == defaultNavigationTool) {
- ordinal = i;
- break;
+ @SuppressWarnings("deprecation")
+ private void setChosenDirectory(DirChooserType dct, Intent data) {
+ final String directory = new File(data.getData().getPath()).getAbsolutePath();
+ if (StringUtils.isNotBlank(directory)) {
+ Preference p = findPreference(getKey(dct.keyId));
+ if (p == null) {
+ return;
}
+ Settings.putString(dct.keyId, directory);
+ p.setSummary(directory);
}
- defaultNavigationToolSelector.setSelection(ordinal);
- defaultNavigationToolSelector.setOnItemSelectedListener(new OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
- NavigationAppsEnum item = (NavigationAppsEnum) parent.getItemAtPosition(position);
- if (item != null) {
- Settings.setDefaultNavigationTool(item.id);
+ }
+
+ @SuppressWarnings("deprecation")
+ public void initBackupButtons() {
+ Preference backup = findPreference(getKey(R.string.pref_fakekey_preference_backup));
+ backup.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(final Preference preference) {
+ final Context context = preference.getContext();
+ // avoid overwriting an existing backup with an empty database
+ // (can happen directly after reinstalling the app)
+ if (cgData.getAllCachesCount() == 0) {
+ ActivityMixin.helpDialog(SettingsActivity.this,
+ context.getString(R.string.init_backup),
+ context.getString(R.string.init_backup_unnecessary));
+ return false;
}
- }
- @Override
- public void onNothingSelected(AdapterView<?> arg0) {
- // noop
+ final ProgressDialog dialog = ProgressDialog.show(context,
+ context.getString(R.string.init_backup),
+ context.getString(R.string.init_backup_running), true, false);
+ new Thread() {
+ @Override
+ public void run() {
+ final String backupFileName = cgData.backupDatabase();
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ dialog.dismiss();
+ ActivityMixin.helpDialog(SettingsActivity.this,
+ context.getString(R.string.init_backup_backup),
+ backupFileName != null
+ ? context.getString(R.string.init_backup_success)
+ + "\n" + backupFileName
+ : context.getString(R.string.init_backup_failed));
+ VALUE_CHANGE_LISTENER.onPreferenceChange(findPreference(
+ getKey(R.string.pref_fakekey_preference_backup_info)), "");
+ }
+ });
+ }
+ }.start();
+ return true;
}
});
- // 2nd Default navigation tool settings
- Spinner defaultNavigationTool2Selector = (Spinner) findViewById(R.id.default_navigation_tool_2);
- // final List<NavigationAppsEnum> apps = NavigationAppFactory.getInstalledNavigationApps(this);
- ArrayAdapter<NavigationAppsEnum> navi2Adapter = new ArrayAdapter<NavigationAppsEnum>(this, android.R.layout.simple_spinner_item, apps) {
+ Preference restore = findPreference(getKey(R.string.pref_fakekey_preference_restore));
+ restore.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
- public View getView(int position, View convertView, ViewGroup parent) {
- TextView textView = (TextView) super.getView(position, convertView, parent);
- textView.setText(getItem(position).app.getName());
- return textView;
- }
-
- @Override
- public View getDropDownView(int position, View convertView, ViewGroup parent) {
- TextView textView = (TextView) super.getDropDownView(position, convertView, parent);
- textView.setText(getItem(position).app.getName());
- return textView;
- }
- };
- navi2Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- defaultNavigationTool2Selector.setAdapter(navi2Adapter);
- int defaultNavigationTool2 = Settings.getDefaultNavigationTool2();
- int ordinal2 = 0;
- for (int i = 0; i < apps.size(); i++) {
- if (apps.get(i).id == defaultNavigationTool2) {
- ordinal2 = i;
- break;
- }
- }
- defaultNavigationTool2Selector.setSelection(ordinal2);
- defaultNavigationTool2Selector.setOnItemSelectedListener(new OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
- NavigationAppsEnum item = (NavigationAppsEnum) parent.getItemAtPosition(position);
- if (item != null) {
- Settings.setDefaultNavigationTool2(item.id);
- }
- }
-
- @Override
- public void onNothingSelected(AdapterView<?> arg0) {
- // noop
+ public boolean onPreferenceClick(final Preference preference) {
+ ((cgeoapplication) SettingsActivity.this.getApplication())
+ .restoreDatabase(SettingsActivity.this);
+ return true;
}
});
+ }
- refreshBackupLabel();
-
- // Database location
- refreshDbOnSDCardSetting();
-
- final CheckBox dbOnSDCardButton = (CheckBox) findViewById(R.id.dbonsdcard);
- dbOnSDCardButton.setOnClickListener(new View.OnClickListener() {
-
+ @SuppressWarnings("deprecation")
+ private void initDbLocationPreference() {
+ Preference p = findPreference(getKey(R.string.pref_dbonsdcard));
+ p.setPersistent(false);
+ p.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
- public void onClick(View v) {
- app.moveDatabase(SettingsActivity.this);
+ public boolean onPreferenceClick(Preference preference) {
+ boolean oldValue = Settings.isDbOnSDCard();
+ ((cgeoapplication) SettingsActivity.this.getApplication())
+ .moveDatabase(SettingsActivity.this);
+ return oldValue != Settings.isDbOnSDCard();
}
});
+ }
- // Debug settings
- final CheckBox debugButton = (CheckBox) findViewById(R.id.debug);
- debugButton.setChecked(Settings.isDebug());
- debugButton.setOnClickListener(new View.OnClickListener() {
-
+ @SuppressWarnings("deprecation")
+ private void initDebugPreference() {
+ Preference p = findPreference(getKey(R.string.pref_debug));
+ p.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
- public void onClick(View v) {
- Settings.setDebug(!Settings.isDebug());
- debugButton.setChecked(Settings.isDebug());
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ Log.setDebug((Boolean) newValue);
+ return true;
}
});
}
- private void updateMapSourceMenu() {
- Collection<String> mapSourceNames = new ArrayList<String>();
- for (MapSource mapSource : MapProviderFactory.getMapSources()) {
- mapSourceNames.add(mapSource.getName());
- }
- Spinner mapSourceSelector = (Spinner) findViewById(R.id.mapsource);
- ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this,
- android.R.layout.simple_spinner_item,
- mapSourceNames.toArray(new String[mapSourceNames.size()]));
- adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- mapSourceSelector.setAdapter(adapter);
- final int index = MapProviderFactory.getMapSources().indexOf(Settings.getMapSource());
- mapSourceSelector.setSelection(index);
- mapSourceSelector.setOnItemSelectedListener(new ChangeMapSourceListener());
-
- initMapDirectoryEdittext(false);
+ @SuppressWarnings("deprecation")
+ private void initBasicMemberPreferences() {
+ findPreference(getKey(R.string.pref_loaddirectionimg)).setEnabled(
+ !Settings.isPremiumMember());
+ findPreference(getKey(R.string.pref_showcaptcha)).setEnabled(
+ !Settings.isPremiumMember());
}
- private void initMapDirectoryEdittext(boolean setFocus) {
- final EditText mapDirectoryEdit = (EditText) findViewById(R.id.map_directory);
- mapDirectoryEdit.setText(Settings.getMapFileDirectory());
- if (setFocus) {
- mapDirectoryEdit.requestFocus();
- }
+ private static void initSend2CgeoPreferences() {
+ Settings.putString(R.string.pref_webDeviceName, Settings.getWebDeviceName());
}
- private void initThemefolderEdittext(boolean setFocus) {
- EditText themeFileEdit = (EditText) findViewById(R.id.themefolder);
- themeFileEdit.setText(Settings.getCustomRenderThemeBaseFolder());
- if (setFocus) {
- themeFileEdit.requestFocus();
- }
+ public static void startWithServicesPage(Context fromActivity) {
+ final Intent intent = new Intent(fromActivity, SettingsActivity.class);
+ intent.putExtra(INTENT_GOTO, INTENT_GOTO_SERVICES);
+ fromActivity.startActivity(intent);
}
- /**
- * @param view
- * unused here but needed since this method is referenced from XML layout
- */
- public void backup(View view) {
- // avoid overwriting an existing backup with an empty database (can happen directly after reinstalling the app)
- if (cgData.getAllCachesCount() == 0) {
- helpDialog(res.getString(R.string.init_backup), res.getString(R.string.init_backup_unnecessary));
+ @SuppressWarnings("deprecation")
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode != RESULT_OK) {
return;
}
- final ProgressDialog dialog = ProgressDialog.show(this, res.getString(R.string.init_backup), res.getString(R.string.init_backup_running), true, false);
- new Thread() {
- @Override
- public void run() {
- final String backupFileName = cgData.backupDatabase();
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- dialog.dismiss();
- helpDialog(res.getString(R.string.init_backup_backup),
- backupFileName != null ? res.getString(R.string.init_backup_success) + "\n" + backupFileName : res.getString(R.string.init_backup_failed));
- refreshBackupLabel();
- }
- });
+ for (DirChooserType dct : DirChooserType.values()) {
+ if (requestCode == dct.requestCode) {
+ setChosenDirectory(dct, data);
+ return;
}
- }.start();
- }
-
- private void refreshBackupLabel() {
- TextView lastBackup = (TextView) findViewById(R.id.backup_last);
- File lastBackupFile = cgData.getRestoreFile();
- if (lastBackupFile != null) {
- lastBackup.setText(res.getString(R.string.init_backup_last) + " " + Formatter.formatTime(lastBackupFile.lastModified()) + ", " + Formatter.formatDate(lastBackupFile.lastModified()));
- } else {
- lastBackup.setText(res.getString(R.string.init_backup_last_no));
}
- }
- private void refreshDbOnSDCardSetting() {
- final CheckBox dbOnSDCardButton = (CheckBox) findViewById(R.id.dbonsdcard);
- dbOnSDCardButton.setChecked(Settings.isDbOnSDCard());
- }
-
- /**
- * @param view
- * unused here but needed since this method is referenced from XML layout
- */
- public void restore(View view) {
- app.restoreDatabase(this);
- }
-
- public boolean saveValues() {
- String usernameNew = StringUtils.trimToEmpty(((EditText) findViewById(R.id.username)).getText().toString());
- String passwordNew = StringUtils.trimToEmpty(((EditText) findViewById(R.id.password)).getText().toString());
- String passvoteNew = StringUtils.trimToEmpty(((EditText) findViewById(R.id.passvote)).getText().toString());
- // don't trim signature, user may want to have whitespace at the beginning
- String signatureNew = ((EditText) findViewById(R.id.signature)).getText().toString();
- String mapDirectoryNew = StringUtils.trimToEmpty(((EditText) findViewById(R.id.map_directory)).getText().toString());
- String themesDirectoryNew = StringUtils.trimToEmpty(((EditText) findViewById(R.id.themefolder)).getText().toString());
-
- String altitudeNew = StringUtils.trimToNull(((EditText) findViewById(R.id.altitude)).getText().toString());
- int altitudeNewInt = parseNumber(altitudeNew, 0);
-
- TextView field = (TextView) findViewById(R.id.showwaypointsthreshold);
- Settings.setShowWaypointsThreshold(parseNumber(field.getText().toString(),
- Settings.SHOW_WP_THRESHOLD_DEFAULT));
-
- final boolean status1 = Settings.setLogin(usernameNew, passwordNew);
- final boolean status2 = Settings.setGCvoteLogin(passvoteNew);
- final boolean status3 = Settings.setSignature(signatureNew);
- final boolean status4 = Settings.setAltitudeCorrection(altitudeNewInt);
- final boolean status5 = Settings.setMapFileDirectory(mapDirectoryNew);
- final boolean status6 = Settings.setCustomRenderThemeBaseFolder(themesDirectoryNew);
-
- String importNew = StringUtils.trimToEmpty(((EditText) findViewById(R.id.gpx_importdir)).getText().toString());
- String exportNew = StringUtils.trimToEmpty(((EditText) findViewById(R.id.gpx_exportdir)).getText().toString());
- Settings.setGpxImportDir(importNew);
- Settings.setGpxExportDir(exportNew);
-
- return status1 && status2 && status3 && status4 && status5 && status6;
+ switch (requestCode) {
+ case DIR_CHOOSER_MAPS_DIRECTORY_REQUEST:
+ if (data.hasExtra(Intents.EXTRA_MAP_FILE)) {
+ final String mapFile = data.getStringExtra(Intents.EXTRA_MAP_FILE);
+ Settings.setMapFile(mapFile);
+ if (!Settings.isValidMapFile(Settings.getMapFile())) {
+ ActivityMixin.showToast(this, R.string.warn_invalid_mapfile);
+ }
+ }
+ initMapSourcePreference();
+ findPreference(getKey(R.string.pref_mapDirectory)).setSummary(
+ Settings.getMapFileDirectory());
+ break;
+ default:
+ throw new IllegalArgumentException();
+ }
}
/**
- * Returns the integer value from the string
- *
- * @param field
- * the field to retrieve the integer value from
- * @param defaultValue
- * the default value
- * @return either the field content or the default value
+ * A preference value change listener that updates the preference's summary
+ * to reflect its new value.
*/
-
- static private int parseNumber(final String number, int defaultValue) {
- try {
- return Integer.parseInt(number);
- } catch (NumberFormatException e) {
- return defaultValue;
- }
- }
-
- private static class ChangeMapSourceListener implements OnItemSelectedListener {
-
- @Override
- public void onItemSelected(AdapterView<?> arg0, View arg1, int position,
- long arg3) {
- Settings.setMapSource(MapProviderFactory.getMapSources().get(position));
- }
-
- @Override
- public void onNothingSelected(AdapterView<?> arg0) {
- arg0.setSelection(MapProviderFactory.getMapSources().indexOf(Settings.getMapSource()));
- }
- }
-
- private class LoginListener implements View.OnClickListener {
-
+ private static Preference.OnPreferenceChangeListener VALUE_CHANGE_LISTENER = new Preference.OnPreferenceChangeListener() {
@Override
- public void onClick(View arg0) {
- final String username = ((EditText) findViewById(R.id.username)).getText().toString();
- final String password = ((EditText) findViewById(R.id.password)).getText().toString();
+ public boolean onPreferenceChange(Preference preference, Object value) {
+ String stringValue = value.toString();
- if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) {
- showToast(res.getString(R.string.err_missing_auth));
- return;
- }
-
- loginDialog = ProgressDialog.show(SettingsActivity.this,
- res.getString(R.string.init_login_popup),
- res.getString(R.string.init_login_popup_working), true);
- loginDialog.setCancelable(false);
-
- Settings.setLogin(username, password);
- Cookies.clearCookies();
-
- (new Thread() {
-
- @Override
- public void run() {
- final StatusCode loginResult = Login.login();
- Object payload = loginResult;
- if (loginResult == StatusCode.NO_ERROR) {
- Login.detectGcCustomDate();
- payload = Login.downloadAvatarAndGetMemberStatus();
- }
- logInHandler.obtainMessage(0, payload).sendToTarget();
+ if (preference instanceof EditPasswordPreference) {
+ if (StringUtils.isBlank((String) value)) {
+ preference.setSummary("");
+ } else {
+ preference.setSummary("\u2022 \u2022 \u2022 \u2022 \u2022 \u2022 \u2022 \u2022 \u2022 \u2022");
+ }
+ } else if (preference instanceof ListPreference) {
+ // For list preferences, look up the correct display value in
+ // the preference's 'entries' list.
+ ListPreference listPreference = (ListPreference) preference;
+ int index = listPreference.findIndexOfValue(stringValue);
+
+ // Set the summary to reflect the new value.
+ preference.setSummary(
+ index >= 0
+ ? listPreference.getEntries()[index]
+ : null);
+ } else if (getKey(R.string.pref_fakekey_preference_backup_info).equals(preference.getKey())) {
+ File lastBackupFile = cgData.getRestoreFile();
+ String text;
+ if (lastBackupFile != null) {
+ text = preference.getContext().getString(R.string.init_backup_last) + " "
+ + Formatter.formatTime(lastBackupFile.lastModified())
+ + ", " + Formatter.formatDate(lastBackupFile.lastModified());
+ } else {
+ text = preference.getContext().getString(R.string.init_backup_last_no);
}
- }).start();
+ preference.setSummary(text);
+ } else {
+ // For all other preferences, set the summary to the value's
+ // simple string representation.
+ preference.setSummary(stringValue);
+ }
+ return true;
}
- }
-
- private class OCDEAuthorizeCgeoListener implements View.OnClickListener {
+ };
- @Override
- public void onClick(View v) {
- Intent authIntent = new Intent(SettingsActivity.this, OCAuthorizationActivity.class);
- startActivity(authIntent);
+ /**
+ * Binds a preference's summary to its value. More specifically, when the
+ * preference's value is changed, its summary (line of text below the
+ * preference title) is updated to reflect the value. The summary is also
+ * immediately updated upon calling this method. The exact display format is
+ * dependent on the type of preference.
+ *
+ * @see #VALUE_CHANGE_LISTENER
+ */
+ private static void bindSummaryToValue(Preference preference, Object value) {
+ // Set the listener to watch for value changes.
+ if (preference == null) {
+ return;
}
- }
-
- private class WebAuthListener implements View.OnClickListener {
-
- @Override
- public void onClick(View arg0) {
- final String deviceName = ((EditText) findViewById(R.id.webDeviceName)).getText().toString();
- final String deviceCode = Settings.getWebDeviceCode();
-
- if (StringUtils.isBlank(deviceName)) {
- showToast(res.getString(R.string.err_missing_device_name));
- return;
- }
-
- webDialog = ProgressDialog.show(SettingsActivity.this, res.getString(R.string.init_sendToCgeo), res.getString(R.string.init_sendToCgeo_registering), true);
- webDialog.setCancelable(false);
-
- (new Thread() {
-
- @Override
- public void run() {
- int pin = 0;
-
- final String nam = StringUtils.defaultString(deviceName);
- final String cod = StringUtils.defaultString(deviceCode);
-
- final Parameters params = new Parameters("name", nam, "code", cod);
- HttpResponse response = Network.getRequest("http://send2.cgeo.org/auth.html", params);
-
- if (response != null && response.getStatusLine().getStatusCode() == 200) {
- //response was OK
- String[] strings = Network.getResponseData(response).split(",");
- try {
- pin = Integer.parseInt(strings[1].trim());
- } catch (Exception e) {
- Log.e("webDialog", e);
- }
- String code = strings[0];
- Settings.setWebNameCode(nam, code);
- }
+ preference.setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER);
- webAuthHandler.sendEmptyMessage(pin);
- }
- }).start();
- }
+ // Trigger the listener immediately with the preference's
+ // current value.
+ VALUE_CHANGE_LISTENER.onPreferenceChange(preference, value);
}
- @Override
- protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (resultCode != RESULT_OK) {
+ /**
+ * auto-care for the summary of the preference of string type with this key
+ *
+ * @param key
+ */
+ private static void bindSummaryToStringValue(Preference pref) {
+ if (pref == null) {
return;
}
- switch (requestCode) {
- case SELECT_MAPFILE_REQUEST:
- if (data.hasExtra(Intents.EXTRA_MAP_FILE)) {
- final String mapFile = data.getStringExtra(Intents.EXTRA_MAP_FILE);
- Settings.setMapFile(mapFile);
- if (!Settings.isValidMapFile(Settings.getMapFile())) {
- showToast(res.getString(R.string.warn_invalid_mapfile));
- }
- }
- updateMapSourceMenu();
- initMapDirectoryEdittext(true);
- break;
- case SELECT_GPX_EXPORT_REQUEST:
- checkDirectory(resultCode, data, R.id.gpx_exportdir, new RunnableWithArgument<String>() {
-
- @Override
- public void run(String directory) {
- Settings.setGpxExportDir(directory);
- }
- });
- break;
- case SELECT_GPX_IMPORT_REQUEST:
- checkDirectory(resultCode, data, R.id.gpx_importdir, new RunnableWithArgument<String>() {
-
- @Override
- public void run(String directory) {
- Settings.setGpxImportDir(directory);
- }
- });
- break;
- case SELECT_THEMEFOLDER_REQUEST:
- checkDirectory(resultCode, data, R.id.themefolder, new RunnableWithArgument<String>() {
+ String value = PreferenceManager
+ .getDefaultSharedPreferences(pref.getContext())
+ .getString(pref.getKey(), "");
- @Override
- public void run(String directory) {
- Settings.setCustomRenderThemeBaseFolder(directory);
- }
- });
- break;
- default:
- throw new IllegalArgumentException();
- }
+ bindSummaryToValue(pref, value);
}
- private void checkDirectory(int resultCode, Intent data, int textField, RunnableWithArgument<String> runnableSetDir) {
- if (resultCode != RESULT_OK) {
+ /**
+ * auto-care for the summary of the preference of int type with this key
+ *
+ * @param key
+ */
+ private static void bindSummaryToIntValue(Preference pref) {
+ if (pref == null) {
return;
}
- final String directory = new File(data.getData().getPath()).getAbsolutePath();
- if (StringUtils.isNotBlank(directory)) {
- runnableSetDir.run(directory);
- EditText directoryText = (EditText) findViewById(textField);
- directoryText.setText(directory);
- directoryText.requestFocus();
- }
- }
- private void selectDirectory(String startDirectory, int directoryKind) {
- try {
- final Intent dirChooser = new Intent(FileManagerIntents.ACTION_PICK_DIRECTORY);
- if (StringUtils.isNotBlank(startDirectory)) {
- dirChooser.setData(Uri.fromFile(new File(startDirectory)));
- }
- dirChooser.putExtra(FileManagerIntents.EXTRA_TITLE, res.getString(R.string.simple_dir_chooser_title));
- dirChooser.putExtra(FileManagerIntents.EXTRA_BUTTON_TEXT, res.getString(android.R.string.ok));
- startActivityForResult(dirChooser, directoryKind);
- } catch (android.content.ActivityNotFoundException ex) {
- // OI file manager not available
- final Intent dirChooser = new Intent(this, SimpleDirChooser.class);
- dirChooser.putExtra(Intents.EXTRA_START_DIR, startDirectory);
- startActivityForResult(dirChooser, directoryKind);
- }
- }
+ int value = PreferenceManager
+ .getDefaultSharedPreferences(pref.getContext())
+ .getInt(pref.getKey(), 0);
- public static void startActivity(Context fromActivity) {
- final Intent initIntent = new Intent(fromActivity, SettingsActivity.class);
- fromActivity.startActivity(initIntent);
+ bindSummaryToValue(pref, value);
}
-
}
diff --git a/tests/src/cgeo/geocaching/StaticMapsProviderTest.java b/tests/src/cgeo/geocaching/StaticMapsProviderTest.java
index bd790b4..2b11976 100644
--- a/tests/src/cgeo/geocaching/StaticMapsProviderTest.java
+++ b/tests/src/cgeo/geocaching/StaticMapsProviderTest.java
@@ -4,6 +4,7 @@ import cgeo.geocaching.enumerations.WaypointType;
import cgeo.geocaching.files.LocalStorage;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.settings.Settings;
+import cgeo.geocaching.settings.TestSettings;
import android.test.suitebuilder.annotation.Suppress;
@@ -21,8 +22,8 @@ public class StaticMapsProviderTest extends TestCase {
boolean backupStore = Settings.isStoreOfflineMaps();
boolean backupStoreWP = Settings.isStoreOfflineWpMaps();
- Settings.setStoreOfflineMaps(true);
- Settings.setStoreOfflineWpMaps(true);
+ TestSettings.setStoreOfflineMaps(true);
+ TestSettings.setStoreOfflineWpMaps(true);
try {
Geopoint gp = new Geopoint(lat + 0.25d, lon + 0.25d);
Geocache cache = new Geocache();
@@ -66,8 +67,8 @@ public class StaticMapsProviderTest extends TestCase {
trailhead.setCoords(new Geopoint(lat + 0.24d + 2, lon + 0.25d + 2));
assertFalse(StaticMapsProvider.hasStaticMapForWaypoint(geocode, trailhead));
} finally {
- Settings.setStoreOfflineWpMaps(backupStoreWP);
- Settings.setStoreOfflineMaps(backupStore);
+ TestSettings.setStoreOfflineWpMaps(backupStoreWP);
+ TestSettings.setStoreOfflineMaps(backupStore);
deleteCacheDirectory(geocode);
}
}
diff --git a/tests/src/cgeo/geocaching/cgeoApplicationTest.java b/tests/src/cgeo/geocaching/cgeoApplicationTest.java
index 26a86fe..83bf28d 100644
--- a/tests/src/cgeo/geocaching/cgeoApplicationTest.java
+++ b/tests/src/cgeo/geocaching/cgeoApplicationTest.java
@@ -14,6 +14,7 @@ import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Viewport;
import cgeo.geocaching.loaders.RecaptchaReceiver;
import cgeo.geocaching.settings.Settings;
+import cgeo.geocaching.settings.TestSettings;
import cgeo.geocaching.test.RegExPerformanceTest;
import cgeo.geocaching.test.mock.GC1ZXX2;
import cgeo.geocaching.test.mock.GC2CJPF;
@@ -159,7 +160,7 @@ public class cgeoApplicationTest extends CGeoTestCase {
} finally {
// restore user and password
- Settings.setLogin(login.left, login.right);
+ TestSettings.setLogin(login.left, login.right);
Settings.setMemberStatus(memberStatus);
Login.login();
}
@@ -185,7 +186,7 @@ public class cgeoApplicationTest extends CGeoTestCase {
} finally {
// restore user and password
- Settings.setLogin(login.left, login.right);
+ TestSettings.setLogin(login.left, login.right);
Settings.setMemberStatus(memberStatus);
Login.login();
}
@@ -202,15 +203,15 @@ public class cgeoApplicationTest extends CGeoTestCase {
final boolean excludeDisabled = Settings.isExcludeDisabledCaches();
try {
// set up settings required for test
- Settings.setExcludeMine(false);
- Settings.setExcludeDisabledCaches(false);
+ TestSettings.setExcludeMine(false);
+ TestSettings.setExcludeDisabledCaches(false);
runnable.run();
} finally {
// restore user settings
- Settings.setExcludeMine(excludeMine);
- Settings.setExcludeDisabledCaches(excludeDisabled);
+ TestSettings.setExcludeMine(excludeMine);
+ TestSettings.setExcludeDisabledCaches(excludeDisabled);
}
}
@@ -280,7 +281,7 @@ public class cgeoApplicationTest extends CGeoTestCase {
try {
// set up settings required for test
- Settings.setExcludeMine(false);
+ TestSettings.setExcludeMine(false);
Settings.setCacheType(CacheType.ALL);
final GC2CJPF mockedCache = new GC2CJPF();
@@ -369,7 +370,7 @@ public class cgeoApplicationTest extends CGeoTestCase {
} finally {
// restore user and password
- Settings.setLogin(login.left, login.right);
+ TestSettings.setLogin(login.left, login.right);
Settings.setMemberStatus(memberStatus);
Login.login();
Settings.setLiveMapStrategy(strategy);
@@ -412,7 +413,7 @@ public class cgeoApplicationTest extends CGeoTestCase {
Login.logout();
// Modify login data to avoid an automatic login again
- Settings.setLogin("c:geo", "c:geo");
+ TestSettings.setLogin("c:geo", "c:geo");
Settings.setMemberStatus("Basic member");
}
diff --git a/tests/src/cgeo/geocaching/connector/gc/GCConnectorTest.java b/tests/src/cgeo/geocaching/connector/gc/GCConnectorTest.java
index 373f27b..8ac2177 100644
--- a/tests/src/cgeo/geocaching/connector/gc/GCConnectorTest.java
+++ b/tests/src/cgeo/geocaching/connector/gc/GCConnectorTest.java
@@ -7,6 +7,7 @@ import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Viewport;
import cgeo.geocaching.settings.Settings;
+import cgeo.geocaching.settings.TestSettings;
import cgeo.geocaching.test.AbstractResourceInstrumentationTestCase;
public class GCConnectorTest extends AbstractResourceInstrumentationTestCase {
@@ -17,7 +18,7 @@ public class GCConnectorTest extends AbstractResourceInstrumentationTestCase {
final CacheType cacheType = Settings.getCacheType();
try {
// set up settings required for test
- Settings.setExcludeMine(false);
+ TestSettings.setExcludeMine(false);
Settings.setCacheType(CacheType.ALL);
Login.login();
@@ -40,7 +41,7 @@ public class GCConnectorTest extends AbstractResourceInstrumentationTestCase {
}
} finally {
// restore user settings
- Settings.setExcludeMine(excludeMine);
+ TestSettings.setExcludeMine(excludeMine);
Settings.setCacheType(cacheType);
}
}
diff --git a/tests/src/cgeo/geocaching/files/GPXImporterTest.java b/tests/src/cgeo/geocaching/files/GPXImporterTest.java
index a8c6aca..03f917c 100644
--- a/tests/src/cgeo/geocaching/files/GPXImporterTest.java
+++ b/tests/src/cgeo/geocaching/files/GPXImporterTest.java
@@ -6,6 +6,7 @@ import cgeo.geocaching.cgData;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.LoadFlags;
import cgeo.geocaching.settings.Settings;
+import cgeo.geocaching.settings.TestSettings;
import cgeo.geocaching.test.AbstractResourceInstrumentationTestCase;
import cgeo.geocaching.test.R;
import cgeo.geocaching.utils.CancellableHandler;
@@ -270,9 +271,9 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase {
listId = cgData.createList("cgeogpxesTest");
importCacheStaticMaps = Settings.isStoreOfflineMaps();
- Settings.setStoreOfflineMaps(true);
+ TestSettings.setStoreOfflineMaps(true);
importWpStaticMaps = Settings.isStoreOfflineWpMaps();
- Settings.setStoreOfflineWpMaps(true);
+ TestSettings.setStoreOfflineWpMaps(true);
}
@Override
@@ -283,8 +284,8 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase {
cgData.markDropped(cachesInList);
cgData.removeList(listId);
deleteDirectory(tempDir);
- Settings.setStoreOfflineMaps(importCacheStaticMaps);
- Settings.setStoreOfflineWpMaps(importWpStaticMaps);
+ TestSettings.setStoreOfflineMaps(importCacheStaticMaps);
+ TestSettings.setStoreOfflineWpMaps(importWpStaticMaps);
super.tearDown();
}
diff --git a/tests/src/cgeo/geocaching/geopoint/UnitsTest.java b/tests/src/cgeo/geocaching/geopoint/UnitsTest.java
index 3389658..3b7331c 100644
--- a/tests/src/cgeo/geocaching/geopoint/UnitsTest.java
+++ b/tests/src/cgeo/geocaching/geopoint/UnitsTest.java
@@ -2,6 +2,7 @@ package cgeo.geocaching.geopoint;
import cgeo.CGeoTestCase;
import cgeo.geocaching.settings.Settings;
+import cgeo.geocaching.settings.TestSettings;
import org.apache.commons.lang3.StringUtils;
@@ -22,20 +23,20 @@ public class UnitsTest extends CGeoTestCase {
assertEquals("?", Units.getDistanceFromKilometers(null));
final boolean savedImperial = Settings.isUseImperialUnits();
try {
- Settings.setUseImperialUnits(false);
+ TestSettings.setUseImperialUnits(false);
assertDistance("123 km", 122.782f);
assertDistance("123 km", 123.456f);
assertDistance("12.3 km", 12.3456f);
assertDistance("1.23 km", 1.23456f);
assertDistance("123 m", 0.123456f);
- Settings.setUseImperialUnits(true);
+ TestSettings.setUseImperialUnits(true);
assertDistance("76.7 mi", 123.456f);
assertDistance("7.67 mi", 12.3456f);
assertDistance("0.77 mi", 1.23456f);
assertDistance("405 ft", 0.123456f);
assertDistance("40.5 ft", 0.0123456f);
} finally {
- Settings.setUseImperialUnits(savedImperial);
+ TestSettings.setUseImperialUnits(savedImperial);
}
}
@@ -44,7 +45,7 @@ public class UnitsTest extends CGeoTestCase {
public void testElevation() {
final boolean savedImperial = Settings.isUseImperialUnits();
try {
- Settings.setUseImperialUnits(false);
+ TestSettings.setUseImperialUnits(false);
assertElevation("↥ 123 m", 122.782f);
assertElevation("↥ 123 m", 123.456f);
assertElevation("↥ 12 m", 12.3456f);
@@ -57,11 +58,11 @@ public class UnitsTest extends CGeoTestCase {
assertElevation("↧ 1 m", -1.23456f);
assertElevation("↧ 2 m", -1.6f);
assertElevation("↧ 0 m", -0.123456f);
- Settings.setUseImperialUnits(true);
+ TestSettings.setUseImperialUnits(true);
assertElevation("↥ 405 ft", 123.456f);
assertElevation("↥ 41 ft", 12.3456f);
} finally {
- Settings.setUseImperialUnits(savedImperial);
+ TestSettings.setUseImperialUnits(savedImperial);
}
}
@@ -78,18 +79,18 @@ public class UnitsTest extends CGeoTestCase {
assertEquals("?", Units.getDistanceFromKilometers(null));
final boolean savedImperial = Settings.isUseImperialUnits();
try {
- Settings.setUseImperialUnits(false);
+ TestSettings.setUseImperialUnits(false);
assertSpeed("123 km/h", 122.782f);
assertSpeed("123 km/h", 123.456f);
assertSpeed("12.3 km/h", 12.3456f);
assertSpeed("1.23 km/h", 1.23456f);
assertSpeed("123 m/h", 0.123456f);
- Settings.setUseImperialUnits(true);
+ TestSettings.setUseImperialUnits(true);
assertSpeed("76.7 mph", 123.456f);
assertSpeed("7.67 mph", 12.3456f);
assertSpeed("0.77 mph", 1.23456f);
} finally {
- Settings.setUseImperialUnits(savedImperial);
+ TestSettings.setUseImperialUnits(savedImperial);
}
}
diff --git a/tests/src/cgeo/geocaching/settings/TestSettings.java b/tests/src/cgeo/geocaching/settings/TestSettings.java
new file mode 100644
index 0000000..6585ee4
--- /dev/null
+++ b/tests/src/cgeo/geocaching/settings/TestSettings.java
@@ -0,0 +1,42 @@
+package cgeo.geocaching.settings;
+
+
+/**
+ * provide write-access proxy to settings for testing purposes
+ *
+ * @author rschuman
+ *
+ */
+public class TestSettings {
+
+ /**
+ * Purely static!
+ */
+ private TestSettings() {
+ }
+
+ public static void setExcludeDisabledCaches(final boolean exclude) {
+ Settings.setExcludeDisabledCaches(exclude);
+ }
+
+ public static void setExcludeMine(final boolean exclude) {
+ Settings.setExcludeMine(exclude);
+ }
+
+ public static boolean setLogin(final String username, final String password) {
+ return Settings.setLogin(username, password);
+ }
+
+ public static void setStoreOfflineMaps(final boolean offlineMaps) {
+ Settings.setStoreOfflineMaps(offlineMaps);
+ }
+
+ public static void setStoreOfflineWpMaps(final boolean offlineWpMaps) {
+ Settings.setStoreOfflineWpMaps(offlineWpMaps);
+ }
+
+ public static void setUseImperialUnits(final boolean imperial) {
+ Settings.setUseImperialUnits(imperial);
+ }
+
+}
diff --git a/tests/src/cgeo/geocaching/speech/TextFactoryTest.java b/tests/src/cgeo/geocaching/speech/TextFactoryTest.java
index dc36e07..864757b 100644
--- a/tests/src/cgeo/geocaching/speech/TextFactoryTest.java
+++ b/tests/src/cgeo/geocaching/speech/TextFactoryTest.java
@@ -3,6 +3,7 @@ package cgeo.geocaching.speech;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.settings.Settings;
+import cgeo.geocaching.settings.TestSettings;
import android.content.res.Configuration;
import android.content.res.Resources;
@@ -152,6 +153,6 @@ public class TextFactoryTest extends AndroidTestCase {
resources.updateConfiguration(config, resources.getDisplayMetrics());
Locale.setDefault(locale2);
- Settings.setUseImperialUnits(!metric);
+ TestSettings.setUseImperialUnits(!metric);
}
}