Skip to content

Commit

Permalink
Android: Fixed "up navigation" for EqualizerPresets by using intent e…
Browse files Browse the repository at this point in the history
…xtras and saving the parent activity type.

Related to issue #406.
  • Loading branch information
ycastonguay committed Jul 3, 2013
1 parent 4e8cdee commit 8886b92
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 12 deletions.
12 changes: 8 additions & 4 deletions MPfm/MPfm.Android/Classes/Activities/EqualizerPresetsActivity.cs
Expand Up @@ -17,9 +17,11 @@

using System;
using System.Collections.Generic;
using System.Reflection;
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.Support.V4.App;
using Android.Views;
using Android.OS;
using MPfm.Android.Classes.Navigation;
Expand All @@ -34,6 +36,7 @@ namespace MPfm.Android
public class EqualizerPresetsActivity : BaseActivity, IEqualizerPresetsView
{
private MobileNavigationManager _navigationManager;
private string _sourceActivityType;

protected override void OnCreate(Bundle bundle)
{
Expand All @@ -45,6 +48,9 @@ protected override void OnCreate(Bundle bundle)
ActionBar.SetDisplayHomeAsUpEnabled(true);
ActionBar.SetHomeButtonEnabled(true);

// Save the source activity type for later (for providing Up navigation)
_sourceActivityType = Intent.GetStringExtra("sourceActivity");

// Since the onViewReady action could not be added to an intent, tell the NavMgr the view is ready
((AndroidNavigationManager)_navigationManager).SetEqualizerPresetsActivityInstance(this);
}
Expand Down Expand Up @@ -90,10 +96,8 @@ public override bool OnOptionsItemSelected(IMenuItem item)
switch (item.ItemId)
{
case global::Android.Resource.Id.Home:
var intent = new Intent(this, typeof (MainActivity));
// TODO: If this activity is opened from the PlayerActivity, this returns to the MainActivity because of SingleTop.
// But if SingleTop isn't added, the view returns to a new MainActivity. The standard back button works properly though. ARGH!!!
// Idea: This is because in AndroidNavigationManager, the MainActivity spawns the view!
var type = Type.GetType(_sourceActivityType);
var intent = new Intent(this, type);
intent.AddFlags(ActivityFlags.ClearTop | ActivityFlags.SingleTop);
this.StartActivity(intent);
this.Finish();
Expand Down
12 changes: 8 additions & 4 deletions MPfm/MPfm.Android/Classes/Navigation/AndroidNavigationManager.cs
Expand Up @@ -50,7 +50,8 @@ public AndroidNavigationManager(ITinyMessengerHub messageHub)
CreatePlayerView(MobileNavigationTabType.More, null);
break;
case MobileNavigationManagerCommandMessageType.ShowEqualizerPresetsView:
CreateEqualizerPresetsView();
var sourceView = (IBaseView) m.Sender;
CreateEqualizerPresetsView(sourceView);
break;
}
});
Expand Down Expand Up @@ -109,6 +110,7 @@ private Activity GetActivityFromView(IBaseView view)
private void StartActivity(Activity sourceActivity, Type activityType)
{
var intent = new Intent(sourceActivity, activityType);
intent.PutExtra("sourceActivity", sourceActivity.GetType().FullName);
sourceActivity.StartActivity(intent);
}

Expand All @@ -128,11 +130,13 @@ protected override void CreatePreferencesViewInternal(Action<IBaseView> onViewRe
MainActivity.StartActivity(intent);
}

protected override void CreateEqualizerPresetsViewInternal(Action<IBaseView> onViewReady)
protected override void CreateEqualizerPresetsViewInternal(IBaseView sourceView, Action<IBaseView> onViewReady)
{
_onEqualizerPresetsViewReady = onViewReady;
var intent = new Intent(MainActivity, typeof(EqualizerPresetsActivity));
MainActivity.StartActivity(intent);
var activity = GetActivityFromView(sourceView);
StartActivity(activity, typeof(EqualizerPresetsActivity));
//var intent = new Intent(MainActivity, typeof(EqualizerPresetsActivity));
//MainActivity.StartActivity(intent);
}

protected override void CreateMarkerDetailsViewInternal(IBaseView sourceView, Action<IBaseView> onViewReady)
Expand Down
6 changes: 3 additions & 3 deletions MPfm/MPfm.MVP/Navigation/MobileNavigationManager.cs
Expand Up @@ -524,7 +524,7 @@ public virtual IPitchShiftingView CreatePitchShiftingView()
return _pitchShiftingView;
}

protected virtual void CreateEqualizerPresetsViewInternal(Action<IBaseView> onViewReady)
protected virtual void CreateEqualizerPresetsViewInternal(IBaseView sourceView, Action<IBaseView> onViewReady)
{
if(_equalizerPresetsView == null)
_equalizerPresetsView = Bootstrapper.GetContainer().Resolve<IEqualizerPresetsView>(new NamedParameterOverloads() { { "onViewReady", onViewReady } });
Expand All @@ -534,7 +534,7 @@ protected virtual void CreateEqualizerPresetsViewInternal(Action<IBaseView> onVi
#endif
}

public virtual void CreateEqualizerPresetsView()
public virtual void CreateEqualizerPresetsView(IBaseView sourceView)
{
Action<IBaseView> onViewReady = (view) =>
{
Expand All @@ -548,7 +548,7 @@ public virtual void CreateEqualizerPresetsView()
_equalizerPresetsPresenter.BindView((IEqualizerPresetsView)view);
};

CreateEqualizerPresetsViewInternal(onViewReady);
CreateEqualizerPresetsViewInternal(sourceView, onViewReady);
}

public virtual IEqualizerPresetDetailsView CreateEqualizerPresetDetailsView(EQPreset preset)
Expand Down
2 changes: 1 addition & 1 deletion MPfm/MPfm.MVP/Presenters/MobileOptionsMenuPresenter.cs
Expand Up @@ -94,7 +94,7 @@ private void OnItemClick(MobileOptionsMenuType menuType)
}
case MobileOptionsMenuType.EqualizerPresets:
{
_navigationManager.CreateEqualizerPresetsView();
_navigationManager.CreateEqualizerPresetsView(View);
break;
}
case MobileOptionsMenuType.Preferences:
Expand Down

0 comments on commit 8886b92

Please sign in to comment.