diff options
| author | rsudev <rasch@munin-soft.de> | 2013-07-09 22:50:17 +0200 |
|---|---|---|
| committer | rsudev <rasch@munin-soft.de> | 2013-07-09 22:50:17 +0200 |
| commit | a67a71abad9d318116c847f344b50532987babb7 (patch) | |
| tree | 7279fc3085a2c75794cefe6ea14b0c1810e7f9f9 | |
| parent | 1f8a55734139a00e2c10eaa5d55bcfbd1673201e (diff) | |
| download | cgeo-a67a71abad9d318116c847f344b50532987babb7.zip cgeo-a67a71abad9d318116c847f344b50532987babb7.tar.gz cgeo-a67a71abad9d318116c847f344b50532987babb7.tar.bz2 | |
Remove old SettingsActivity, rename new SettingsActivity
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); } } |
