integrated SkyDrive support

This commit is contained in:
Philipp Crocoll 2013-11-06 05:25:19 +01:00
parent 684312b412
commit be9f18d996
16 changed files with 99 additions and 38 deletions

View File

@ -141,6 +141,9 @@
<Link>Jars\jsr305-1.3.9.jar</Link>
</EmbeddedReferenceJar>
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\livesdk.jar" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.Bindings.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

View File

@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.IO;
using Android.App;
using Android.Content;
using Android.OS;
using KeePassLib.Serialization;

View File

@ -66,6 +66,7 @@
<Compile Include="Io\IFileStorage.cs" />
<Compile Include="Io\IoUtil.cs" />
<Compile Include="Io\JavaFileStorage.cs" />
<Compile Include="Io\SkyDriveFileStorage.cs" />
<Compile Include="IProgressDialog.cs" />
<Compile Include="PreferenceKey.cs" />
<Compile Include="UiStringKey.cs" />

View File

@ -26,7 +26,7 @@ namespace Kp2aUnitTests
public static void UpdateIdValues()
{
KeePassLib2Android.Resource.String.library_name = Kp2aUnitTests.Resource.String.library_name;
global::KeePassLib2Android.Resource.String.library_name = global::Kp2aUnitTests.Resource.String.library_name;
}
public partial class Attribute

View File

