diff --git a/MPfm/MPfm.Android/Classes/Activities/EqualizerPresetsActivity.cs b/MPfm/MPfm.Android/Classes/Activities/EqualizerPresetsActivity.cs index 7eff7a80..af0ec6fa 100644 --- a/MPfm/MPfm.Android/Classes/Activities/EqualizerPresetsActivity.cs +++ b/MPfm/MPfm.Android/Classes/Activities/EqualizerPresetsActivity.cs @@ -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; @@ -34,6 +36,7 @@ namespace MPfm.Android public class EqualizerPresetsActivity : BaseActivity, IEqualizerPresetsView { private MobileNavigationManager _navigationManager; + private string _sourceActivityType; protected override void OnCreate(Bundle bundle) { @@ -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); } @@ -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(); diff --git a/MPfm/MPfm.Android/Classes/Navigation/AndroidNavigationManager.cs b/MPfm/MPfm.Android/Classes/Navigation/AndroidNavigationManager.cs index 0cc78de8..e19f635b 100644 --- a/MPfm/MPfm.Android/Classes/Navigation/AndroidNavigationManager.cs +++ b/MPfm/MPfm.Android/Classes/Navigation/AndroidNavigationManager.cs @@ -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; } }); @@ -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); } @@ -128,11 +130,13 @@ protected override void CreatePreferencesViewInternal(Action onViewRe MainActivity.StartActivity(intent); } - protected override void CreateEqualizerPresetsViewInternal(Action onViewReady) + protected override void CreateEqualizerPresetsViewInternal(IBaseView sourceView, Action 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 onViewReady) diff --git a/MPfm/MPfm.MVP/Navigation/MobileNavigationManager.cs b/MPfm/MPfm.MVP/Navigation/MobileNavigationManager.cs index 8889b43d..473b1978 100644 --- a/MPfm/MPfm.MVP/Navigation/MobileNavigationManager.cs +++ b/MPfm/MPfm.MVP/Navigation/MobileNavigationManager.cs @@ -524,7 +524,7 @@ public virtual IPitchShiftingView CreatePitchShiftingView() return _pitchShiftingView; } - protected virtual void CreateEqualizerPresetsViewInternal(Action onViewReady) + protected virtual void CreateEqualizerPresetsViewInternal(IBaseView sourceView, Action onViewReady) { if(_equalizerPresetsView == null) _equalizerPresetsView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); @@ -534,7 +534,7 @@ protected virtual void CreateEqualizerPresetsViewInternal(Action onVi #endif } - public virtual void CreateEqualizerPresetsView() + public virtual void CreateEqualizerPresetsView(IBaseView sourceView) { Action onViewReady = (view) => { @@ -548,7 +548,7 @@ public virtual void CreateEqualizerPresetsView() _equalizerPresetsPresenter.BindView((IEqualizerPresetsView)view); }; - CreateEqualizerPresetsViewInternal(onViewReady); + CreateEqualizerPresetsViewInternal(sourceView, onViewReady); } public virtual IEqualizerPresetDetailsView CreateEqualizerPresetDetailsView(EQPreset preset) diff --git a/MPfm/MPfm.MVP/Presenters/MobileOptionsMenuPresenter.cs b/MPfm/MPfm.MVP/Presenters/MobileOptionsMenuPresenter.cs index 3a5b0097..87b013f0 100644 --- a/MPfm/MPfm.MVP/Presenters/MobileOptionsMenuPresenter.cs +++ b/MPfm/MPfm.MVP/Presenters/MobileOptionsMenuPresenter.cs @@ -94,7 +94,7 @@ private void OnItemClick(MobileOptionsMenuType menuType) } case MobileOptionsMenuType.EqualizerPresets: { - _navigationManager.CreateEqualizerPresetsView(); + _navigationManager.CreateEqualizerPresetsView(View); break; } case MobileOptionsMenuType.Preferences: