Skip to content

Commit

Permalink
Android: Moved Dropbox Sync prototype to a service in MPfm.Library.
Browse files Browse the repository at this point in the history
Related to issue #406.
  • Loading branch information
ycastonguay committed Oct 17, 2013
1 parent fa2629e commit 15a88d5
Show file tree
Hide file tree
Showing 16 changed files with 543 additions and 141 deletions.
162 changes: 24 additions & 138 deletions MPfm/MPfm.Android/Classes/Activities/SyncCloudActivity.cs
Expand Up @@ -16,35 +16,26 @@
// along with MPfm. If not, see <http://www.gnu.org/licenses/>.

using System;
using System.Collections.Generic;
using System.Linq;
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.Text.Format;
using Android.Views;
using Android.OS;
using Android.Widget;
using Com.Dropbox.Sync.Android;
using MPfm.Android.Classes.Adapters;
using MPfm.Android.Classes.Navigation;
using MPfm.Library;
using MPfm.Library.Objects;
using MPfm.Library.Services.Interfaces;
using MPfm.MVP.Bootstrap;
using MPfm.MVP.Navigation;
using MPfm.MVP.Views;
using MPfm.Player.Objects;
using MPfm.Sound.AudioFiles;

namespace MPfm.Android
{
[Activity(Label = "Sync (Cloud)", ScreenOrientation = ScreenOrientation.Sensor, Theme = "@style/MyAppTheme", ConfigurationChanges = ConfigChanges.KeyboardHidden | ConfigChanges.Orientation | ConfigChanges.ScreenSize)]
public class SyncCloudActivity : BaseActivity, ISyncCloudView, DbxDatastore.ISyncStatusListener, DbxAccountManager.IAccountListener
public class SyncCloudActivity : BaseActivity, ISyncCloudView
{
private MobileNavigationManager _navigationManager;
private ISyncDeviceSpecifications _syncDeviceSpecifications;
private DbxAccountManager _accountManager;
private DbxAccount _account;
private DbxDatastore _store;
private IDropboxService _dropbox;
private TextView _lblConnected;
private TextView _lblDataChanged;
private TextView _lblValue;
Expand All @@ -59,22 +50,9 @@ protected override void OnCreate(Bundle bundle)
Console.WriteLine("SyncCloudActivity - OnCreate");
base.OnCreate(bundle);

// These keys will be replaced when the app is pushed to Google Play :-)
string appKey = "6tc6565743i743n";
string appSecret = "fbkt3neevjjl0l2";
_accountManager = DbxAccountManager.GetInstance(ApplicationContext, appKey, appSecret);
_accountManager.AddListener(this);
_dropbox = Bootstrapper.GetContainer().Resolve<IDropboxService>();
_dropbox.OnDropboxDataChanged += OnDropboxDataChanged;

if (_accountManager.HasLinkedAccount)
_account = _accountManager.LinkedAccount;

if (_account != null)
{
_store = DbxDatastore.OpenDefault(_account);
_store.AddSyncStatusListener(this);
}

_syncDeviceSpecifications = Bootstrapper.GetContainer().Resolve<ISyncDeviceSpecifications>();
_navigationManager = Bootstrapper.GetContainer().Resolve<MobileNavigationManager>();
SetContentView(Resource.Layout.SyncCloud);
ActionBar.SetDisplayHomeAsUpEnabled(true);
Expand All @@ -94,26 +72,19 @@ protected override void OnCreate(Bundle bundle)
_btnPush.Click += BtnPushOnClick;
_btnDelete.Click += BtnDeleteOnClick;

_lblConnected.Text = string.Format("Is Linked: {0} {1}", _accountManager.HasLinkedAccount, DateTime.Now.ToLongTimeString());
//_lblConnected.Text = string.Format("Is Linked: {0} {1}", _accountManager.HasLinkedAccount, DateTime.Now.ToLongTimeString());
_lblConnected.Text = string.Format("Is Linked: {0} {1}", _dropbox.HasLinkedAccount, DateTime.Now.ToLongTimeString());

// Since the onViewReady action could not be added to an intent, tell the NavMgr the view is ready
((AndroidNavigationManager)_navigationManager).SetSyncCloudActivityInstance(this);
}
}

