Skip to content

Instantly share code, notes, and snippets.

View benoitjadinon's full-sized avatar

Benoit Jadinon benoitjadinon

View GitHub Profile
@benoitjadinon
benoitjadinon / GitRenameAllTags.cs
Created January 25, 2012 22:17
Mono command line pseudo-bash script, that renames git tags by adding a 'v'
using System;
using System.IO;
using System.Diagnostics;
using System.Text.RegularExpressions;
namespace GitRenameAllTags
{
class MainClass
{
public static void Main (string[] args)
@benoitjadinon
benoitjadinon / BindableObjectExtensions.cs
Last active September 16, 2015 23:46
Xamarin.Forms: Chainable and Strongly-Typed SetBinding() Extension
public static class BindableObjectExtensions
{
// chainable, with a string for property
// usage : new Button().WithBinding(Button.CommandProperty, "SomeCommand"),
public static T WithBinding<T>(this T obj,
BindableProperty bindableProperty,
string path,
BindingMode mode = BindingMode.Default,
IValueConverter converter = null,
public static class BundleExtensions
{
const string SERIALIZED_KEY = "__JSONSERIALIZED__";
static List<IMapItem> typesMapping;
//TODO: put in order of preference (cf string/charseq , serializable/parcelable, ...) because the for loop will stop at the first recognized type
static BundleExtensions() {
typesMapping = new List<IMapItem>{
new TypeMap<IBinder> ((b, i, v) => b.PutBinder(i, v), (b, i) => b.GetBinder(i)),
using R = YOUR_ANDROID_PROJECT_HERE.Resource;
// so you can do R.String.Ok instead of Resource.String.Ok, so that it looks like native Android a bit more
@benoitjadinon
benoitjadinon / DebugToastOpenedActivities.java
Last active September 10, 2015 09:15
DebugToastOpenedActivities, toasting activities names as they open (in debug)
import android.app.Activity;
import android.app.Application;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
/**
* // Usage :
* // in your app's Application
*
@benoitjadinon
benoitjadinon / RoboLifecycleLogger.java
Last active April 18, 2016 10:20
prints the lifecycle of the class it is injected into
import android.app.Activity;
import android.util.Log;
import com.google.inject.Inject;
import roboguice.activity.event.*;
import roboguice.context.event.*;
import roboguice.event.Observes;
import roboguice.inject.ContextSingleton;
// usage : in your Android Application OnCreate() :
// this.RegisterActivityLifecycleCallbacks(new TimeOutPassCodeActivityCallBacks("1234"));
class TimeOutPassCodeActivityCallBacks : Java.Lang.Object, Android.App.Application.IActivityLifecycleCallbacks
{
DateTime? loggedInTime = null;
readonly string passcode;
readonly int timeoutInSeconds;
@benoitjadinon
benoitjadinon / ViewExtensions.cs
Last active January 31, 2017 09:34
Xamarin.Android FindViewByID that stores a reference to it, for viewholders
public static class ViewExtensions
{
public static T FindViewHolderById<T> (this View @this, int resID)
where T : View
{
return (@this.GetTag (resID) as T) ?? @this.SetTagAndReturnValue (resID, @this.FindViewById<T> (resID)) as T;
}
public static T SetTagAndReturnValue<T> (this T @this, int key, T view)
where T : View
@benoitjadinon
benoitjadinon / TODO.cs
Last active March 24, 2017 08:11
Blocking TODO
using System.Diagnostics;
using System.Runtime.CompilerServices;
// ReSharper disable once CheckNamespace
// ReSharper disable once InconsistentNaming
public static class TODO
{
#if DEBUG
// for mandatory TODOs, will break release compilation AND remind when debugging
@benoitjadinon
benoitjadinon / closures.cs
Last active November 10, 2015 20:45
functional port exercise, based on the provided Kotlin sample
//https://dotnetfiddle.net/KXXMef
// shorter but less generic :
// https://dotnetfiddle.net/R3m1h2
using System;
using System.Collections;
using System.Linq;
public class Program
{