@ -132,6 +132,10 @@ public class GoogleDriveFileStorage extends JavaFileStorageBase {
String[] parts = mAccountLocalPath.split("/");
AccountData accountData = mAccountData.get(mAccount);
if (accountData == null)
{
throw new IllegalStateException("Looks like account "+mAccount+" was not properly initialized!");
}
String parentId = accountData.mRootFolderId;

View File

@ -12,7 +12,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import keepass2android.javafilestorage.JavaFileStorageBase.InvalidPathException;
import keepass2android.javafilestorage.skydrive.SkyDriveException;
import keepass2android.javafilestorage.skydrive.SkyDriveFile;
import keepass2android.javafilestorage.skydrive.SkyDriveFolder;
@ -44,8 +43,6 @@ public class SkyDriveFileStorage extends JavaFileStorageBase {
private LiveAuthClient mAuthClient;
private LiveConnectSession mSession;
private LiveConnectClient mConnectClient;
private String mRootFolderId;
@ -57,6 +54,10 @@ public class SkyDriveFileStorage extends JavaFileStorageBase {
// see http://stackoverflow.com/questions/17997688/howto-to-parse-skydrive-api-date-in-java
SimpleDateFormat SKYDRIVE_DATEFORMATTER = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);
private Context mAppContext;
private String mClientId;
public final class JsonKeys {
public static final String CODE = "code";
public static final String DATA = "data";
@ -283,6 +284,8 @@ public class SkyDriveFileStorage extends JavaFileStorageBase {
public SkyDriveFileStorage(String clientId, Context appContext) {
mAuthClient = new LiveAuthClient(appContext, clientId);
mAppContext = appContext;
mClientId = clientId;
}
@ -312,7 +315,6 @@ public class SkyDriveFileStorage extends JavaFileStorageBase {
private void initialize(final FileStorageSetupActivity setupAct,
LiveConnectSession session) {
mSession = session;
mConnectClient = new LiveConnectClient(session);
final Activity activity = (Activity)setupAct;
@ -458,13 +460,18 @@ public class SkyDriveFileStorage extends JavaFileStorageBase {
@Override
public String getDisplayName(String path) {
return "";
/*
* SkyDrivePath skydrivePath = new SkyDrivePath(); try {
* skydrivePath.setPathWithoutVerify(path); } catch (Exception e) {
* e.printStackTrace(); return path; } return
* skydrivePath.getDisplayName();
*/
SkyDrivePath skydrivePath = new SkyDrivePath();
try {
skydrivePath.setPathWithoutVerify(path);
}
catch (Exception e)
{
e.printStackTrace();
return path;
}
return skydrivePath.getDisplayName();
}
@Override
@ -752,6 +759,17 @@ public class SkyDriveFileStorage extends JavaFileStorageBase {
@Override
public void onStart(final FileStorageSetupActivity activity) {
try
{
initialize(activity);
}
catch (Exception e)
{
finishWithError((Activity)activity, e);
}
}
private void initialize(final FileStorageSetupActivity activity) {
mAuthClient.initialize(Arrays.asList(SCOPES), new LiveAuthListener() {
@Override
public void onAuthError(LiveAuthException exception,
@ -764,14 +782,34 @@ public class SkyDriveFileStorage extends JavaFileStorageBase {
LiveConnectSession session, Object userState) {
if (status == LiveStatus.CONNECTED) {
Log.d(TAG, "connected!");
initialize(activity, session);
} else {
login(activity);
if (status == LiveStatus.NOT_CONNECTED)
Log.d(TAG, "not connected");
else if (status == LiveStatus.UNKNOWN)
Log.d(TAG, "unknown");
else
Log.d(TAG, "unexpected status " + status);
try
{
login(activity);
}
catch (IllegalStateException e)
{
//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
mAuthClient = new LiveAuthClient(mAppContext, mClientId);
finishWithError((Activity)activity, e);
}
catch (Exception e)
{
finishWithError((Activity)activity, e);
}
}
}
});
}
@Override

View File

@ -5,7 +5,7 @@ import org.json.JSONObject;
public class SkyDriveFile extends SkyDriveObject {
public static final String TYPE = "file";
public static final String TYPENAME = "file";
public SkyDriveFile(JSONObject file) {
super(file);

View File

@ -3,7 +3,7 @@ package keepass2android.javafilestorage.skydrive;
import org.json.JSONObject;
public class SkyDriveFolder extends SkyDriveObject {
public static final String TYPE = "folder";
public static final String TYPENAME = "folder";
public SkyDriveFolder(JSONObject object) {
super(object);

View File

@ -48,9 +48,9 @@ public abstract class SkyDriveObject {
public static SkyDriveObject create(JSONObject skyDriveObject) {
String type = skyDriveObject.optString("type");
if (type.equals(SkyDriveFolder.TYPE)) {
if (type.equals(SkyDriveFolder.TYPENAME)) {
return new SkyDriveFolder(skyDriveObject);
} else if (type.equals(SkyDriveFile.TYPE)) {
} else if (type.equals(SkyDriveFile.TYPENAME)) {
return new SkyDriveFile(skyDriveObject);
} else return null;
}

View File

@ -1854,46 +1854,49 @@ namespace keepass2android
public const int ic_storage_https = 2130837815;
// aapt resource value: 0x7f020138
public const int ic_unlocked_gray = 2130837816;
public const int ic_storage_skydrive = 2130837816;
// aapt resource value: 0x7f020139
public const int location_web_site = 2130837817;
public const int ic_unlocked_gray = 2130837817;
// aapt resource value: 0x7f02013a
public const int navigation_accept = 2130837818;
public const int location_web_site = 2130837818;
// aapt resource value: 0x7f02013b
public const int navigation_accept_dark = 2130837819;
public const int navigation_accept = 2130837819;
// aapt resource value: 0x7f02013c
public const int navigation_cancel = 2130837820;
public const int navigation_accept_dark = 2130837820;
// aapt resource value: 0x7f02013d
public const int navigation_previous_item = 2130837821;
public const int navigation_cancel = 2130837821;
// aapt resource value: 0x7f02013e
public const int navigation_previous_item_dark = 2130837822;
public const int navigation_previous_item = 2130837822;
// aapt resource value: 0x7f02013f
public const int notify = 2130837823;
public const int navigation_previous_item_dark = 2130837823;
// aapt resource value: 0x7f020140
public const int notify_keyboard = 2130837824;
public const int notify = 2130837824;
// aapt resource value: 0x7f020141
public const int oktoberfest = 2130837825;
public const int notify_keyboard = 2130837825;
// aapt resource value: 0x7f020142
public const int RedButton = 2130837826;
public const int oktoberfest = 2130837826;
// aapt resource value: 0x7f020143
public const int section_header = 2130837827;
public const int RedButton = 2130837827;
// aapt resource value: 0x7f020144
public const int transparent = 2130837828;
public const int section_header = 2130837828;
// aapt resource value: 0x7f020145
public const int YellowButton = 2130837829;
public const int transparent = 2130837829;
// aapt resource value: 0x7f020146
public const int YellowButton = 2130837830;
static Drawable()
{

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -393,6 +393,7 @@ namespace keepass2android
#if !EXCLUDE_JAVAFILESTORAGE
new DropboxFileStorage(Application.Context, this),
new GoogleDriveFileStorage(Application.Context, this),
new SkyDriveFileStorage(Application.Context, this),
#endif
new BuiltInFileStorage()
};

View File

@ -374,6 +374,10 @@ namespace keepass2android
StartFileChooser(ioc.Path);
#endif
}
if ((resultCode == Result.Canceled) && (data != null) && (data.HasExtra("EXTRA_ERROR_MESSAGE")))
{
Toast.MakeText(this, data.GetStringExtra("EXTRA_ERROR_MESSAGE"), ToastLength.Long).Show();
}
}
#if !EXCLUDE_FILECHOOSER
private void StartFileChooser(string defaultPath)

View File

@ -5,6 +5,7 @@ using System.Text;
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
using Android.Runtime;
using Android.Views;
@ -14,13 +15,14 @@ using keepass2android.Io;
namespace keepass2android.fileselect
{
[Activity(Label = "@string/filestorage_setup_title",Theme="@style/Base")]
[Activity(Label = "@string/filestorage_setup_title",Theme="@style/Base", ConfigurationChanges=ConfigChanges.Orientation|
ConfigChanges.KeyboardHidden)]
public class FileStorageSetupActivity : Activity, IFileStorageSetupActivity
#if !EXCLUDE_JAVAFILESTORAGE
,Keepass2android.Javafilestorage.IJavaFileStorageFileStorageSetupActivity
#endif
{
private bool isRecreated = false;
private bool _isRecreated = false;
protected override void OnCreate(Bundle bundle)
{
@ -40,10 +42,10 @@ namespace keepass2android.fileselect
else
{
State = (Bundle) bundle.Clone();
isRecreated = true;
_isRecreated = true;
}
if (!isRecreated)
if (!_isRecreated)
App.Kp2a.GetFileStorage(Ioc).OnCreate(this, bundle);
}
@ -51,7 +53,7 @@ namespace keepass2android.fileselect
protected override void OnStart()
{
base.OnStart();
if (!isRecreated)
if (!_isRecreated)
App.Kp2a.GetFileStorage(Ioc).OnStart(this);
}

View File

@ -872,4 +872,10 @@
<ItemGroup>
<AndroidResource Include="Resources\layout-v14\text_with_help.xml" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\ic_storage_skydrive.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-hdpi\ic_storage_skydrive.png" />
</ItemGroup>
</Project>