Created
June 29, 2017 09:48
-
-
Save codedebugrepeat/788c13237c8fb7b6e8e60eeb71cdc858 to your computer and use it in GitHub Desktop.
Xamarin Android Activity BaseClass for embedding MonoGame Animations
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using Android.App; | |
using Android.Content; | |
using Android.OS; | |
using Cirrious.CrossCore.Core; | |
using Cirrious.CrossCore.Droid.Views; | |
using Cirrious.MvvmCross.Binding.BindingContext; | |
using Cirrious.MvvmCross.Binding.Droid.BindingContext; | |
using Cirrious.MvvmCross.Droid.Views; | |
using Cirrious.MvvmCross.ViewModels; | |
using Cirrious.MvvmCross.Views; | |
using Microsoft.Xna.Framework; | |
using System; | |
namespace Xamarin.MonoGame.Views { | |
public class BindableMonogameActivity<TViewModel> : AndroidGameActivity, IMvxAndroidView<TViewModel>, IMvxEventSourceActivity where TViewModel : class, IMvxViewModel { | |
public BindableMonogameActivity() { | |
BindingContext = new MvxAndroidBindingContext(this, this); | |
this.AddEventListeners(); | |
} | |
protected override void OnCreate(Bundle bundle) { | |
CreateWillBeCalled.Raise(this, bundle); | |
base.OnCreate(bundle); | |
CreateCalled.Raise(this, bundle); | |
} | |
protected override void OnDestroy() { | |
DestroyCalled.Raise(this); | |
base.OnDestroy(); | |
} | |
protected override void OnNewIntent(Intent intent) { | |
base.OnNewIntent(intent); | |
NewIntentCalled.Raise(this, intent); | |
} | |
protected override void OnResume() { | |
base.OnResume(); | |
ResumeCalled.Raise(this); | |
} | |
protected override void OnPause() { | |
PauseCalled.Raise(this); | |
base.OnPause(); | |
} | |
protected override void OnStart() { | |
base.OnStart(); | |
StartCalled.Raise(this); | |
} | |
protected override void OnRestart() { | |
base.OnRestart(); | |
RestartCalled.Raise(this); | |
} | |
protected override void OnStop() { | |
StopCalled.Raise(this); | |
base.OnStop(); | |
} | |
public override void StartActivityForResult(Intent intent, int requestCode) { | |
StartActivityForResultCalled.Raise(this, new MvxStartActivityForResultParameters(intent, requestCode)); | |
base.StartActivityForResult(intent, requestCode); | |
} | |
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) { | |
ActivityResultCalled.Raise(this, new MvxActivityResultParameters(requestCode, resultCode, data)); | |
base.OnActivityResult(requestCode, resultCode, data); | |
} | |
protected override void OnSaveInstanceState(Bundle outState) { | |
SaveInstanceStateCalled.Raise(this, outState); | |
base.OnSaveInstanceState(outState); | |
} | |
protected override void Dispose(bool disposing) { | |
if (disposing) { | |
DisposeCalled.Raise(this); | |
} | |
base.Dispose(disposing); | |
} | |
public event EventHandler<MvxValueEventArgs<MvxActivityResultParameters>> ActivityResultCalled; | |
public event EventHandler<MvxValueEventArgs<Bundle>> CreateCalled; | |
public event EventHandler<MvxValueEventArgs<Bundle>> CreateWillBeCalled; | |
public event EventHandler DestroyCalled; | |
public event EventHandler<MvxValueEventArgs<Intent>> NewIntentCalled; | |
public event EventHandler PauseCalled; | |
public event EventHandler RestartCalled; | |
public event EventHandler ResumeCalled; | |
public event EventHandler<MvxValueEventArgs<Bundle>> SaveInstanceStateCalled; | |
public event EventHandler<MvxValueEventArgs<MvxStartActivityForResultParameters>> StartActivityForResultCalled; | |
public event EventHandler StartCalled; | |
public event EventHandler StopCalled; | |
public event EventHandler DisposeCalled; | |
public IMvxViewModel ViewModel { | |
get { return DataContext as IMvxViewModel; } | |
set { | |
DataContext = value; | |
OnViewModelSet(); | |
} | |
} | |
public object DataContext { | |
get { return BindingContext.DataContext; } | |
set { BindingContext.DataContext = value; } | |
} | |
public void MvxInternalStartActivityForResult(Intent intent, int requestCode) { | |
base.StartActivityForResult(intent, requestCode); | |
} | |
public IMvxBindingContext BindingContext { get; set; } | |
public override void SetContentView(int layoutResId) { | |
var view = this.BindingInflate(layoutResId, null); | |
SetContentView(view); | |
} | |
protected virtual void OnViewModelSet() { | |
} | |
// in MvxActivity, this is implemented. However, can't use that as MvxContextWrapper is not known. | |
//protected override void AttachBaseContext(Context @base) { | |
// if (this is IMvxAndroidSplashScreenActivity) { | |
// // Do not attach our inflater to splash screens. | |
// base.AttachBaseContext(@base); | |
// return; | |
// } | |
// base.AttachBaseContext(MvxContextWrapper.Wrap(@base, this)); | |
//} | |
TViewModel IMvxView<TViewModel>.ViewModel { | |
get { | |
return ViewModel as TViewModel; | |
} | |
set { | |
ViewModel = value; | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment