71 lines
3.0 KiB
C#
71 lines
3.0 KiB
C#
|
using Android.Content.Res;
|
|||
|
using Android.Graphics.Drawables;
|
|||
|
using Android.OS;
|
|||
|
using AndroidX.Core.Content.Resources;
|
|||
|
using AndroidX.Core.Graphics;
|
|||
|
using Bit.App.Droid.Utilities;
|
|||
|
using Bit.App.Utilities;
|
|||
|
using Microsoft.Maui.Platform;
|
|||
|
|
|||
|
namespace Bit.App.Handlers
|
|||
|
{
|
|||
|
public class SwitchHandlerMappings
|
|||
|
{
|
|||
|
public static void Setup()
|
|||
|
{
|
|||
|
if (Build.VERSION.SdkInt <= BuildVersionCodes.LollipopMr1)
|
|||
|
{
|
|||
|
// Android 5.x doesn't support ThumbTintList, and using SwitchCompat on every version after 5.x
|
|||
|
// doesn't apply tinting the way we want. Let 5.x to do its own thing here.
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
Microsoft.Maui.Handlers.SwitchHandler.Mapper.AppendToMapping(nameof(ISwitch.ThumbColor), (handler, mauiSwitch) =>
|
|||
|
{
|
|||
|
handler.PlatformView.SetHintTextColor(ThemeHelpers.MutedColor);
|
|||
|
var t = ResourcesCompat.GetDrawable(handler.PlatformView.Resources, Resource.Drawable.switch_thumb, null);
|
|||
|
if (t is GradientDrawable thumb)
|
|||
|
{
|
|||
|
handler.PlatformView.ThumbDrawable = thumb;
|
|||
|
}
|
|||
|
var thumbStates = new[]
|
|||
|
{
|
|||
|
new[] { Android.Resource.Attribute.StateChecked }, // checked
|
|||
|
new[] { -Android.Resource.Attribute.StateChecked }, // unchecked
|
|||
|
};
|
|||
|
var thumbColors = new int[]
|
|||
|
{
|
|||
|
ThemeHelpers.SwitchOnColor,
|
|||
|
ThemeHelpers.SwitchThumbColor
|
|||
|
};
|
|||
|
handler.PlatformView.ThumbTintList = new ColorStateList(thumbStates, thumbColors);
|
|||
|
});
|
|||
|
|
|||
|
Microsoft.Maui.Handlers.SwitchHandler.Mapper.AppendToMapping(nameof(ISwitch.TrackColor), (handler, mauiSwitch) =>
|
|||
|
{
|
|||
|
var trackStates = new[]
|
|||
|
{
|
|||
|
new[] { Android.Resource.Attribute.StateChecked }, // checked
|
|||
|
new[] { -Android.Resource.Attribute.StateChecked }, // unchecked
|
|||
|
};
|
|||
|
|
|||
|
var selectedColor = ColorUtils.BlendARGB(ThemeHelpers.SwitchOnColor.ToArgb(), Colors.Black.ToPlatform().ToArgb(), 0.5f);
|
|||
|
var unselectedColor = ColorUtils.BlendARGB(ThemeHelpers.SwitchThumbColor.ToArgb(), Colors.Black.ToPlatform().ToArgb(), 0.7f);
|
|||
|
if (ThemeManager.UsingLightTheme)
|
|||
|
{
|
|||
|
selectedColor = ColorUtils.BlendARGB(ThemeHelpers.SwitchOnColor.ToArgb(), Colors.White.ToPlatform().ToArgb(), 0.7f);
|
|||
|
unselectedColor = ColorUtils.BlendARGB(ThemeHelpers.SwitchThumbColor.ToArgb(), Colors.Black.ToPlatform().ToArgb(), 0.3f);
|
|||
|
}
|
|||
|
|
|||
|
var trackColors = new int[]
|
|||
|
{
|
|||
|
selectedColor,
|
|||
|
unselectedColor
|
|||
|
};
|
|||
|
|
|||
|
handler.PlatformView.TrackTintList = new ColorStateList(trackStates, trackColors);
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
}
|