Skip to content

mungojam/android-activity-controller

 
 

Repository files navigation

Xamarin.Android ActivityController

The ActivityController makes managing Android Activities more .NET friendly.

Traditionally, launching subsequent Activities and waiting for them to return their results has been somewhat painful. With the ActivityController you can use async/await by starting activities through the StartActivityForResultAsync (..) method.

You can use ActivityController as a replacement for AppCompatActivity. The underlying lifecycle of your activity is handled for you.

Your ActivityController subclass can override some of the typical methods you would expect in an Activity. It must be associated with a subclass of ControllerActivity<TController>. Here is a boiler plate implementation:

[Activity(MainLauncher = true, Label = "Your Activity", Theme = "@style/Theme.AppCompat")]
public class MainActivity : ControllerActivity<MainActivity.MainController>
{
    public class MainController : ActivityController
    {
        protected override void OnCreate(Android.OS.Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            SetContentView(Resource.Layout.FirstLayout);

            // Your code            
        }
    }
}

Now you are ready to call StartActivityForResultAsync (..) from your controller:

async void Button_Click(object sender, EventArgs e)
{
    var contactPickerIntent = new Intent(Intent.ActionPick, ContactsContract.CommonDataKinds.Phone.ContentUri);

    var result = await StartActivityForResultAsync(contactPickerIntent);

    var contactUri = result?.Data?.Data;

	// Get Contact Name from the ContentResolver
	// var displayName = ...
	
    if (contactUri != null)
        Toast.MakeText(Activity, "You Picked: " + displayName, ToastLength.Long).Show();
}

You can also access the instance of the underlying AppCompatActivity directly via the Activity property of your ActivityController, as seen in the snippet above.

Finally, if you need to, you can also alter your subclass of ControllerActivity directly to override more methods and make other changes.

[Activity(Theme = "@style/Theme.AppCompat")]
public class MainActivity : ControllerActivity<MainController>
{
    public override bool OnTouchEvent(Android.Views.MotionEvent e)
    {
        // Do something interesting

        return base.OnTouchEvent(e);
    }
}

Helpers

To make some common tasks easier, ActivityController also contains some helper methods which construct the appropriate Intent and returns a strongly typed version of ActivityResult with more useful properties.

The helper methods include:

  • PickContactAsync
var result = await PickContactAsync ();
var contactUri = result.SelectedContactUri;
  • PickPhotoAsync
  • TakePhotoAsync
  • PickVideoAsync
  • TakeVideoAsync
var result = await PickPhotoAsync ("Title");
var stream = result.GetMediaStream ();

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 90.8%
  • Shell 9.2%