Blame client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/BookmarkActivity.java

Packit Service fa4841
/*
Packit Service fa4841
   Bookmark editing activity
Packit Service fa4841
Packit Service fa4841
   Copyright 2013 Thincast Technologies GmbH, Author: Martin Fleisz
Packit Service fa4841
Packit Service b1ea74
   This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
Packit Service b1ea74
   If a copy of the MPL was not distributed with this file, You can obtain one at
Packit Service b1ea74
   http://mozilla.org/MPL/2.0/.
Packit Service fa4841
 */
Packit Service fa4841
Packit Service fa4841
package com.freerdp.freerdpcore.presentation;
Packit Service fa4841
Packit Service fa4841
import android.app.AlertDialog;
Packit Service fa4841
import android.content.ComponentName;
Packit Service fa4841
import android.content.DialogInterface;
Packit Service fa4841
import android.content.SharedPreferences;
Packit Service fa4841
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
Packit Service fa4841
import android.os.Bundle;
Packit Service fa4841
import android.preference.ListPreference;
Packit Service fa4841
import android.preference.Preference;
Packit Service fa4841
import android.preference.PreferenceActivity;
Packit Service fa4841
import android.preference.PreferenceManager;
Packit Service fa4841
import android.preference.PreferenceScreen;
Packit Service fa4841
import android.util.Log;
Packit Service fa4841
import android.view.View;
Packit Service fa4841
Packit Service fa4841
import com.freerdp.freerdpcore.R;
Packit Service fa4841
import com.freerdp.freerdpcore.application.GlobalApp;
Packit Service fa4841
import com.freerdp.freerdpcore.domain.BookmarkBase;
Packit Service fa4841
import com.freerdp.freerdpcore.domain.ConnectionReference;
Packit Service fa4841
import com.freerdp.freerdpcore.domain.ManualBookmark;
Packit Service fa4841
import com.freerdp.freerdpcore.services.BookmarkBaseGateway;
Packit Service fa4841
import com.freerdp.freerdpcore.services.LibFreeRDP;
Packit Service fa4841
import com.freerdp.freerdpcore.utils.RDPFileParser;
Packit Service fa4841
Packit Service fa4841
import java.io.File;
Packit Service fa4841
import java.io.IOException;
Packit Service fa4841
import java.util.ArrayList;
Packit Service fa4841
Packit Service b1ea74
public class BookmarkActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener
Packit Service b1ea74
{
Packit Service b1ea74
	public static final String PARAM_CONNECTION_REFERENCE = "conRef";
Packit Service b1ea74
Packit Service b1ea74
	private static final String TAG = "BookmarkActivity";
Packit Service b1ea74
	private static final int PREFERENCES_BOOKMARK = 1;
Packit Service b1ea74
	private static final int PREFERENCES_CREDENTIALS = 2;
Packit Service b1ea74
	private static final int PREFERENCES_SCREEN = 3;
Packit Service b1ea74
	private static final int PREFERENCES_PERFORMANCE = 4;
Packit Service b1ea74
	private static final int PREFERENCES_ADVANCED = 5;
Packit Service b1ea74
	private static final int PREFERENCES_SCREEN3G = 6;
Packit Service b1ea74
	private static final int PREFERENCES_PERFORMANCE3G = 7;
Packit Service b1ea74
	private static final int PREFERENCES_GATEWAY = 8;
Packit Service b1ea74
	private static final int PREFERENCES_DEBUG = 9;
Packit Service b1ea74
	// bookmark needs to be static because the activity is started for each
Packit Service b1ea74
	// subview
Packit Service b1ea74
	// (we have to do this because Android has a bug where the style for
Packit Service b1ea74
	// Preferences
Packit Service b1ea74
	// is only applied to the first PreferenceScreen but not to subsequent ones)
Packit Service b1ea74
	private static BookmarkBase bookmark = null;
Packit Service b1ea74
	private static boolean settings_changed = false;
Packit Service b1ea74
	private static boolean new_bookmark = false;
Packit Service b1ea74
	private int current_preferences;
Packit Service b1ea74
Packit Service b1ea74
	@Override public void onCreate(Bundle savedInstanceState)
Packit Service b1ea74
	{
Packit Service b1ea74
		super.onCreate(savedInstanceState);
Packit Service b1ea74
Packit Service b1ea74
		PreferenceManager mgr = getPreferenceManager();
Packit Service b1ea74
		// init shared preferences for activity
Packit Service b1ea74
		mgr.setSharedPreferencesName("TEMP");
Packit Service b1ea74
		mgr.setSharedPreferencesMode(MODE_PRIVATE);
Packit Service b1ea74
Packit Service b1ea74
		if (bookmark == null)
Packit Service b1ea74
		{
Packit Service b1ea74
			// if we have a bookmark id set in the extras we are in edit mode
Packit Service b1ea74
			Bundle bundle = getIntent().getExtras();
Packit Service b1ea74
			if (bundle != null)
Packit Service b1ea74
			{
Packit Service b1ea74
				// See if we got a connection reference to a bookmark
Packit Service b1ea74
				if (bundle.containsKey(PARAM_CONNECTION_REFERENCE))
Packit Service b1ea74
				{
Packit Service b1ea74
					String refStr = bundle.getString(PARAM_CONNECTION_REFERENCE);
Packit Service b1ea74
					if (ConnectionReference.isManualBookmarkReference(refStr))
Packit Service b1ea74
					{
Packit Service b1ea74
						bookmark = GlobalApp.getManualBookmarkGateway().findById(
Packit Service b1ea74
						    ConnectionReference.getManualBookmarkId(refStr));
Packit Service b1ea74
						new_bookmark = false;
Packit Service b1ea74
					}
Packit Service b1ea74
					else if (ConnectionReference.isHostnameReference(refStr))
Packit Service b1ea74
					{
Packit Service b1ea74
						bookmark = new ManualBookmark();
Packit Service b1ea74
						bookmark.<ManualBookmark>get().setLabel(
Packit Service b1ea74
						    ConnectionReference.getHostname(refStr));
Packit Service b1ea74
						bookmark.<ManualBookmark>get().setHostname(
Packit Service b1ea74
						    ConnectionReference.getHostname(refStr));
Packit Service b1ea74
						new_bookmark = true;
Packit Service b1ea74
					}
Packit Service b1ea74
					else if (ConnectionReference.isFileReference(refStr))
Packit Service b1ea74
					{
Packit Service b1ea74
						String file = ConnectionReference.getFile(refStr);
Packit Service b1ea74
Packit Service b1ea74
						bookmark = new ManualBookmark();
Packit Service b1ea74
						bookmark.setLabel(file);
Packit Service b1ea74
Packit Service b1ea74
						try
Packit Service b1ea74
						{
Packit Service b1ea74
							RDPFileParser rdpFile = new RDPFileParser(file);
Packit Service b1ea74
							updateBookmarkFromFile((ManualBookmark)bookmark, rdpFile);
Packit Service b1ea74
Packit Service b1ea74
							bookmark.setLabel(new File(file).getName());
Packit Service b1ea74
							new_bookmark = true;
Packit Service b1ea74
						}
Packit Service b1ea74
						catch (IOException e)
Packit Service b1ea74
						{
Packit Service b1ea74
							Log.e(TAG, "Failed reading RDP file", e);
Packit Service b1ea74
						}
Packit Service b1ea74
					}
Packit Service b1ea74
				}
Packit Service b1ea74
			}
Packit Service b1ea74
Packit Service b1ea74
			// last chance - ensure we really have a valid bookmark
Packit Service b1ea74
			if (bookmark == null)
Packit Service b1ea74
				bookmark = new ManualBookmark();
Packit Service b1ea74
Packit Service b1ea74
			// hide gateway settings if we edit a non-manual bookmark
Packit Service b1ea74
			if (current_preferences == PREFERENCES_ADVANCED &&
Packit Service b1ea74
			    bookmark.getType() != ManualBookmark.TYPE_MANUAL)
Packit Service b1ea74
			{
Packit Service b1ea74
				PreferenceScreen screen = getPreferenceScreen();
Packit Service b1ea74
				screen.removePreference(findPreference("bookmark.enable_gateway"));
Packit Service b1ea74
				screen.removePreference(findPreference("bookmark.gateway"));
Packit Service b1ea74
			}
Packit Service b1ea74
Packit Service b1ea74
			updateH264Preferences();
Packit Service b1ea74
Packit Service b1ea74
			// update preferences from bookmark
Packit Service b1ea74
			bookmark.writeToSharedPreferences(mgr.getSharedPreferences());
Packit Service b1ea74
Packit Service b1ea74
			// no settings changed yet
Packit Service b1ea74
			settings_changed = false;
Packit Service b1ea74
		}
Packit Service b1ea74
Packit Service b1ea74
		// load the requested settings resource
Packit Service b1ea74
		if (getIntent() == null || getIntent().getData() == null)
Packit Service b1ea74
		{
Packit Service b1ea74
			addPreferencesFromResource(R.xml.bookmark_settings);
Packit Service b1ea74
			current_preferences = PREFERENCES_BOOKMARK;
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (getIntent().getData().toString().equals("preferences://screen_settings"))
Packit Service b1ea74
		{
Packit Service b1ea74
			addPreferencesFromResource(R.xml.screen_settings);
Packit Service b1ea74
			current_preferences = PREFERENCES_SCREEN;
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (getIntent().getData().toString().equals("preferences://performance_flags"))
Packit Service b1ea74
		{
Packit Service b1ea74
			addPreferencesFromResource(R.xml.performance_flags);
Packit Service b1ea74
			current_preferences = PREFERENCES_PERFORMANCE;
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (getIntent().getData().toString().equals("preferences://screen_settings_3g"))
Packit Service b1ea74
		{
Packit Service b1ea74
			addPreferencesFromResource(R.xml.screen_settings_3g);
Packit Service b1ea74
			current_preferences = PREFERENCES_SCREEN3G;
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (getIntent().getData().toString().equals("preferences://performance_flags_3g"))
Packit Service b1ea74
		{
Packit Service b1ea74
			addPreferencesFromResource(R.xml.performance_flags_3g);
Packit Service b1ea74
			current_preferences = PREFERENCES_PERFORMANCE3G;
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (getIntent().getData().toString().equals("preferences://advanced_settings"))
Packit Service b1ea74
		{
Packit Service b1ea74
			addPreferencesFromResource(R.xml.advanced_settings);
Packit Service b1ea74
			current_preferences = PREFERENCES_ADVANCED;
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (getIntent().getData().toString().equals("preferences://credentials_settings"))
Packit Service b1ea74
		{
Packit Service b1ea74
			addPreferencesFromResource(R.xml.credentials_settings);
Packit Service b1ea74
			current_preferences = PREFERENCES_CREDENTIALS;
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (getIntent().getData().toString().equals("preferences://gateway_settings"))
Packit Service b1ea74
		{
Packit Service b1ea74
			addPreferencesFromResource(R.xml.gateway_settings);
Packit Service b1ea74
			current_preferences = PREFERENCES_GATEWAY;
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (getIntent().getData().toString().equals("preferences://debug_settings"))
Packit Service b1ea74
		{
Packit Service b1ea74
			addPreferencesFromResource(R.xml.debug_settings);
Packit Service b1ea74
			current_preferences = PREFERENCES_DEBUG;
Packit Service b1ea74
		}
Packit Service b1ea74
		else
Packit Service b1ea74
		{
Packit Service b1ea74
			addPreferencesFromResource(R.xml.bookmark_settings);
Packit Service b1ea74
			current_preferences = PREFERENCES_BOOKMARK;
Packit Service b1ea74
		}
Packit Service b1ea74
Packit Service b1ea74
		// update UI with bookmark data
Packit Service b1ea74
		SharedPreferences spref = mgr.getSharedPreferences();
Packit Service b1ea74
		initSettings(spref);
Packit Service b1ea74
Packit Service b1ea74
		// register for preferences changed notification
Packit Service b1ea74
		mgr.getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
Packit Service b1ea74
Packit Service b1ea74
		// set the correct component names in our preferencescreen settings
Packit Service b1ea74
		setIntentComponentNames();
Packit Service b1ea74
Packit Service b1ea74
		updateH264Preferences();
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	private void updateH264Preferences()
Packit Service b1ea74
	{
Packit Service b1ea74
		if (!LibFreeRDP.hasH264Support())
Packit Service b1ea74
		{
Packit Service b1ea74
			final int preferenceIdList[] = { R.string.preference_key_h264,
Packit Service b1ea74
				                             R.string.preference_key_h264_3g };
Packit Service b1ea74
Packit Service b1ea74
			PreferenceManager mgr = getPreferenceManager();
Packit Service b1ea74
			for (int id : preferenceIdList)
Packit Service b1ea74
			{
Packit Service b1ea74
				final String key = getString(id);
Packit Service b1ea74
				Preference preference = mgr.findPreference(key);
Packit Service b1ea74
				if (preference != null)
Packit Service b1ea74
				{
Packit Service b1ea74
					preference.setEnabled(false);
Packit Service b1ea74
				}
Packit Service b1ea74
			}
Packit Service b1ea74
		}
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	private void updateBookmarkFromFile(ManualBookmark bookmark, RDPFileParser rdpFile)
Packit Service b1ea74
	{
Packit Service b1ea74
		String s;
Packit Service b1ea74
		Integer i;
Packit Service b1ea74
Packit Service b1ea74
		s = rdpFile.getString("full address");
Packit Service b1ea74
		if (s != null)
Packit Service b1ea74
		{
Packit Service b1ea74
			// this gets complicated as it can include port
Packit Service b1ea74
			if (s.lastIndexOf(":") > s.lastIndexOf("]"))
Packit Service b1ea74
			{
Packit Service b1ea74
				try
Packit Service b1ea74
				{
Packit Service b1ea74
					String port = s.substring(s.lastIndexOf(":") + 1);
Packit Service b1ea74
					bookmark.setPort(Integer.parseInt(port));
Packit Service b1ea74
				}
Packit Service b1ea74
				catch (NumberFormatException e)
Packit Service b1ea74
				{
Packit Service b1ea74
					Log.e(TAG, "Malformed address");
Packit Service b1ea74
				}
Packit Service b1ea74
Packit Service b1ea74
				s = s.substring(0, s.lastIndexOf(":"));
Packit Service b1ea74
			}
Packit Service b1ea74
Packit Service b1ea74
			// or even be an ipv6 address
Packit Service b1ea74
			if (s.startsWith("[") && s.endsWith("]"))
Packit Service b1ea74
				s = s.substring(1, s.length() - 1);
Packit Service b1ea74
Packit Service b1ea74
			bookmark.setHostname(s);
Packit Service b1ea74
		}
Packit Service b1ea74
Packit Service b1ea74
		i = rdpFile.getInteger("server port");
Packit Service b1ea74
		if (i != null)
Packit Service b1ea74
			bookmark.setPort(i);
Packit Service b1ea74
Packit Service b1ea74
		s = rdpFile.getString("username");
Packit Service b1ea74
		if (s != null)
Packit Service b1ea74
			bookmark.setUsername(s);
Packit Service b1ea74
Packit Service b1ea74
		s = rdpFile.getString("domain");
Packit Service b1ea74
		if (s != null)
Packit Service b1ea74
			bookmark.setDomain(s);
Packit Service b1ea74
Packit Service b1ea74
		i = rdpFile.getInteger("connect to console");
Packit Service b1ea74
		if (i != null)
Packit Service b1ea74
			bookmark.getAdvancedSettings().setConsoleMode(i == 1);
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	private void setIntentComponentNames()
Packit Service b1ea74
	{
Packit Service b1ea74
		// we set the component name for our sub-activity calls here because we
Packit Service b1ea74
		// don't know the package
Packit Service b1ea74
		// name of the main app in our library project.
Packit Service b1ea74
		ComponentName compName =
Packit Service b1ea74
		    new ComponentName(getPackageName(), BookmarkActivity.class.getName());
Packit Service b1ea74
		ArrayList<String> prefKeys = new ArrayList<String>();
Packit Service b1ea74
Packit Service b1ea74
		prefKeys.add("bookmark.credentials");
Packit Service b1ea74
		prefKeys.add("bookmark.screen");
Packit Service b1ea74
		prefKeys.add("bookmark.performance");
Packit Service b1ea74
		prefKeys.add("bookmark.advanced");
Packit Service b1ea74
		prefKeys.add("bookmark.screen_3g");
Packit Service b1ea74
		prefKeys.add("bookmark.performance_3g");
Packit Service b1ea74
		prefKeys.add("bookmark.gateway_settings");
Packit Service b1ea74
		prefKeys.add("bookmark.debug");
Packit Service b1ea74
Packit Service b1ea74
		for (String p : prefKeys)
Packit Service b1ea74
		{
Packit Service b1ea74
			Preference pref = findPreference(p);
Packit Service b1ea74
			if (pref != null)
Packit Service b1ea74
				pref.getIntent().setComponent(compName);
Packit Service b1ea74
		}
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	@Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
Packit Service b1ea74
	{
Packit Service b1ea74
		settings_changed = true;
Packit Service b1ea74
		switch (current_preferences)
Packit Service b1ea74
		{
Packit Service b1ea74
			case PREFERENCES_DEBUG:
Packit Service b1ea74
				debugSettingsChanged(sharedPreferences, key);
Packit Service b1ea74
				break;
Packit Service b1ea74
Packit Service b1ea74
			case PREFERENCES_BOOKMARK:
Packit Service b1ea74
				bookmarkSettingsChanged(sharedPreferences, key);
Packit Service b1ea74
				break;
Packit Service b1ea74
Packit Service b1ea74
			case PREFERENCES_ADVANCED:
Packit Service b1ea74
				advancedSettingsChanged(sharedPreferences, key);
Packit Service b1ea74
				break;
Packit Service b1ea74
Packit Service b1ea74
			case PREFERENCES_CREDENTIALS:
Packit Service b1ea74
				credentialsSettingsChanged(sharedPreferences, key);
Packit Service b1ea74
				break;
Packit Service b1ea74
Packit Service b1ea74
			case PREFERENCES_SCREEN:
Packit Service b1ea74
			case PREFERENCES_SCREEN3G:
Packit Service b1ea74
				screenSettingsChanged(sharedPreferences, key);
Packit Service b1ea74
				break;
Packit Service b1ea74
Packit Service b1ea74
			case PREFERENCES_GATEWAY:
Packit Service b1ea74
				gatewaySettingsChanged(sharedPreferences, key);
Packit Service b1ea74
				break;
Packit Service b1ea74
Packit Service b1ea74
			default:
Packit Service b1ea74
				break;
Packit Service b1ea74
		}
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	private void initSettings(SharedPreferences sharedPreferences)
Packit Service b1ea74
	{
Packit Service b1ea74
		switch (current_preferences)
Packit Service b1ea74
		{
Packit Service b1ea74
			case PREFERENCES_BOOKMARK:
Packit Service b1ea74
				initBookmarkSettings(sharedPreferences);
Packit Service b1ea74
				break;
Packit Service b1ea74
Packit Service b1ea74
			case PREFERENCES_ADVANCED:
Packit Service b1ea74
				initAdvancedSettings(sharedPreferences);
Packit Service b1ea74
				break;
Packit Service b1ea74
Packit Service b1ea74
			case PREFERENCES_CREDENTIALS:
Packit Service b1ea74
				initCredentialsSettings(sharedPreferences);
Packit Service b1ea74
				break;
Packit Service b1ea74
Packit Service b1ea74
			case PREFERENCES_SCREEN:
Packit Service b1ea74
				initScreenSettings(sharedPreferences);
Packit Service b1ea74
				break;
Packit Service b1ea74
Packit Service b1ea74
			case PREFERENCES_SCREEN3G:
Packit Service b1ea74
				initScreenSettings3G(sharedPreferences);
Packit Service b1ea74
				break;
Packit Service b1ea74
Packit Service b1ea74
			case PREFERENCES_GATEWAY:
Packit Service b1ea74
				initGatewaySettings(sharedPreferences);
Packit Service b1ea74
				break;
Packit Service b1ea74
Packit Service b1ea74
			case PREFERENCES_DEBUG:
Packit Service b1ea74
				initDebugSettings(sharedPreferences);
Packit Service b1ea74
				break;
Packit Service b1ea74
Packit Service b1ea74
			default:
Packit Service b1ea74
				break;
Packit Service b1ea74
		}
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	private void initBookmarkSettings(SharedPreferences sharedPreferences)
Packit Service b1ea74
	{
Packit Service b1ea74
		bookmarkSettingsChanged(sharedPreferences, "bookmark.label");
Packit Service b1ea74
		bookmarkSettingsChanged(sharedPreferences, "bookmark.hostname");
Packit Service b1ea74
		bookmarkSettingsChanged(sharedPreferences, "bookmark.port");
Packit Service b1ea74
		bookmarkSettingsChanged(sharedPreferences, "bookmark.username");
Packit Service b1ea74
		bookmarkSettingsChanged(sharedPreferences, "bookmark.resolution");
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	private void bookmarkSettingsChanged(SharedPreferences sharedPreferences, String key)
Packit Service b1ea74
	{
Packit Service b1ea74
		if (key.equals("bookmark.label") && findPreference(key) != null)
Packit Service b1ea74
			findPreference(key).setSummary(sharedPreferences.getString(key, ""));
Packit Service b1ea74
		else if (key.equals("bookmark.hostname") && findPreference(key) != null)
Packit Service b1ea74
			findPreference(key).setSummary(sharedPreferences.getString(key, ""));
Packit Service b1ea74
		else if (key.equals("bookmark.port") && findPreference(key) != null)
Packit Service b1ea74
			findPreference(key).setSummary(String.valueOf(sharedPreferences.getInt(key, -1)));
Packit Service b1ea74
		else if (key.equals("bookmark.username"))
Packit Service b1ea74
		{
Packit Service b1ea74
			String username = sharedPreferences.getString(key, "<none>");
Packit Service b1ea74
			if (username.length() == 0)
Packit Service b1ea74
				username = "<none>";
Packit Service b1ea74
			findPreference("bookmark.credentials").setSummary(username);
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (key.equals("bookmark.resolution") || key.equals("bookmark.colors") ||
Packit Service b1ea74
		         key.equals("bookmark.width") || key.equals("bookmark.height"))
Packit Service b1ea74
		{
Packit Service b1ea74
			String resolution = sharedPreferences.getString("bookmark.resolution", "800x600");
Packit Service b1ea74
			// compare english string from resolutions_values_array array,
Packit Service b1ea74
			// decode to localized
Packit Service b1ea74
			// text for display
Packit Service b1ea74
			if (resolution.equals("automatic"))
Packit Service b1ea74
			{
Packit Service b1ea74
				resolution = getResources().getString(R.string.resolution_automatic);
Packit Service b1ea74
			}
Packit Service b1ea74
			if (resolution.equals("custom"))
Packit Service b1ea74
			{
Packit Service b1ea74
				resolution = getResources().getString(R.string.resolution_custom);
Packit Service b1ea74
			}
Packit Service b1ea74
			if (resolution.equals("fitscreen"))
Packit Service b1ea74
			{
Packit Service b1ea74
				resolution = getResources().getString(R.string.resolution_fit);
Packit Service b1ea74
			}
Packit Service b1ea74
			resolution += "@" + sharedPreferences.getInt("bookmark.colors", 16);
Packit Service b1ea74
			findPreference("bookmark.screen").setSummary(resolution);
Packit Service b1ea74
		}
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	private void initAdvancedSettings(SharedPreferences sharedPreferences)
Packit Service b1ea74
	{
Packit Service b1ea74
		advancedSettingsChanged(sharedPreferences, "bookmark.enable_gateway_settings");
Packit Service b1ea74
		advancedSettingsChanged(sharedPreferences, "bookmark.enable_3g_settings");
Packit Service b1ea74
		advancedSettingsChanged(sharedPreferences, "bookmark.security");
Packit Service b1ea74
		advancedSettingsChanged(sharedPreferences, "bookmark.resolution_3g");
Packit Service b1ea74
		advancedSettingsChanged(sharedPreferences, "bookmark.remote_program");
Packit Service b1ea74
		advancedSettingsChanged(sharedPreferences, "bookmark.work_dir");
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	private void advancedSettingsChanged(SharedPreferences sharedPreferences, String key)
Packit Service b1ea74
	{
Packit Service b1ea74
		if (key.equals("bookmark.enable_gateway_settings"))
Packit Service b1ea74
		{
Packit Service b1ea74
			boolean enabled = sharedPreferences.getBoolean(key, false);
Packit Service b1ea74
			findPreference("bookmark.gateway_settings").setEnabled(enabled);
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (key.equals("bookmark.enable_3g_settings"))
Packit Service b1ea74
		{
Packit Service b1ea74
			boolean enabled = sharedPreferences.getBoolean(key, false);
Packit Service b1ea74
			findPreference("bookmark.screen_3g").setEnabled(enabled);
Packit Service b1ea74
			findPreference("bookmark.performance_3g").setEnabled(enabled);
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (key.equals("bookmark.security"))
Packit Service b1ea74
		{
Packit Service b1ea74
			ListPreference listPreference = (ListPreference)findPreference(key);
Packit Service b1ea74
			CharSequence security = listPreference.getEntries()[sharedPreferences.getInt(key, 0)];
Packit Service b1ea74
			listPreference.setSummary(security);
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (key.equals("bookmark.resolution_3g") || key.equals("bookmark.colors_3g") ||
Packit Service b1ea74
		         key.equals("bookmark.width_3g") || key.equals("bookmark.height_3g"))
Packit Service b1ea74
		{
Packit Service b1ea74
			String resolution = sharedPreferences.getString("bookmark.resolution_3g", "800x600");
Packit Service b1ea74
			if (resolution.equals("automatic"))
Packit Service b1ea74
				resolution = getResources().getString(R.string.resolution_automatic);
Packit Service b1ea74
			else if (resolution.equals("custom"))
Packit Service b1ea74
				resolution = getResources().getString(R.string.resolution_custom);
Packit Service b1ea74
			resolution += "@" + sharedPreferences.getInt("bookmark.colors_3g", 16);
Packit Service b1ea74
			findPreference("bookmark.screen_3g").setSummary(resolution);
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (key.equals("bookmark.remote_program"))
Packit Service b1ea74
			findPreference(key).setSummary(sharedPreferences.getString(key, ""));
Packit Service b1ea74
		else if (key.equals("bookmark.work_dir"))
Packit Service b1ea74
			findPreference(key).setSummary(sharedPreferences.getString(key, ""));
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	private void initCredentialsSettings(SharedPreferences sharedPreferences)
Packit Service b1ea74
	{
Packit Service b1ea74
		credentialsSettingsChanged(sharedPreferences, "bookmark.username");
Packit Service b1ea74
		credentialsSettingsChanged(sharedPreferences, "bookmark.password");
Packit Service b1ea74
		credentialsSettingsChanged(sharedPreferences, "bookmark.domain");
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	private void credentialsSettingsChanged(SharedPreferences sharedPreferences, String key)
Packit Service b1ea74
	{
Packit Service b1ea74
		if (key.equals("bookmark.username"))
Packit Service b1ea74
			findPreference(key).setSummary(sharedPreferences.getString(key, ""));
Packit Service b1ea74
		else if (key.equals("bookmark.password"))
Packit Service b1ea74
		{
Packit Service b1ea74
			if (sharedPreferences.getString(key, "").length() == 0)
Packit Service b1ea74
				findPreference(key).setSummary(
Packit Service b1ea74
				    getResources().getString(R.string.settings_password_empty));
Packit Service b1ea74
			else
Packit Service b1ea74
				findPreference(key).setSummary(
Packit Service b1ea74
				    getResources().getString(R.string.settings_password_present));
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (key.equals("bookmark.domain"))
Packit Service b1ea74
			findPreference(key).setSummary(sharedPreferences.getString(key, ""));
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	private void initScreenSettings(SharedPreferences sharedPreferences)
Packit Service b1ea74
	{
Packit Service b1ea74
		screenSettingsChanged(sharedPreferences, "bookmark.colors");
Packit Service b1ea74
		screenSettingsChanged(sharedPreferences, "bookmark.resolution");
Packit Service b1ea74
		screenSettingsChanged(sharedPreferences, "bookmark.width");
Packit Service b1ea74
		screenSettingsChanged(sharedPreferences, "bookmark.height");
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	private void initScreenSettings3G(SharedPreferences sharedPreferences)
Packit Service b1ea74
	{
Packit Service b1ea74
		screenSettingsChanged(sharedPreferences, "bookmark.colors_3g");
Packit Service b1ea74
		screenSettingsChanged(sharedPreferences, "bookmark.resolution_3g");
Packit Service b1ea74
		screenSettingsChanged(sharedPreferences, "bookmark.width_3g");
Packit Service b1ea74
		screenSettingsChanged(sharedPreferences, "bookmark.height_3g");
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	private void screenSettingsChanged(SharedPreferences sharedPreferences, String key)
Packit Service b1ea74
	{
Packit Service b1ea74
		// could happen during initialization because 3g and non-3g settings
Packit Service b1ea74
		// share this routine - just skip
Packit Service b1ea74
		if (findPreference(key) == null)
Packit Service b1ea74
			return;
Packit Service b1ea74
Packit Service b1ea74
		if (key.equals("bookmark.colors") || key.equals("bookmark.colors_3g"))
Packit Service b1ea74
		{
Packit Service b1ea74
			ListPreference listPreference = (ListPreference)findPreference(key);
Packit Service b1ea74
			listPreference.setSummary(listPreference.getEntry());
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (key.equals("bookmark.resolution") || key.equals("bookmark.resolution_3g"))
Packit Service b1ea74
		{
Packit Service b1ea74
			ListPreference listPreference = (ListPreference)findPreference(key);
Packit Service b1ea74
			listPreference.setSummary(listPreference.getEntry());
Packit Service b1ea74
Packit Service b1ea74
			String value = listPreference.getValue();
Packit Service b1ea74
			boolean enabled = value.equalsIgnoreCase("custom");
Packit Service b1ea74
			if (key.equals("bookmark.resolution"))
Packit Service b1ea74
			{
Packit Service b1ea74
				findPreference("bookmark.width").setEnabled(enabled);
Packit Service b1ea74
				findPreference("bookmark.height").setEnabled(enabled);
Packit Service b1ea74
			}
Packit Service b1ea74
			else
Packit Service b1ea74
			{
Packit Service b1ea74
				findPreference("bookmark.width_3g").setEnabled(enabled);
Packit Service b1ea74
				findPreference("bookmark.height_3g").setEnabled(enabled);
Packit Service b1ea74
			}
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (key.equals("bookmark.width") || key.equals("bookmark.width_3g"))
Packit Service b1ea74
			findPreference(key).setSummary(String.valueOf(sharedPreferences.getInt(key, 800)));
Packit Service b1ea74
		else if (key.equals("bookmark.height") || key.equals("bookmark.height_3g"))
Packit Service b1ea74
			findPreference(key).setSummary(String.valueOf(sharedPreferences.getInt(key, 600)));
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	private void initDebugSettings(SharedPreferences sharedPreferences)
Packit Service b1ea74
	{
Packit Service b1ea74
		debugSettingsChanged(sharedPreferences, "bookmark.debug_level");
Packit Service b1ea74
		debugSettingsChanged(sharedPreferences, "bookmark.async_channel");
Packit Service b1ea74
		debugSettingsChanged(sharedPreferences, "bookmark.async_update");
Packit Service b1ea74
		debugSettingsChanged(sharedPreferences, "bookmark.async_input");
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	private void initGatewaySettings(SharedPreferences sharedPreferences)
Packit Service b1ea74
	{
Packit Service b1ea74
		gatewaySettingsChanged(sharedPreferences, "bookmark.gateway_hostname");
Packit Service b1ea74
		gatewaySettingsChanged(sharedPreferences, "bookmark.gateway_port");
Packit Service b1ea74
		gatewaySettingsChanged(sharedPreferences, "bookmark.gateway_username");
Packit Service b1ea74
		gatewaySettingsChanged(sharedPreferences, "bookmark.gateway_password");
Packit Service b1ea74
		gatewaySettingsChanged(sharedPreferences, "bookmark.gateway_domain");
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	private void debugSettingsChanged(SharedPreferences sharedPreferences, String key)
Packit Service b1ea74
	{
Packit Service b1ea74
		if (key.equals("bookmark.debug_level"))
Packit Service b1ea74
		{
Packit Service b1ea74
			String level = sharedPreferences.getString(key, "INFO");
Packit Service b1ea74
			Preference pref = findPreference("bookmark.debug_level");
Packit Service b1ea74
			pref.setDefaultValue(level);
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (key.equals("bookmark.async_channel"))
Packit Service b1ea74
		{
Packit Service b1ea74
			boolean enabled = sharedPreferences.getBoolean(key, false);
Packit Service b1ea74
			Preference pref = findPreference("bookmark.async_channel");
Packit Service b1ea74
			pref.setDefaultValue(enabled);
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (key.equals("bookmark.async_update"))
Packit Service b1ea74
		{
Packit Service b1ea74
			boolean enabled = sharedPreferences.getBoolean(key, false);
Packit Service b1ea74
			Preference pref = findPreference("bookmark.async_update");
Packit Service b1ea74
			pref.setDefaultValue(enabled);
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (key.equals("bookmark.async_input"))
Packit Service b1ea74
		{
Packit Service b1ea74
			boolean enabled = sharedPreferences.getBoolean(key, false);
Packit Service b1ea74
			Preference pref = findPreference("bookmark.async_input");
Packit Service b1ea74
			pref.setDefaultValue(enabled);
Packit Service b1ea74
		}
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	private void gatewaySettingsChanged(SharedPreferences sharedPreferences, String key)
Packit Service b1ea74
	{
Packit Service b1ea74
		if (key.equals("bookmark.gateway_hostname"))
Packit Service b1ea74
		{
Packit Service b1ea74
			findPreference(key).setSummary(sharedPreferences.getString(key, ""));
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (key.equals("bookmark.gateway_port"))
Packit Service b1ea74
		{
Packit Service b1ea74
			findPreference(key).setSummary(String.valueOf(sharedPreferences.getInt(key, 443)));
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (key.equals("bookmark.gateway_username"))
Packit Service b1ea74
		{
Packit Service b1ea74
			findPreference(key).setSummary(sharedPreferences.getString(key, ""));
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (key.equals("bookmark.gateway_password"))
Packit Service b1ea74
		{
Packit Service b1ea74
			if (sharedPreferences.getString(key, "").length() == 0)
Packit Service b1ea74
				findPreference(key).setSummary(
Packit Service b1ea74
				    getResources().getString(R.string.settings_password_empty));
Packit Service b1ea74
			else
Packit Service b1ea74
				findPreference(key).setSummary(
Packit Service b1ea74
				    getResources().getString(R.string.settings_password_present));
Packit Service b1ea74
		}
Packit Service b1ea74
		else if (key.equals("bookmark.gateway_domain"))
Packit Service b1ea74
			findPreference(key).setSummary(sharedPreferences.getString(key, ""));
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	private boolean verifySettings(SharedPreferences sharedPreferences)
Packit Service b1ea74
	{
Packit Service b1ea74
Packit Service b1ea74
		boolean verifyFailed = false;
Packit Service b1ea74
		// perform sanity checks on settings
Packit Service b1ea74
		// Label set
Packit Service b1ea74
		if (sharedPreferences.getString("bookmark.label", "").length() == 0)
Packit Service b1ea74
			verifyFailed = true;
Packit Service b1ea74
Packit Service b1ea74
		// Server and port specified
Packit Service b1ea74
		if (!verifyFailed && sharedPreferences.getString("bookmark.hostname", "").length() == 0)
Packit Service b1ea74
			verifyFailed = true;
Packit Service b1ea74
Packit Service b1ea74
		// Server and port specified
Packit Service b1ea74
		if (!verifyFailed && sharedPreferences.getInt("bookmark.port", -1) <= 0)
Packit Service b1ea74
			verifyFailed = true;
Packit Service b1ea74
Packit Service b1ea74
		// if an error occurred - display toast and return false
Packit Service b1ea74
		return (!verifyFailed);
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	private void finishAndResetBookmark()
Packit Service b1ea74
	{
Packit Service b1ea74
		bookmark = null;
Packit Service b1ea74
		getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(
Packit Service b1ea74
		    this);
Packit Service b1ea74
		finish();
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	@Override public void onBackPressed()
Packit Service b1ea74
	{
Packit Service b1ea74
		// only proceed if we are in the main preferences screen
Packit Service b1ea74
		if (current_preferences != PREFERENCES_BOOKMARK)
Packit Service b1ea74
		{
Packit Service b1ea74
			super.onBackPressed();
Packit Service b1ea74
			getPreferenceManager()
Packit Service b1ea74
			    .getSharedPreferences()
Packit Service b1ea74
			    .unregisterOnSharedPreferenceChangeListener(this);
Packit Service b1ea74
			return;
Packit Service b1ea74
		}
Packit Service b1ea74
Packit Service b1ea74
		SharedPreferences sharedPreferences = getPreferenceManager().getSharedPreferences();
Packit Service b1ea74
		if (!verifySettings(sharedPreferences))
Packit Service b1ea74
		{
Packit Service b1ea74
			// ask the user if he wants to cancel or continue editing
Packit Service b1ea74
			AlertDialog.Builder builder = new AlertDialog.Builder(this);
Packit Service b1ea74
			builder.setTitle(R.string.error_bookmark_incomplete_title)
Packit Service b1ea74
			    .setMessage(R.string.error_bookmark_incomplete)
Packit Service b1ea74
			    .setPositiveButton(R.string.cancel,
Packit Service b1ea74
			                       new DialogInterface.OnClickListener() {
Packit Service b1ea74
				                       @Override
Packit Service b1ea74
				                       public void onClick(DialogInterface dialog, int which)
Packit Service b1ea74
				                       {
Packit Service b1ea74
					                       finishAndResetBookmark();
Packit Service b1ea74
				                       }
Packit Service b1ea74
			                       })
Packit Service b1ea74
			    .setNegativeButton(R.string.cont,
Packit Service b1ea74
			                       new DialogInterface.OnClickListener() {
Packit Service b1ea74
				                       @Override
Packit Service b1ea74
				                       public void onClick(DialogInterface dialog, int which)
Packit Service b1ea74
				                       {
Packit Service b1ea74
					                       dialog.cancel();
Packit Service b1ea74
				                       }
Packit Service b1ea74
			                       })
Packit Service b1ea74
			    .show();
Packit Service b1ea74
Packit Service b1ea74
			return;
Packit Service b1ea74
		}
Packit Service b1ea74
		else
Packit Service b1ea74
		{
Packit Service b1ea74
			// ask the user if he wants to save or cancel editing if a setting
Packit Service b1ea74
			// has changed
Packit Service b1ea74
			if (new_bookmark || settings_changed)
Packit Service b1ea74
			{
Packit Service b1ea74
				AlertDialog.Builder builder = new AlertDialog.Builder(this);
Packit Service b1ea74
				builder.setTitle(R.string.dlg_title_save_bookmark)
Packit Service b1ea74
				    .setMessage(R.string.dlg_save_bookmark)
Packit Service b1ea74
				    .setPositiveButton(
Packit Service b1ea74
				        R.string.yes,
Packit Service b1ea74
				        new DialogInterface.OnClickListener() {
Packit Service b1ea74
					        @Override public void onClick(DialogInterface dialog, int which)
Packit Service b1ea74
					        {
Packit Service b1ea74
						        // read shared prefs back to bookmark
Packit Service b1ea74
						        bookmark.readFromSharedPreferences(
Packit Service b1ea74
						            getPreferenceManager().getSharedPreferences());
Packit Service b1ea74
Packit Service b1ea74
						        BookmarkBaseGateway bookmarkGateway;
Packit Service b1ea74
						        if (bookmark.getType() == BookmarkBase.TYPE_MANUAL)
Packit Service b1ea74
						        {
Packit Service b1ea74
							        bookmarkGateway = GlobalApp.getManualBookmarkGateway();
Packit Service b1ea74
							        // remove any history entry for this
Packit Service b1ea74
							        // bookmark
Packit Service b1ea74
							        GlobalApp.getQuickConnectHistoryGateway().removeHistoryItem(
Packit Service b1ea74
							            bookmark.<ManualBookmark>get().getHostname());
Packit Service b1ea74
						        }
Packit Service b1ea74
						        else
Packit Service b1ea74
						        {
Packit Service b1ea74
							        assert false;
Packit Service b1ea74
							        return;
Packit Service b1ea74
						        }
Packit Service b1ea74
Packit Service b1ea74
						        // insert or update bookmark and leave
Packit Service b1ea74
						        // activity
Packit Service b1ea74
						        if (bookmark.getId() > 0)
Packit Service b1ea74
							        bookmarkGateway.update(bookmark);
Packit Service b1ea74
						        else
Packit Service b1ea74
							        bookmarkGateway.insert(bookmark);
Packit Service b1ea74
Packit Service b1ea74
						        finishAndResetBookmark();
Packit Service b1ea74
					        }
Packit Service b1ea74
				        })
Packit Service b1ea74
				    .setNegativeButton(R.string.no,
Packit Service b1ea74
				                       new DialogInterface.OnClickListener() {
Packit Service b1ea74
					                       @Override
Packit Service b1ea74
					                       public void onClick(DialogInterface dialog, int which)
Packit Service b1ea74
					                       {
Packit Service b1ea74
						                       finishAndResetBookmark();
Packit Service b1ea74
					                       }
Packit Service b1ea74
				                       })
Packit Service b1ea74
				    .show();
Packit Service b1ea74
			}
Packit Service b1ea74
			else
Packit Service b1ea74
			{
Packit Service b1ea74
				finishAndResetBookmark();
Packit Service b1ea74
			}
Packit Service b1ea74
		}
Packit Service b1ea74
	}
Packit Service fa4841
}