private void BtnLoginOnClick(object sender, EventArgs e)
{
try
{
if (_accountManager.HasLinkedAccount)
{
_account = _accountManager.LinkedAccount;
}
else
{
_accountManager.StartLink(this, 0);

}
_lblConnected.Text = string.Format("Is Linked: {0} {1}", _accountManager.HasLinkedAccount, DateTime.Now.ToLongTimeString());
_dropbox.LinkApp(this);
_lblConnected.Text = string.Format("Is Linked: {0} {1}", _dropbox.HasLinkedAccount, DateTime.Now.ToLongTimeString());
}
catch (Exception ex)
{
Expand All @@ -129,11 +100,8 @@ private void BtnLogoutOnClick(object sender, EventArgs e)
{
try
{
if (_accountManager.HasLinkedAccount)
{
_accountManager.Unlink();
}
_lblConnected.Text = string.Format("Is Linked: {0} {1}", _accountManager.HasLinkedAccount, DateTime.Now.ToLongTimeString());
_dropbox.UnlinkApp();
_lblConnected.Text = string.Format("Is Linked: {0} {1}", _dropbox.HasLinkedAccount, DateTime.Now.ToLongTimeString());
}
catch (Exception ex)
{
Expand All @@ -149,23 +117,8 @@ private void BtnPullOnClick(object sender, EventArgs e)
{
try
{
DbxTable tableStuff = _store.GetTable("stuff");
DbxFields queryParams = new DbxFields();
queryParams.Set("test", true);
queryParams.Set("hello", "world");
DbxTable.QueryResult results = tableStuff.Query(queryParams);
var list = results.AsList();
if (list.Count == 0)
{
_lblValue.Text = "No value!";
return;
}

DbxRecord firstResult = list[0];
string timestamp = firstResult.GetString("timestamp");
string deviceType = firstResult.GetString("deviceType");
string deviceName = firstResult.GetString("deviceName");
_lblValue.Text = string.Format("{0} {1} {2}", deviceType, deviceName, timestamp);
string nowPlaying = _dropbox.PullNowPlaying();
_lblValue.Text = nowPlaying;
}
catch (Exception ex)
{
Expand All @@ -181,15 +134,7 @@ private void BtnPushOnClick(object sender, EventArgs e)
{
try
{
DbxTable tableStuff = _store.GetTable("stuff");
DbxRecord stuff = tableStuff.Insert();
stuff.Set("hello", "world");
stuff.Set("deviceType", _syncDeviceSpecifications.GetDeviceType().ToString());
stuff.Set("deviceName", _syncDeviceSpecifications.GetDeviceName());
stuff.Set("ip", _syncDeviceSpecifications.GetIPAddress());
stuff.Set("test", true);
stuff.Set("timestamp", DateTime.Now.ToLongTimeString());
_store.Sync();
_dropbox.PushNowPlaying(new AudioFile(), 0, string.Empty);
}
catch (Exception ex)
{
Expand All @@ -205,14 +150,7 @@ private void BtnDeleteOnClick(object sender, EventArgs e)
{
try
{
DbxTable tableStuff = _store.GetTable("stuff");
DbxTable.QueryResult results = tableStuff.Query();
var list = results.AsList();
foreach (var record in list)
{
record.DeleteRecord();
}
_store.Sync();
_dropbox.DeleteNowPlaying();
}
catch (Exception ex)
{
Expand All @@ -222,19 +160,14 @@ private void BtnDeleteOnClick(object sender, EventArgs e)
ad.SetButton("OK", (sender2, args2) => ad.Dismiss());
ad.Show();
}
}

//DbxDatastore store = null;
//try
//{
// store = DbxDatastore.OpenDefault(_account);
//}
//catch (Exception ex)
//{
//}
//finally
//{
// if (store != null) store.Close();
//}
private void OnDropboxDataChanged(string data)
{
RunOnUiThread(() =>
{
_lblValue.Text = data;
});
}

protected override void OnStart()
Expand Down Expand Up @@ -271,17 +204,6 @@ protected override void OnDestroy()
{
Console.WriteLine("SyncCloudActivity - OnDestroy");
base.OnDestroy();

if (_accountManager != null)
{
_accountManager.RemoveListener(this);
}

if (_store != null)
{
_store.RemoveSyncStatusListener(this);
_store.Close();
}
}

public override bool OnOptionsItemSelected(IMenuItem item)
Expand All @@ -301,42 +223,6 @@ public override bool OnOptionsItemSelected(IMenuItem item)
}
}

public void OnDatastoreStatusChange(DbxDatastore store)
{
Console.WriteLine("SyncCloudActivity - OnDatastoreStatusChange - hasIncoming: {0}", store.SyncStatus.HasIncoming);
_lblDataChanged.Text = string.Format("Data changed: {0} incoming: {1}", DateTime.Now.ToLongTimeString(), store.SyncStatus.HasIncoming);
if (store.SyncStatus.HasIncoming)
{
try
{
var changes = store.Sync();
if (!changes.ContainsKey("stuff"))
return;

var records = changes["stuff"];
foreach (var record in records)
{
string timestamp = record.GetString("timestamp");
string deviceType = record.GetString("deviceType");
string deviceName = record.GetString("deviceName");
_lblValue.Text = string.Format("{0} {1} {2}", deviceType, deviceName, timestamp);
}
}
catch (Exception ex)
{
Console.WriteLine("SyncCloudActivity - OnDatastoreStatusChange exception: {0}", ex);
_lblValue.Text = string.Format("Error: {0}", ex);
}
}
}

public void OnLinkedAccountChange(DbxAccountManager accountManager, DbxAccount account)
{
Console.WriteLine("SyncCloudActivity - OnLinkedAccountChange");
_account = account.IsLinked ? account : null;
_lblConnected.Text = string.Format("Is Linked: {0} {1}", _accountManager.HasLinkedAccount, DateTime.Now.ToLongTimeString());
}

#region ISyncCloudView implementation

public void SyncCloudError(Exception ex)
Expand Down
2 changes: 2 additions & 0 deletions MPfm/MPfm.Android/Classes/Application.cs
Expand Up @@ -25,6 +25,7 @@
using MPfm.Android.Classes.Providers;
using MPfm.Android.Classes.Receivers;
using MPfm.Library;
using MPfm.Library.Services.Interfaces;
using MPfm.MVP.Bootstrap;
using MPfm.MVP.Config.Providers;
using MPfm.MVP.Navigation;
Expand Down Expand Up @@ -151,6 +152,7 @@ private void BootstrapApp()
// Complete IoC configuration
TinyIoC.TinyIoCContainer container = Bootstrapper.GetContainer();
container.Register<ISyncDeviceSpecifications, AndroidSyncDeviceSpecifications>().AsSingleton();
container.Register<IDropboxService, AndroidDropboxService>().AsSingleton();
container.Register<IAppConfigProvider, AndroidAppConfigProvider>().AsSingleton();
container.Register<MobileNavigationManager, AndroidNavigationManager>().AsSingleton();
container.Register<IMobileOptionsMenuView, MainActivity>().AsMultiInstance();
Expand Down

0 comments on commit 15a88d5

Please sign in to comment.