bug fix: prepareFileUsage didn't work when file was cached but device offline
This commit is contained in:
		| @@ -20,7 +20,7 @@ | |||||||
|     <DebugType>full</DebugType> |     <DebugType>full</DebugType> | ||||||
|     <Optimize>False</Optimize> |     <Optimize>False</Optimize> | ||||||
|     <OutputPath>bin\Debug</OutputPath> |     <OutputPath>bin\Debug</OutputPath> | ||||||
|     <DefineConstants>DEBUG;EXCLUDE_TWOFISH;INCLUDE_KEYBOARD;EXCLUDE_KEYTRANSFORM;EXCLUDE_FILECHOOSER;EXCLUDE_JAVAFILESTORAGE</DefineConstants> |     <DefineConstants>DEBUG;EXCLUDE_TWOFISH;INCLUDE_KEYBOARD;EXCLUDE_KEYTRANSFORM;INCLUDE_FILECHOOSER;INCLUDE_JAVAFILESTORAGE</DefineConstants> | ||||||
|     <ErrorReport>prompt</ErrorReport> |     <ErrorReport>prompt</ErrorReport> | ||||||
|     <WarningLevel>4</WarningLevel> |     <WarningLevel>4</WarningLevel> | ||||||
|     <ConsolePause>False</ConsolePause> |     <ConsolePause>False</ConsolePause> | ||||||
|   | |||||||
| @@ -169,7 +169,7 @@ namespace keepass2android.Io | |||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		public void PrepareFileUsage(IFileStorageSetupInitiatorActivity activity, IOConnectionInfo ioc, int requestCode) | 		public void PrepareFileUsage(IFileStorageSetupInitiatorActivity activity, IOConnectionInfo ioc, int requestCode, bool alwaysReturnSuccess) | ||||||
| 		{ | 		{ | ||||||
| 			Intent intent = new Intent(); | 			Intent intent = new Intent(); | ||||||
| 			activity.IocToIntent(intent, ioc); | 			activity.IocToIntent(intent, ioc); | ||||||
|   | |||||||
| @@ -451,9 +451,10 @@ namespace keepass2android.Io | |||||||
| 			_cachedStorage.StartSelectFile(activity, isForSave, requestCode, protocolId); | 			_cachedStorage.StartSelectFile(activity, isForSave, requestCode, protocolId); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		public void PrepareFileUsage(IFileStorageSetupInitiatorActivity activity, IOConnectionInfo ioc, int requestCode) | 		public void PrepareFileUsage(IFileStorageSetupInitiatorActivity activity, IOConnectionInfo ioc, int requestCode, bool alwaysReturnSuccess) | ||||||
| 		{ | 		{ | ||||||
| 			_cachedStorage.PrepareFileUsage(activity, ioc, requestCode); | 			//we try to prepare the file usage by the underlying file storage but if the ioc is cached, set the flag to ignore errors  | ||||||
|  | 			_cachedStorage.PrepareFileUsage(activity, ioc, requestCode, alwaysReturnSuccess || IsCached(ioc)); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		public void OnCreate(IFileStorageSetupActivity activity, Bundle savedInstanceState) | 		public void OnCreate(IFileStorageSetupActivity activity, Bundle savedInstanceState) | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ namespace keepass2android.Io | |||||||
| 	public interface IFileStorageSetupInitiatorActivity | 	public interface IFileStorageSetupInitiatorActivity | ||||||
| 	{ | 	{ | ||||||
| 		void StartSelectFileProcess(IOConnectionInfo ioc, bool isForSave, int requestCode); | 		void StartSelectFileProcess(IOConnectionInfo ioc, bool isForSave, int requestCode); | ||||||
| 		void StartFileUsageProcess(IOConnectionInfo ioc, int requestCode); | 		void StartFileUsageProcess(IOConnectionInfo ioc, int requestCode, bool alwaysReturnSuccess); | ||||||
| 		void OnImmediateResult(int requestCode, int result, Intent intent); | 		void OnImmediateResult(int requestCode, int result, Intent intent); | ||||||
|  |  | ||||||
| 		Activity Activity { get;  } | 		Activity Activity { get;  } | ||||||
|   | |||||||
| @@ -21,6 +21,7 @@ namespace keepass2android.Io | |||||||
| 		public static String ProcessNameFileUsageSetup = "FILE_USAGE_SETUP"; | 		public static String ProcessNameFileUsageSetup = "FILE_USAGE_SETUP"; | ||||||
|  |  | ||||||
| 		public static String ExtraProcessName = "EXTRA_PROCESS_NAME"; | 		public static String ExtraProcessName = "EXTRA_PROCESS_NAME"; | ||||||
|  | 		public static String ExtraAlwaysReturnSuccess = "EXTRA_ALWAYS_RETURN_SUCCESS"; | ||||||
| 		public static String ExtraPath = "PATH"; | 		public static String ExtraPath = "PATH"; | ||||||
| 		public static String ExtraIsForSave = "IS_FOR_SAVE"; | 		public static String ExtraIsForSave = "IS_FOR_SAVE"; | ||||||
| 		public static String ExtraErrorMessage = "EXTRA_ERROR_MESSAGE"; | 		public static String ExtraErrorMessage = "EXTRA_ERROR_MESSAGE"; | ||||||
| @@ -136,8 +137,11 @@ namespace keepass2android.Io | |||||||
| 		/// <summary> | 		/// <summary> | ||||||
| 		/// Initiates the process for choosing a file in the given file storage. | 		/// Initiates the process for choosing a file in the given file storage. | ||||||
| 		/// The file storage should either call OnImmediateResult or StartFileUsageProcess | 		/// The file storage should either call OnImmediateResult or StartFileUsageProcess | ||||||
|  | 		/// If alwaysReturnSuccess is true, the activity should be finished with ResultCode Ok. | ||||||
|  | 		/// This can make sense if a higher-level file storage has the file cached by still wants to  | ||||||
|  | 		/// give the cached storage the chance to initialize file access. | ||||||
| 		/// </summary> | 		/// </summary> | ||||||
| 		void PrepareFileUsage(IFileStorageSetupInitiatorActivity activity, IOConnectionInfo ioc, int requestCode); | 		void PrepareFileUsage(IFileStorageSetupInitiatorActivity activity, IOConnectionInfo ioc, int requestCode, bool alwaysReturnSuccess); | ||||||
|  |  | ||||||
| 		//Setup methods: these are called from the setup activity so the file storage can handle UI events for authorization etc. | 		//Setup methods: these are called from the setup activity so the file storage can handle UI events for authorization etc. | ||||||
| 		void OnCreate(IFileStorageSetupActivity activity, Bundle savedInstanceState); | 		void OnCreate(IFileStorageSetupActivity activity, Bundle savedInstanceState); | ||||||
|   | |||||||
| @@ -98,7 +98,7 @@ namespace keepass2android.Io | |||||||
| 			Kp2aLog.Log(e.Message); | 			Kp2aLog.Log(e.Message); | ||||||
| 			var ex = new Exception(e.LocalizedMessage ??  | 			var ex = new Exception(e.LocalizedMessage ??  | ||||||
| 				e.Message ??  | 				e.Message ??  | ||||||
| 				_app.GetResourceString(UiStringKey.ErrorOcurred)+e, e); | 				_app.GetResourceString(UiStringKey.ErrorOcurred)+e.GetType().Name, e); | ||||||
| 			return ex;  | 			return ex;  | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| @@ -249,9 +249,9 @@ namespace keepass2android.Io | |||||||
| 			_jfs.StartSelectFile((IJavaFileStorageFileStorageSetupInitiatorActivity) activity, isForSave, requestCode); | 			_jfs.StartSelectFile((IJavaFileStorageFileStorageSetupInitiatorActivity) activity, isForSave, requestCode); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		public void PrepareFileUsage(IFileStorageSetupInitiatorActivity activity, IOConnectionInfo ioc, int requestCode) | 		public void PrepareFileUsage(IFileStorageSetupInitiatorActivity activity, IOConnectionInfo ioc, int requestCode, Boolean alwaysReturnSuccess) | ||||||
| 		{ | 		{ | ||||||
| 			_jfs.PrepareFileUsage((IJavaFileStorageFileStorageSetupInitiatorActivity)activity, IocToPath(ioc), requestCode); | 			_jfs.PrepareFileUsage((IJavaFileStorageFileStorageSetupInitiatorActivity)activity, IocToPath(ioc), requestCode, alwaysReturnSuccess); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		public void OnCreate(IFileStorageSetupActivity activity, Bundle savedInstanceState) | 		public void OnCreate(IFileStorageSetupActivity activity, Bundle savedInstanceState) | ||||||
|   | |||||||
| @@ -20,7 +20,7 @@ | |||||||
|     <DebugType>full</DebugType> |     <DebugType>full</DebugType> | ||||||
|     <Optimize>false</Optimize> |     <Optimize>false</Optimize> | ||||||
|     <OutputPath>bin\Debug\</OutputPath> |     <OutputPath>bin\Debug\</OutputPath> | ||||||
|     <DefineConstants>TRACE;DEBUG;EXCLUDE_TWOFISH;INCLUDE_KEYBOARD;EXCLUDE_KEYTRANSFORM;EXCLUDE_FILECHOOSER;EXCLUDE_JAVAFILESTORAGE</DefineConstants> |     <DefineConstants>TRACE;DEBUG;EXCLUDE_TWOFISH;INCLUDE_KEYBOARD;EXCLUDE_KEYTRANSFORM;INCLUDE_FILECHOOSER;INCLUDE_JAVAFILESTORAGE</DefineConstants> | ||||||
|     <ErrorReport>prompt</ErrorReport> |     <ErrorReport>prompt</ErrorReport> | ||||||
|     <WarningLevel>4</WarningLevel> |     <WarningLevel>4</WarningLevel> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|   | |||||||
| @@ -31,7 +31,7 @@ import com.dropbox.client2.session.Session.AccessType; | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| public class DropboxFileStorage implements JavaFileStorage { | public class DropboxFileStorage extends JavaFileStorageBase { | ||||||
| 	 | 	 | ||||||
| 	//NOTE: also adjust secret! | 	//NOTE: also adjust secret! | ||||||
| 	//final static private String APP_KEY = "i8shu7v1hgh7ynt"; //KP2A | 	//final static private String APP_KEY = "i8shu7v1hgh7ynt"; //KP2A | ||||||
| @@ -405,7 +405,7 @@ public class DropboxFileStorage implements JavaFileStorage { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	@Override | 	@Override | ||||||
| 	public void prepareFileUsage(FileStorageSetupInitiatorActivity activity, String path, int requestCode) { | 	public void prepareFileUsage(FileStorageSetupInitiatorActivity activity, String path, int requestCode, boolean alwaysReturnSuccess) { | ||||||
| 		if (isConnected()) | 		if (isConnected()) | ||||||
| 		{ | 		{ | ||||||
| 			Intent intent = new Intent(); | 			Intent intent = new Intent(); | ||||||
| @@ -414,7 +414,7 @@ public class DropboxFileStorage implements JavaFileStorage { | |||||||
| 		} | 		} | ||||||
| 		else | 		else | ||||||
| 		{ | 		{ | ||||||
| 			activity.startFileUsageProcess(path, requestCode);	 | 			activity.startFileUsageProcess(path, requestCode, alwaysReturnSuccess);	 | ||||||
| 		} | 		} | ||||||
| 		 | 		 | ||||||
| 	} | 	} | ||||||
| @@ -429,6 +429,9 @@ public class DropboxFileStorage implements JavaFileStorage { | |||||||
| 	@Override | 	@Override | ||||||
| 	public void onResume(FileStorageSetupActivity activity) { | 	public void onResume(FileStorageSetupActivity activity) { | ||||||
| 		 | 		 | ||||||
|  | 		if (activity.getProcessName().equals(PROCESS_NAME_SELECTFILE)) | ||||||
|  | 			activity.getState().putString(EXTRA_PATH, activity.getPath()); | ||||||
|  | 		 | ||||||
| 		Log.d("KP2AJ", "OnResume. LoggedIn="+mLoggedIn); | 		Log.d("KP2AJ", "OnResume. LoggedIn="+mLoggedIn); | ||||||
| 		if (mLoggedIn) | 		if (mLoggedIn) | ||||||
| 		{ | 		{ | ||||||
| @@ -454,12 +457,8 @@ public class DropboxFileStorage implements JavaFileStorage { | |||||||
|                 finishActivityWithSuccess(activity); |                 finishActivityWithSuccess(activity); | ||||||
|                 return; |                 return; | ||||||
|                  |                  | ||||||
|             } catch (Throwable t) { |             } catch (Exception e) { | ||||||
|                 Log.i(TAG, "Error authenticating", t); |                 finishWithError(activity, e); | ||||||
|             	Intent data = new Intent(); |  | ||||||
|             	data.putExtra(EXTRA_ERROR_MESSAGE, t.getMessage()); |  | ||||||
|             	((Activity)activity).setResult(Activity.RESULT_CANCELED, data); |  | ||||||
|             	((Activity)activity).finish(); |  | ||||||
|             	return; |             	return; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @@ -483,33 +482,6 @@ public class DropboxFileStorage implements JavaFileStorage { | |||||||
|         } |         } | ||||||
|          |          | ||||||
| 		 | 		 | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	private void finishActivityWithSuccess(FileStorageSetupActivity setupActivity) { |  | ||||||
| 		Log.d("KP2AJ", "Success with authentcating!"); |  | ||||||
| 		Activity activity = (Activity)setupActivity; |  | ||||||
| 		 |  | ||||||
| 		if (setupActivity.getProcessName().equals(PROCESS_NAME_FILE_USAGE_SETUP)) |  | ||||||
| 		{ |  | ||||||
| 			Intent data = new Intent(); |  | ||||||
| 			data.putExtra(EXTRA_IS_FOR_SAVE, setupActivity.isForSave()); |  | ||||||
| 			data.putExtra(EXTRA_PATH, setupActivity.getPath()); |  | ||||||
| 			activity.setResult(RESULT_FILEUSAGE_PREPARED, data); |  | ||||||
| 			activity.finish(); |  | ||||||
| 			return; |  | ||||||
| 		} |  | ||||||
| 		if (setupActivity.getProcessName().equals(PROCESS_NAME_SELECTFILE)) |  | ||||||
| 		{ |  | ||||||
| 			Intent data = new Intent(); |  | ||||||
| 			data.putExtra(EXTRA_PATH, setupActivity.getPath()); |  | ||||||
| 			activity.setResult(RESULT_FILECHOOSER_PREPARED, data); |  | ||||||
| 			activity.finish(); |  | ||||||
| 			return; |  | ||||||
| 		}	 |  | ||||||
| 		 |  | ||||||
| 		Log.w("KP2AJ", "Unknown process: " + setupActivity.getProcessName()); |  | ||||||
| 		 |  | ||||||
| 		 |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	@Override | 	@Override | ||||||
|   | |||||||
| @@ -623,7 +623,7 @@ public class GoogleDriveFileStorage extends JavaFileStorageBase { | |||||||
| 			try { | 			try { | ||||||
| 				gdrivePath.setPathWithoutVerify(accountNameOrPath); | 				gdrivePath.setPathWithoutVerify(accountNameOrPath); | ||||||
| 			} catch (Exception e) { | 			} catch (Exception e) { | ||||||
| 				finishWithError((Activity)setupAct, e); | 				finishWithError(setupAct, e); | ||||||
| 			} | 			} | ||||||
| 			accountNameTemp = gdrivePath.getAccount(); | 			accountNameTemp = gdrivePath.getAccount(); | ||||||
| 		} | 		} | ||||||
| @@ -676,7 +676,7 @@ public class GoogleDriveFileStorage extends JavaFileStorageBase { | |||||||
| 					} | 					} | ||||||
| 					else | 					else | ||||||
| 					{ | 					{ | ||||||
| 						finishWithError(activity, error); | 						finishWithError(setupAct, error); | ||||||
| 					} | 					} | ||||||
| 				}  else if ( isCancelled()) { | 				}  else if ( isCancelled()) { | ||||||
| 					// cancel handling here | 					// cancel handling here | ||||||
| @@ -703,18 +703,6 @@ public class GoogleDriveFileStorage extends JavaFileStorageBase { | |||||||
| 	 | 	 | ||||||
|  |  | ||||||
|  |  | ||||||
| 	private void finishWithError(final Activity activity, |  | ||||||
| 			Exception error) { |  | ||||||
| 		Log.e(TAG, "Exception: "+error.toString()); |  | ||||||
| 		error.printStackTrace(); |  | ||||||
| 		 |  | ||||||
| 		Intent retData = new Intent(); |  | ||||||
| 		retData.putExtra(EXTRA_ERROR_MESSAGE, error.getMessage()); |  | ||||||
| 		activity.setResult(Activity.RESULT_CANCELED, retData); |  | ||||||
| 		activity.finish(); |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 	private HashMap<String,FileSystemEntryData> buildFoldersCache(String accountName) throws IOException { | 	private HashMap<String,FileSystemEntryData> buildFoldersCache(String accountName) throws IOException { | ||||||
|  |  | ||||||
| 		HashMap<String, FileSystemEntryData> folderCache = new HashMap<String, GoogleDriveFileStorage.FileSystemEntryData>(); | 		HashMap<String, FileSystemEntryData> folderCache = new HashMap<String, GoogleDriveFileStorage.FileSystemEntryData>(); | ||||||
| @@ -740,42 +728,6 @@ public class GoogleDriveFileStorage extends JavaFileStorageBase { | |||||||
|  |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	private void finishActivityWithSuccess(FileStorageSetupActivity setupActivity) { |  | ||||||
| 		//Log.d("KP2AJ", "Success with authentcating!"); |  | ||||||
| 		Activity activity = (Activity)setupActivity; |  | ||||||
|  |  | ||||||
| 		if (setupActivity.getProcessName().equals(PROCESS_NAME_FILE_USAGE_SETUP)) |  | ||||||
| 		{ |  | ||||||
| 			Intent data = new Intent(); |  | ||||||
| 			data.putExtra(EXTRA_IS_FOR_SAVE, setupActivity.isForSave()); |  | ||||||
| 			data.putExtra(EXTRA_PATH, setupActivity.getPath()); |  | ||||||
| 			activity.setResult(RESULT_FILEUSAGE_PREPARED, data); |  | ||||||
| 			activity.finish(); |  | ||||||
| 			return; |  | ||||||
| 		} |  | ||||||
| 		if (setupActivity.getProcessName().equals(PROCESS_NAME_SELECTFILE)) |  | ||||||
| 		{ |  | ||||||
| 			Intent data = new Intent(); |  | ||||||
| 			/*if (setupActivity.getState() == null) |  | ||||||
| 				Log.d(TAG, "getState is null"); |  | ||||||
| 			else  |  | ||||||
| 				if (setupActivity.getState().getString(EXTRA_PATH) == null) |  | ||||||
| 					Log.d(TAG, "setupActivity.getState().getString(EXTRA_PATH) is null"); |  | ||||||
| 				else |  | ||||||
| 					Log.d(TAG,setupActivity.getState().getString(EXTRA_PATH)); |  | ||||||
| 					*/ |  | ||||||
| 			String path = setupActivity.getState().getString(EXTRA_PATH); |  | ||||||
| 			if (path != null) |  | ||||||
| 				data.putExtra(EXTRA_PATH, path); |  | ||||||
| 			activity.setResult(RESULT_FILECHOOSER_PREPARED, data); |  | ||||||
| 			activity.finish(); |  | ||||||
| 			return; |  | ||||||
| 		}	 |  | ||||||
|  |  | ||||||
| 		Log.w("KP2AJ", "Unknown process: " + setupActivity.getProcessName()); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	@Override | 	@Override | ||||||
| 	public void startSelectFile(JavaFileStorage.FileStorageSetupInitiatorActivity activity, boolean isForSave, | 	public void startSelectFile(JavaFileStorage.FileStorageSetupInitiatorActivity activity, boolean isForSave, | ||||||
| @@ -785,8 +737,8 @@ public class GoogleDriveFileStorage extends JavaFileStorageBase { | |||||||
|  |  | ||||||
|  |  | ||||||
| 	@Override | 	@Override | ||||||
| 	public void prepareFileUsage(JavaFileStorage.FileStorageSetupInitiatorActivity activity, String path, int requestCode) { | 	public void prepareFileUsage(JavaFileStorage.FileStorageSetupInitiatorActivity activity, String path, int requestCode, boolean alwaysReturnSuccess) { | ||||||
| 		((JavaFileStorage.FileStorageSetupInitiatorActivity)(activity)).startFileUsageProcess(path, requestCode); | 		((JavaFileStorage.FileStorageSetupInitiatorActivity)(activity)).startFileUsageProcess(path, requestCode, alwaysReturnSuccess); | ||||||
|  |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -11,17 +11,19 @@ public interface JavaFileStorage { | |||||||
| 	 | 	 | ||||||
| 	public static final String PROCESS_NAME_SELECTFILE = "SELECT_FILE"; | 	public static final String PROCESS_NAME_SELECTFILE = "SELECT_FILE"; | ||||||
| 	public static final String PROCESS_NAME_FILE_USAGE_SETUP = "FILE_USAGE_SETUP"; | 	public static final String PROCESS_NAME_FILE_USAGE_SETUP = "FILE_USAGE_SETUP"; | ||||||
|  | 	 | ||||||
|  |  | ||||||
| 	public static final String EXTRA_PROCESS_NAME = "EXTRA_PROCESS_NAME"; | 	public static final String EXTRA_PROCESS_NAME = "EXTRA_PROCESS_NAME"; | ||||||
| 	public static final String EXTRA_PATH = "fileName"; //match KP2A PasswordActivity Ioc-Path Extra key | 	public static final String EXTRA_PATH = "fileName"; //match KP2A PasswordActivity Ioc-Path Extra key | ||||||
| 	public static final String EXTRA_IS_FOR_SAVE = "IS_FOR_SAVE"; | 	public static final String EXTRA_IS_FOR_SAVE = "IS_FOR_SAVE"; | ||||||
| 	public static final String EXTRA_ERROR_MESSAGE = "EXTRA_ERROR_MESSAGE"; | 	public static final String EXTRA_ERROR_MESSAGE = "EXTRA_ERROR_MESSAGE"; | ||||||
|  | 	public static final String EXTRA_ALWAYS_RETURN_SUCCESS = "EXTRA_ALWAYS_RETURN_SUCCESS";; | ||||||
|  |  | ||||||
| 	 | 	 | ||||||
| public interface FileStorageSetupInitiatorActivity | public interface FileStorageSetupInitiatorActivity | ||||||
| { | { | ||||||
| 	void startSelectFileProcess(String path, boolean isForSave, int requestCode); | 	void startSelectFileProcess(String path, boolean isForSave, int requestCode); | ||||||
| 	void startFileUsageProcess(String path, int requestCode); | 	void startFileUsageProcess(String path, int requestCode, boolean alwaysReturnSuccess); | ||||||
| 	void onImmediateResult(int requestCode, int result,	Intent intent); | 	void onImmediateResult(int requestCode, int result,	Intent intent); | ||||||
| 	Activity getActivity(); | 	Activity getActivity(); | ||||||
| } | } | ||||||
| @@ -112,7 +114,7 @@ public class FileEntry { | |||||||
|  |  | ||||||
| 	public void startSelectFile(FileStorageSetupInitiatorActivity activity, boolean isForSave, int requestCode); | 	public void startSelectFile(FileStorageSetupInitiatorActivity activity, boolean isForSave, int requestCode); | ||||||
| 	 | 	 | ||||||
| 	public void prepareFileUsage(FileStorageSetupInitiatorActivity activity, String path, int requestCode); | 	public void prepareFileUsage(FileStorageSetupInitiatorActivity activity, String path, int requestCode, boolean alwaysReturnSuccess); | ||||||
| 	 | 	 | ||||||
| 	public String getProtocolId(); | 	public String getProtocolId(); | ||||||
| 	 | 	 | ||||||
|   | |||||||
| @@ -2,6 +2,10 @@ package keepass2android.javafilestorage; | |||||||
|  |  | ||||||
| import java.io.UnsupportedEncodingException; | import java.io.UnsupportedEncodingException; | ||||||
|  |  | ||||||
|  | import android.app.Activity; | ||||||
|  | import android.content.Intent; | ||||||
|  | import android.util.Log; | ||||||
|  |  | ||||||
| public abstract class JavaFileStorageBase implements JavaFileStorage{ | public abstract class JavaFileStorageBase implements JavaFileStorage{ | ||||||
|  |  | ||||||
| 	private static final String ISO_8859_1 = "ISO-8859-1"; | 	private static final String ISO_8859_1 = "ISO-8859-1"; | ||||||
| @@ -41,5 +45,59 @@ public abstract class JavaFileStorageBase implements JavaFileStorage{ | |||||||
| 	         super(message); | 	         super(message); | ||||||
| 	      } | 	      } | ||||||
| 	 } | 	 } | ||||||
|  | 	 | ||||||
|  | 	 | ||||||
|  | 	protected void finishWithError(final FileStorageSetupActivity setupAct, Exception error) { | ||||||
|  | 		Log.e("KP2AJ", "Exception: " + error.toString()); | ||||||
|  | 		error.printStackTrace(); | ||||||
|  | 		 | ||||||
|  | 		final Activity activity = (Activity)setupAct; | ||||||
|  | 		 | ||||||
|  | 		int resultCode = Activity.RESULT_CANCELED; | ||||||
|  | 		 | ||||||
|  | 		//check if we should return OK anyways. | ||||||
|  | 		//This can make sense if there is a higher-level FileStorage which has the file cached. | ||||||
|  | 		if (activity.getIntent().getBooleanExtra(EXTRA_ALWAYS_RETURN_SUCCESS, false)) | ||||||
|  | 		{ | ||||||
|  | 			Log.d(TAG, "Returning success as desired in intent despite of exception."); | ||||||
|  | 			finishActivityWithSuccess(setupAct); | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		Intent retData = new Intent(); | ||||||
|  | 		retData.putExtra(EXTRA_ERROR_MESSAGE, error.getMessage()); | ||||||
|  | 		activity.setResult(resultCode, retData); | ||||||
|  | 		activity.finish(); | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	protected void finishActivityWithSuccess( | ||||||
|  | 			FileStorageSetupActivity setupActivity) { | ||||||
|  | 		//Log.d("KP2AJ", "Success with authenticating!"); | ||||||
|  | 		Activity activity = (Activity) setupActivity; | ||||||
|  |  | ||||||
|  | 		if (setupActivity.getProcessName() | ||||||
|  | 				.equals(PROCESS_NAME_FILE_USAGE_SETUP)) { | ||||||
|  | 			Intent data = new Intent(); | ||||||
|  | 			data.putExtra(EXTRA_IS_FOR_SAVE, setupActivity.isForSave()); | ||||||
|  | 			data.putExtra(EXTRA_PATH, setupActivity.getPath()); | ||||||
|  | 			activity.setResult(RESULT_FILEUSAGE_PREPARED, data); | ||||||
|  | 			activity.finish(); | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 		if (setupActivity.getProcessName().equals(PROCESS_NAME_SELECTFILE)) { | ||||||
|  | 			Intent data = new Intent(); | ||||||
|  |  | ||||||
|  | 			String path = setupActivity.getState().getString(EXTRA_PATH); | ||||||
|  | 			if (path != null) | ||||||
|  | 				data.putExtra(EXTRA_PATH, path); | ||||||
|  | 			activity.setResult(RESULT_FILECHOOSER_PREPARED, data); | ||||||
|  | 			activity.finish(); | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		Log.w("KP2AJ", "Unknown process: " + setupActivity.getProcessName()); | ||||||
|  |  | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -298,7 +298,7 @@ public class SkyDriveFileStorage extends JavaFileStorageBase { | |||||||
| 						if (status == LiveStatus.CONNECTED) { | 						if (status == LiveStatus.CONNECTED) { | ||||||
| 							initialize(activity, session); | 							initialize(activity, session); | ||||||
| 						} else { | 						} else { | ||||||
| 							finishWithError((Activity) activity, new Exception( | 							finishWithError(activity, new Exception( | ||||||
| 									"Error connecting to SkdDrive. Status is " | 									"Error connecting to SkdDrive. Status is " | ||||||
| 											+ status)); | 											+ status)); | ||||||
| 						} | 						} | ||||||
| @@ -307,7 +307,7 @@ public class SkyDriveFileStorage extends JavaFileStorageBase { | |||||||
| 					@Override | 					@Override | ||||||
| 					public void onAuthError(LiveAuthException exception, | 					public void onAuthError(LiveAuthException exception, | ||||||
| 							Object userState) { | 							Object userState) { | ||||||
| 						finishWithError((Activity) activity, exception); | 						finishWithError(activity, exception); | ||||||
| 					} | 					} | ||||||
| 				}); | 				}); | ||||||
| 	} | 	} | ||||||
| @@ -338,7 +338,7 @@ public class SkyDriveFileStorage extends JavaFileStorageBase { | |||||||
| 			protected void onPostExecute(AsyncTaskResult<String> result) { | 			protected void onPostExecute(AsyncTaskResult<String> result) { | ||||||
| 				Exception error = result.getError(); | 				Exception error = result.getError(); | ||||||
| 				if (error  != null ) { | 				if (error  != null ) { | ||||||
| 					finishWithError(activity, error); | 					finishWithError(setupAct, error); | ||||||
| 				}  else if ( isCancelled()) { | 				}  else if ( isCancelled()) { | ||||||
| 					activity.setResult(Activity.RESULT_CANCELED); | 					activity.setResult(Activity.RESULT_CANCELED); | ||||||
| 					activity.finish(); | 					activity.finish(); | ||||||
| @@ -446,9 +446,9 @@ public class SkyDriveFileStorage extends JavaFileStorageBase { | |||||||
|  |  | ||||||
| 	@Override | 	@Override | ||||||
| 	public void prepareFileUsage(FileStorageSetupInitiatorActivity activity, | 	public void prepareFileUsage(FileStorageSetupInitiatorActivity activity, | ||||||
| 			String path, int requestCode) { | 			String path, int requestCode, boolean alwaysReturnSuccess) { | ||||||
| 		((JavaFileStorage.FileStorageSetupInitiatorActivity) (activity)) | 		((JavaFileStorage.FileStorageSetupInitiatorActivity) (activity)) | ||||||
| 				.startFileUsageProcess(path, requestCode); | 				.startFileUsageProcess(path, requestCode, alwaysReturnSuccess); | ||||||
|  |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -718,44 +718,6 @@ public class SkyDriveFileStorage extends JavaFileStorageBase { | |||||||
|  |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	private void finishWithError(final Activity activity, Exception error) { |  | ||||||
| 		Log.e("KP2AJ", "Exception: " + error.toString()); |  | ||||||
| 		error.printStackTrace(); |  | ||||||
|  |  | ||||||
| 		Intent retData = new Intent(); |  | ||||||
| 		retData.putExtra(EXTRA_ERROR_MESSAGE, error.getMessage()); |  | ||||||
| 		activity.setResult(Activity.RESULT_CANCELED, retData); |  | ||||||
| 		activity.finish(); |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| 	private void finishActivityWithSuccess( |  | ||||||
| 			FileStorageSetupActivity setupActivity) { |  | ||||||
| 		//Log.d("KP2AJ", "Success with authenticating!"); |  | ||||||
| 		Activity activity = (Activity) setupActivity; |  | ||||||
|  |  | ||||||
| 		if (setupActivity.getProcessName() |  | ||||||
| 				.equals(PROCESS_NAME_FILE_USAGE_SETUP)) { |  | ||||||
| 			Intent data = new Intent(); |  | ||||||
| 			data.putExtra(EXTRA_IS_FOR_SAVE, setupActivity.isForSave()); |  | ||||||
| 			data.putExtra(EXTRA_PATH, setupActivity.getPath()); |  | ||||||
| 			activity.setResult(RESULT_FILEUSAGE_PREPARED, data); |  | ||||||
| 			activity.finish(); |  | ||||||
| 			return; |  | ||||||
| 		} |  | ||||||
| 		if (setupActivity.getProcessName().equals(PROCESS_NAME_SELECTFILE)) { |  | ||||||
| 			Intent data = new Intent(); |  | ||||||
|  |  | ||||||
| 			String path = setupActivity.getState().getString(EXTRA_PATH); |  | ||||||
| 			if (path != null) |  | ||||||
| 				data.putExtra(EXTRA_PATH, path); |  | ||||||
| 			activity.setResult(RESULT_FILECHOOSER_PREPARED, data); |  | ||||||
| 			activity.finish(); |  | ||||||
| 			return; |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		Log.w("KP2AJ", "Unknown process: " + setupActivity.getProcessName()); |  | ||||||
|  |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	@Override | 	@Override | ||||||
| 	public void onStart(final FileStorageSetupActivity activity) { | 	public void onStart(final FileStorageSetupActivity activity) { | ||||||
| @@ -765,7 +727,7 @@ public class SkyDriveFileStorage extends JavaFileStorageBase { | |||||||
| 		} | 		} | ||||||
| 		catch (Exception e) | 		catch (Exception e) | ||||||
| 		{ | 		{ | ||||||
| 			finishWithError((Activity)activity, e); | 			finishWithError(activity, e); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -774,7 +736,7 @@ public class SkyDriveFileStorage extends JavaFileStorageBase { | |||||||
| 			@Override | 			@Override | ||||||
| 			public void onAuthError(LiveAuthException exception, | 			public void onAuthError(LiveAuthException exception, | ||||||
| 					Object userState) { | 					Object userState) { | ||||||
| 				finishWithError(((Activity) activity), exception); | 				finishWithError(( activity), exception); | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			@Override | 			@Override | ||||||
| @@ -800,11 +762,11 @@ public class SkyDriveFileStorage extends JavaFileStorageBase { | |||||||
| 						//this may happen if an un-cancelled login progress is already in progress. | 						//this may happen if an un-cancelled login progress is already in progress. | ||||||
| 						//however, the activity might have been destroyed, so try again with another auth client next time | 						//however, the activity might have been destroyed, so try again with another auth client next time | ||||||
| 						mAuthClient = new LiveAuthClient(mAppContext, mClientId); | 						mAuthClient = new LiveAuthClient(mAppContext, mClientId); | ||||||
| 						finishWithError((Activity)activity, e); | 						finishWithError(activity, e); | ||||||
| 					} | 					} | ||||||
| 					catch (Exception e) | 					catch (Exception e) | ||||||
| 					{ | 					{ | ||||||
| 						finishWithError((Activity)activity, e); | 						finishWithError(activity, e); | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|   | |||||||
| @@ -278,7 +278,7 @@ namespace keepass2android | |||||||
| 			confirmButton.Click += (sender, e) => | 			confirmButton.Click += (sender, e) => | ||||||
| 				{ | 				{ | ||||||
| 					App.Kp2a.GetFileStorage(_ioConnection) | 					App.Kp2a.GetFileStorage(_ioConnection) | ||||||
| 					   .PrepareFileUsage(new FileStorageSetupInitiatorActivity(this, OnActivityResult, null), _ioConnection, 0); | 					   .PrepareFileUsage(new FileStorageSetupInitiatorActivity(this, OnActivityResult, null), _ioConnection, 0, false); | ||||||
| 				}; | 				}; | ||||||
| 			 | 			 | ||||||
| 			/*CheckBox checkBox = (CheckBox) FindViewById(Resource.Id.show_password); | 			/*CheckBox checkBox = (CheckBox) FindViewById(Resource.Id.show_password); | ||||||
|   | |||||||
							
								
								
									
										2945
									
								
								src/keepass2android/Resources/Resource.designer.cs
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2945
									
								
								src/keepass2android/Resources/Resource.designer.cs
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -45,7 +45,7 @@ | |||||||
|         android:layout_width="wrap_content" |         android:layout_width="wrap_content" | ||||||
|         android:layout_height="wrap_content" |         android:layout_height="wrap_content" | ||||||
|         android:layout_below="@id/divider2" |         android:layout_below="@id/divider2" | ||||||
|         android:text="@string/entry_and_or" /> |         android:text="" /> | ||||||
|     <LinearLayout |     <LinearLayout | ||||||
|         android:id="@+id/passwordLine" |         android:id="@+id/passwordLine" | ||||||
|         android:layout_width="fill_parent" |         android:layout_width="fill_parent" | ||||||
|   | |||||||
| @@ -1,32 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |  | ||||||
|     android:layout_width="wrap_content" |  | ||||||
|     android:layout_height="wrap_content" |  | ||||||
|     android:orientation="vertical"> |  | ||||||
|     <TextView |  | ||||||
|         android:id="@+id/text" |  | ||||||
|         android:layout_width="wrap_content" |  | ||||||
|         android:layout_height="wrap_content" |  | ||||||
|         android:text="@string/browser_intall_text" /> |  | ||||||
|     <LinearLayout |  | ||||||
|         android:layout_width="fill_parent" |  | ||||||
|         android:layout_height="fill_parent" |  | ||||||
|         android:gravity="center_horizontal" |  | ||||||
|         android:orientation="vertical"> |  | ||||||
|         <Button |  | ||||||
|             android:id="@+id/install_market" |  | ||||||
|             android:layout_width="200sp" |  | ||||||
|             android:layout_height="wrap_content" |  | ||||||
|             android:text="@string/install_from_market" /> |  | ||||||
|         <Button |  | ||||||
|             android:id="@+id/install_web" |  | ||||||
|             android:layout_width="200sp" |  | ||||||
|             android:layout_height="wrap_content" |  | ||||||
|             android:text="@string/install_from_website" /> |  | ||||||
|         <Button |  | ||||||
|             android:id="@+id/cancel" |  | ||||||
|             android:layout_width="200sp" |  | ||||||
|             android:layout_height="wrap_content" |  | ||||||
|             android:text="@android:string/cancel" /> |  | ||||||
|     </LinearLayout> |  | ||||||
| </LinearLayout> |  | ||||||
| @@ -41,7 +41,7 @@ | |||||||
|         android:layout_width="wrap_content" |         android:layout_width="wrap_content" | ||||||
|         android:layout_height="wrap_content" |         android:layout_height="wrap_content" | ||||||
|         android:layout_below="@id/divider2" |         android:layout_below="@id/divider2" | ||||||
|         android:text="@string/entry_and_or" /> |         android:text="" /> | ||||||
|     <ImageButton |     <ImageButton | ||||||
|         android:id="@+id/toggle_password" |         android:id="@+id/toggle_password" | ||||||
|         android:layout_width="wrap_content" |         android:layout_width="wrap_content" | ||||||
|   | |||||||
| @@ -282,7 +282,7 @@ namespace keepass2android | |||||||
| 			IOConnectionInfo ioc = _DbHelper.CursorToIoc(cursor); | 			IOConnectionInfo ioc = _DbHelper.CursorToIoc(cursor); | ||||||
| 			 | 			 | ||||||
| 			App.Kp2a.GetFileStorage(ioc) | 			App.Kp2a.GetFileStorage(ioc) | ||||||
| 					   .PrepareFileUsage(new FileStorageSetupInitiatorActivity(this, OnActivityResult, null), ioc, 0); | 					   .PrepareFileUsage(new FileStorageSetupInitiatorActivity(this, OnActivityResult, null), ioc, 0, false); | ||||||
| 		} | 		} | ||||||
| 		private void OnOpenButton(String fileName) | 		private void OnOpenButton(String fileName) | ||||||
| 		{ | 		{ | ||||||
|   | |||||||
| @@ -39,10 +39,11 @@ namespace keepass2android | |||||||
| 			_activity.StartActivityForResult(fileStorageSetupIntent, requestCode); | 			_activity.StartActivityForResult(fileStorageSetupIntent, requestCode); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		public void StartFileUsageProcess(IOConnectionInfo ioc, int requestCode) | 		public void StartFileUsageProcess(IOConnectionInfo ioc, int requestCode, bool alwaysReturnSuccess) | ||||||
| 		{ | 		{ | ||||||
| 			Intent fileStorageSetupIntent = new Intent(_activity, typeof(FileStorageSetupActivity)); | 			Intent fileStorageSetupIntent = new Intent(_activity, typeof(FileStorageSetupActivity)); | ||||||
| 			fileStorageSetupIntent.PutExtra(FileStorageSetupDefs.ExtraProcessName, FileStorageSetupDefs.ProcessNameFileUsageSetup); | 			fileStorageSetupIntent.PutExtra(FileStorageSetupDefs.ExtraProcessName, FileStorageSetupDefs.ProcessNameFileUsageSetup); | ||||||
|  | 			fileStorageSetupIntent.PutExtra(FileStorageSetupDefs.ExtraAlwaysReturnSuccess, alwaysReturnSuccess); | ||||||
| 			PasswordActivity.PutIoConnectionToIntent(ioc, fileStorageSetupIntent); | 			PasswordActivity.PutIoConnectionToIntent(ioc, fileStorageSetupIntent); | ||||||
|  |  | ||||||
| 			_activity.StartActivityForResult(fileStorageSetupIntent, requestCode); | 			_activity.StartActivityForResult(fileStorageSetupIntent, requestCode); | ||||||
| @@ -67,9 +68,9 @@ namespace keepass2android | |||||||
| 			_startManualFileSelect(protocolId + "://"); | 			_startManualFileSelect(protocolId + "://"); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		public void StartFileUsageProcess(string p0, int p1) | 		public void StartFileUsageProcess(string path, int requestCode, bool alwaysReturnSuccess) | ||||||
| 		{ | 		{ | ||||||
| 			StartFileUsageProcess(new IOConnectionInfo() { Path = p0 }, p1); | 			StartFileUsageProcess(new IOConnectionInfo() { Path = path }, requestCode, alwaysReturnSuccess); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		public void StartSelectFileProcess(string p0, bool p1, int p2) | 		public void StartSelectFileProcess(string p0, bool p1, int p2) | ||||||
|   | |||||||
| @@ -24,7 +24,7 @@ | |||||||
|     <DebugType>full</DebugType> |     <DebugType>full</DebugType> | ||||||
|     <Optimize>False</Optimize> |     <Optimize>False</Optimize> | ||||||
|     <OutputPath>bin\Debug</OutputPath> |     <OutputPath>bin\Debug</OutputPath> | ||||||
|     <DefineConstants>DEBUG;EXCLUDE_TWOFISH;INCLUDE_KEYBOARD;EXCLUDE_KEYTRANSFORM;EXCLUDE_FILECHOOSER;EXCLUDE_JAVAFILESTORAGE</DefineConstants> |     <DefineConstants>DEBUG;EXCLUDE_TWOFISH;INCLUDE_KEYBOARD;EXCLUDE_KEYTRANSFORM;INCLUDE_FILECHOOSER;INCLUDE_JAVAFILESTORAGE</DefineConstants> | ||||||
|     <ErrorReport>prompt</ErrorReport> |     <ErrorReport>prompt</ErrorReport> | ||||||
|     <WarningLevel>4</WarningLevel> |     <WarningLevel>4</WarningLevel> | ||||||
|     <ConsolePause>False</ConsolePause> |     <ConsolePause>False</ConsolePause> | ||||||
| @@ -364,7 +364,6 @@ | |||||||
|     <AndroidResource Include="Resources\drawable\ic_launcher_folder_small.png" /> |     <AndroidResource Include="Resources\drawable\ic_launcher_folder_small.png" /> | ||||||
|     <AndroidResource Include="Resources\drawable\notify.png" /> |     <AndroidResource Include="Resources\drawable\notify.png" /> | ||||||
|     <AndroidResource Include="Resources\layout\about.xml" /> |     <AndroidResource Include="Resources\layout\about.xml" /> | ||||||
|     <AndroidResource Include="Resources\layout\browser_install.xml" /> |  | ||||||
|     <AndroidResource Include="Resources\layout\database_settings.xml" /> |     <AndroidResource Include="Resources\layout\database_settings.xml" /> | ||||||
|     <AndroidResource Include="Resources\layout\entry_edit.xml" /> |     <AndroidResource Include="Resources\layout\entry_edit.xml" /> | ||||||
|     <AndroidResource Include="Resources\layout\entry_list_entry.xml" /> |     <AndroidResource Include="Resources\layout\entry_list_entry.xml" /> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Philipp Crocoll
					Philipp Crocoll