Skip to content
This repository has been archived by the owner on May 15, 2024. It is now read-only.

GH-196 Browser Customization #646

Merged

Conversation

Mrnikbobjeff
Copy link
Contributor

@Mrnikbobjeff Mrnikbobjeff commented Dec 11, 2018

Description of Change

Implemented some Features required for GH- #196.

API Changes

List all API changes here (or just put None), example:

Added:

public readonly struct EssentialsColor : IEquatable<EssentialsColor>
{
        public byte R { get; }
        public byte G { get; }
        public byte B { get; }
        public byte A { get; }
}

public readonly partial struct BrowserLaunchOptions : IEquatable<BrowserLaunchOptions>
{
        public EssentialsColor? PreferredTitleColor { get; }

        public EssentialsColor? PreferredBackgroundColor { get; }

        public EssentialsColor? PrefferedControlColor { get; }

        public bool? ShouldShowTitle { get; }
}

Changed:

  • Browser.OpenAsync(string uri, BrowserLaunchOptions options = default) // Added default parameter

Behavioral Changes

None. All values are nullable. If they are not set as they are by default no changes are made.

PR Checklist

  • Has tests (if omitted, state reason in description)
  • Has samples (if omitted, state reason in description)
  • Rebased on top of master at time of PR
  • Changes adhere to coding standard
  • Updated documentation (see walkthrough)

@ghost

This comment has been minimized.

@Mrnikbobjeff
Copy link
Contributor Author

We should really consider dropping .Net Standard 1.x support. System.Drawing.Color had to be manually approximated to have a cross platfrorm argb representation.

@jamesmontemagno
Copy link
Collaborator

No need for a specific color, we should use System.Drawing.Color

@Mrnikbobjeff
Copy link
Contributor Author

Which is not available in .net standard 1.6, that is why I had to implement this abstraction. System.drawing.color became available in .Net Standard 2.0

@jamesmontemagno
Copy link
Collaborator

We should limit the API to only .NET Standard 2.0. We do not want to add a new type here.

@mattleibow
Copy link
Contributor

mattleibow commented Dec 12, 2018

We can create the color type in essentials for netstandard1.0:

#if NETSTANDARD_1_0
public struct Color {
    // ...
}
#else
[assembly: TypeForward(System.Drawing.Color)]
#endif

How this works:

If the user is building with PCL/NetStd10, then he compiles against the local color and is happy. If he targets NetStd20, then he gets the real deal.

At runtime, the OS will use the real type - in fact, the code in NetStd10 will never, ever get run, so we don't even need a real implementation!

We can literally pull this in for NetStd10: https://github.com/dotnet/corefx/blob/master/src/System.Drawing.Primitives/ref/System.Drawing.Primitives.cs

Copy link
Contributor

@mattleibow mattleibow left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you are on the right track, and the code is quite clean 😄

There are a couple of comments:

  • BrowserLaunchMode should be inside BrowserLaunchOptions - see related comments
  • We need to decide how we are going to do the EssentialsColor/Color thing

@@ -5,10 +5,10 @@ namespace Xamarin.Essentials
{
public static partial class Browser
{
public static Task OpenAsync(string uri) =>
OpenAsync(uri, BrowserLaunchMode.SystemPreferred);
public static Task OpenAsync(string uri, BrowserLaunchOptions options = default) =>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We must not use default parameters, rather create an overload:

Task OpenAsync(string uri) =>
    OpenAsync(uri, null);
Task OpenAsync(string uri, BrowserLaunchMode launchMode) =>
    OpenAsync(uri, new BrowserLaunchOptions(launchMode));
Task OpenAsync(string uri, BrowserLaunchOptions options) =>
    PlatformOpenAsync(uri, options);

I don't think there will be an overload that takes both BrowserLaunchMode AND BrowserLaunchOptions - what is the case where you will set colors and then also say ignore those colors?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is none, I will change this in the next commit.

Renamed incorrectly spelled variables

Co-Authored-By: Mrnikbobjeff <schillinik@yahoo.de>
@ghost

This comment has been minimized.

@ghost

This comment has been minimized.

@jamesmontemagno
Copy link
Collaborator

jamesmontemagno commented Dec 12, 2018

This api should only be visibile in .net standard 2.0/Android/iOS/UWP

You can use

#if NETSTANDARD2_0
#endif

around it to factor it out.

@jamesmontemagno
Copy link
Collaborator

So, System.Drawing.Color is not available in Xamarin.iOS, but instead OpenTK, so for now this work will be delayed until that is fixed. For tracking here: dotnet/macios#5273

@mattleibow
Copy link
Contributor

Based on the response:

Xamarin.iOS does not "conform" to NetStandard in the sense that the Xamarin.iOS.dll is expected to include all the dlls needed for all the NetStandard APIs. Instead Xamarin.iOS provides the Facades with the type forwarders needed to find the actual dlls required for specific types.

I would say this is what we are going to have to do. An we can add the OpenTK-1 reference in the NuGet. It should be "OK" because it is a "system" dll for iOS.

@Mrnikbobjeff
Copy link
Contributor Author

Would it also be possible to type forward to a type forward? So just skip referencing OpenTK and forward Color to the Xamarin.iOS type forward

@mattleibow
Copy link
Contributor

@jamesmontemagno @Mrnikbobjeff I would really like to do that, but I have one concern: dotnet/macios#5275

We need to test somethings:

  • if we use Color, can we live with the extra overhead - we probably will have to
  • if we don't use any is-using-Color APIs, will the OpenTK be stripped entirely, or will the mere existence of of the reference cause the dll to be pulled in?
  • if we use Color, how far does the ripple effect go, is this a bug that we need to escalate on the mac/ios teams?

@mattleibow
Copy link
Contributor

@jamesmontemagno I think we can just go ahead and depend on OpenTK for iOS - Xamarin.Forms already references it so we can't really add any more. Sure, Bob the iOS-only developer may not be 100% happy, but it shouldn't affect him that much. And, I don't think anything is going to change anytime soon with iOS and the linker.

@jamesmontemagno
Copy link
Collaborator

In this regard I am doing some color work and will set it up, so please wait until I have that in a branch for you to pull up.

@mattleibow
Copy link
Contributor

NICE! Looking forward to seeing cool things happen in this world!

@jamesmontemagno jamesmontemagno added this to the 1.1.0 milestone Jan 7, 2019
@ghost
Copy link

ghost commented Jan 7, 2019

OPS Build status updates of commit 245a157:

🕙 Preparing: average preparing time is 54 sec(s)

@ghost
Copy link

ghost commented Jan 7, 2019

OPS Build status updates of commit 245a157:

🕙 Incremental building: average incremental building time is 24 sec(s)

@ghost
Copy link

ghost commented Jan 7, 2019

OPS Build status updates of commit 245a157:

✅ Validation status: passed

File Status Preview URL Details
Xamarin.Essentials/Browser/Browser.android.cs ✅Succeeded
Xamarin.Essentials/Browser/Browser.ios.cs ✅Succeeded
Xamarin.Essentials/Browser/Browser.netstandard.cs ✅Succeeded
Xamarin.Essentials/Browser/Browser.shared.cs ✅Succeeded
Xamarin.Essentials/Browser/Browser.uwp.cs ✅Succeeded

For more details, please refer to the build report.

Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.

@jamesmontemagno jamesmontemagno changed the base branch from master to dev/1.1.0 January 7, 2019 16:25
@jamesmontemagno
Copy link
Collaborator

Rebased off 1.1.0 so system.drawing.color should be good to use now with opentk on iOS

@Mrnikbobjeff
Copy link
Contributor Author

Hey, so I was doing some work for type forwarding and I would love to have clarification on how I am supposed to implement this. @jamesmontemagno said that this should only be available on netstandard 2.0. I suppose you don't mean ifdefing the entire static class right? If so I am good to go, otherwise some clarification for the shared class would be nice :)

@mattleibow
Copy link
Contributor

You are going to have to #if the class and create a dummy type so we don't have to worry about method signatures. Nobody will actually ever get netstandard1.0 in their app - unless they are using PCL. But, I don't think that is actually possible as the new IDEs can't open those projects anymore.

You probably can do something like this:

#if NETSTANDARD1_0
// a dummy type for .NET Standard 1.0
public readonly partial struct BrowserLaunchOptions { }
#else
// the real type for all the other platforms
public readonly partial struct BrowserLaunchOptions :{
    ...
}
#endif

@jamesmontemagno does this look fine to you? Not super pretty, but this way we don't have #if all over the show.

Another way might be to create a dummy Color type that is wrapped in a #if. All the code stays in it's beautiful place, but for the netstandard1.0 target, we just include this:

#if NETSTANDARD1_0
namespace System.Drawing {
    public struct Color {
    }
}
#endif

That may cause issues if someone builds against netstandard1.0, and then uses it in an app. The runtime will look for color in our assembly, but we could also do this:

#if NETSTANDARD1_0
namespace System.Drawing {
    public struct Color {
    }
}
#else
[assembly: TypeForwardedTo(typeof(Color))]
#endif

That should fix all cases. We don't have to provide any implementation for Color, or we can just add the A R G B properties to be friendly... It may need testing, but I can't see any issues as this is what netstandard.dll is built on.

My main concern here is that we are going to write bad code just to satisfy the compilers and things, that is why I am pushing a separate, smaller file that we can just delete when we finally go golden - and nothing breaks anyone.

@ghost
Copy link

ghost commented Jan 21, 2019

OPS Build status updates of commit 289f7b3:

🕙 Preparing: average preparing time is 54 sec(s)

@ghost
Copy link

ghost commented Jan 21, 2019

OPS Build status updates of commit 289f7b3:

🕙 Incremental building: average incremental building time is 23 sec(s)

@ghost
Copy link

ghost commented Jan 21, 2019

OPS Build status updates of commit 289f7b3:

✅ Validation status: passed

File Status Preview URL Details
Xamarin.Essentials/Browser/Browser.android.cs ✅Succeeded
Xamarin.Essentials/Browser/Browser.ios.cs ✅Succeeded
Xamarin.Essentials/Browser/Browser.netstandard.cs ✅Succeeded
Xamarin.Essentials/Browser/Browser.shared.cs ✅Succeeded
Xamarin.Essentials/Browser/Browser.uwp.cs ✅Succeeded
Xamarin.Essentials/Types/PlatformExtensions/ColorExtensions.shared.cs ✅Succeeded
Xamarin.Essentials/Xamarin.Essentials.csproj ✅Succeeded

For more details, please refer to the build report.

Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.

@ghost
Copy link

ghost commented Jan 21, 2019

OPS Build status updates of commit 6e49126:

🕙 Preparing: average preparing time is 54 sec(s)

@Mrnikbobjeff Mrnikbobjeff changed the title [WIP] GH-196 Browser Customization GH-196 Browser Customization Jan 21, 2019
@ghost
Copy link

ghost commented Jan 21, 2019

OPS Build status updates of commit 6e49126:

🕙 Incremental building: average incremental building time is 22 sec(s)

@ghost
Copy link

ghost commented Jan 21, 2019

OPS Build status updates of commit 6e49126:

✅ Validation status: passed

File Status Preview URL Details
Xamarin.Essentials/Browser/Browser.android.cs ✅Succeeded
Xamarin.Essentials/Browser/Browser.ios.cs ✅Succeeded
Xamarin.Essentials/Browser/Browser.netstandard.cs ✅Succeeded
Xamarin.Essentials/Browser/Browser.shared.cs ✅Succeeded
Xamarin.Essentials/Browser/Browser.uwp.cs ✅Succeeded
Xamarin.Essentials/Types/PlatformExtensions/ColorExtensions.shared.cs ✅Succeeded
Xamarin.Essentials/Xamarin.Essentials.csproj ✅Succeeded

For more details, please refer to the build report.

Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.

Copy link
Contributor

@mattleibow mattleibow left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good!

}
#else
using System.Drawing;
[assembly: TypeForwardedTo(typeof(Color))]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rather use the full name instead of the using: [assembly: TypeForwardedTo(typeof(System.Drawing;.Color))]

I think there are rules about where usings can go...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stylecop did not complain. If I remove the using the android build fails, not sure why.

public enum BrowserLaunchMode
{
SystemPreferred = 0,
External = 1,
Default = 0,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jamesmontemagno Do we want a "default" option here? If follows the rules, but is this maybe not useful? I think our original idea that "Default" === "SystemPreferred", but we used a different name to help discoverability? Not sure about this one...

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we wan't default here.

SystemPreferred != Default as Default would be launching URI. This is a special case in general and should be the default. I think that we should pass in the LaunchMode as a parameter and LaunchOptions as another. I would hate to create another class just to do systempreferred or external if I don't need any of the options.

Copy link
Contributor Author

@Mrnikbobjeff Mrnikbobjeff Jan 22, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can revert to the three parameter style I adopted originally for the internal implementation and just pass null. For the public api there will be 6 overloads in total, one for just string/uri, one for uri+Launchoptions and the last 2 for all three.

@ghost
Copy link

ghost commented Jan 21, 2019

OPS Build status updates of commit cb3c9ba:

🕙 Preparing: average preparing time is 54 sec(s)

@ghost
Copy link

ghost commented Jan 21, 2019

OPS Build status updates of commit cb3c9ba:

🕙 Incremental building: average incremental building time is 22 sec(s)

@ghost
Copy link

ghost commented Jan 21, 2019

OPS Build status updates of commit cb3c9ba:

✅ Validation status: passed

File Status Preview URL Details
Xamarin.Essentials/Browser/Browser.android.cs ✅Succeeded
Xamarin.Essentials/Browser/Browser.ios.cs ✅Succeeded
Xamarin.Essentials/Browser/Browser.netstandard.cs ✅Succeeded
Xamarin.Essentials/Browser/Browser.shared.cs ✅Succeeded
Xamarin.Essentials/Browser/Browser.uwp.cs ✅Succeeded
Xamarin.Essentials/Types/PlatformExtensions/ColorExtensions.shared.cs ✅Succeeded
Xamarin.Essentials/Xamarin.Essentials.csproj ✅Succeeded

For more details, please refer to the build report.

Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.

@@ -35,9 +60,56 @@ internal static Uri EscapeUri(Uri uri)
}
}

public class BrowserLaunchOptions : IEquatable<BrowserLaunchOptions>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any reason this is IEquatable? Doesn't seem like it needs to be at all since it is a class.... should it be a struct?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably shod be class with no interfaces. Not sure if this is official, but I go with POCO classes in, read-only structs out...

Copy link
Contributor Author

@Mrnikbobjeff Mrnikbobjeff Jan 22, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See my other comment. While all current features use the style @mattleibow describes I think it would be wortwhile investigating when we should differ from this. Even though this is an async method it could be that a passed value type does not have to be boxed. Then, having this as a value type would IMHO be preferrable due to the lessened heap allocation. All contained properties are value types as well, which is not the case for any other in parameter for the public api. This still is a remnant from when this was a struct in the original pr. I can remove it once we clear this up :)

@jamesmontemagno jamesmontemagno changed the base branch from dev/1.1.0 to dev/1.1.0-issue-196 January 25, 2019 22:20
@jamesmontemagno jamesmontemagno merged commit 2d52855 into xamarin:dev/1.1.0-issue-196 Jan 25, 2019
Redth pushed a commit that referenced this pull request Mar 15, 2019
* Use SharedPreferences.Editor.Apply when editing to force disk write to be asynchronous (#637)

* GH-182 Color/Point/Rect/Size Extension Converters (#651)

* Add extension helpers for iOS and Android

* Add UWP colors and adjsut android colors.

* Add UWP Point/Rect/Size

* Rename and optimize!

* Add tests and color helpers!

* Fix unit test and add WithAlpha

* Cleanup iOS as it stores it from 0-1

* Tests are all green!

* Add generate-docs cmd :)

* Add docs config to all :)

* Additional clenaup for docs

* Added some docs

* Updated the mdoc target and regenerated the docs

* Allow for code reuse on macOS (#665)

Even though macOS is not yet officially supported, it is nice to reuse this code. macOS is exactly the same, except for this single property not supported.

* GH-196 Browser Customization (#646)

* Implemented GH-196

* Apply suggestions from code review: Naming

Renamed incorrectly spelled variables

Co-Authored-By: Mrnikbobjeff <schillinik@yahoo.de>

* Implemented GH-196

* Browser update work as requested. Using System.Drawing.Color now

* Adopted more review changes. Type forwarded.

* Review changes

* Made equals operator null safe, removed constructor

* Add documentation and simplify the API!

* Update viewmodel

* Back to 7.2

* GH-676 Require To Check GPS Location is Fake Or Not In GeoLocation (#677)

* Added  bool IsFromMockProvider in Location class

* Checkin

* csproj original

* Revert "csproj original"

This reverts commit 6302b95.

* Revert "Checkin"

This reverts commit 0881e4f.

* Revert "Added  bool IsFromMockProvider in Location class"

This reverts commit e56d940.

* Revert the Xamarin.Essentials.csproj and Samples.Android.csproj to original;

Adjust the property IsFromMockProvider in Location.shared and LocationExetensions.

* Edited sample to show if the location is from moking provider.

* Update docs

* Fixes #694 (#699)

* Update the mdoc to use the new minimum for VS2019

* GH-126: Finish Shake Detector API (#693)

* Update CONTRIBUTING.md (#692)

* GH-126 Detect Shake API (#666)

* Added shaken support

* name vhange

* check-in

* doc update

* Implements the Shake API inside Accelerometer Class;
Change sample to AccelorometerViewModel

* Fix the sample project

* Update the docs

* Added Queue mechanism based off seismic with tests as well. Something is not  right yet with calulating isaccelerating.

* Finalize shake detection!!!

* Re-generated the docs.

* Fix the VM after merge

* GH-704 Handle duplicate item in keychain (#705)

* Update CONTRIBUTING.md (#692)

* #704 if we get a duplicate item try to remove and then re-add if possible.

* Add all possible combinations  for coords to km or mile (#721)

* Add all possible combinations  for coords to km or mile

* Update UnitConverters_Tests.cs

* Use more explicit job definitions

* Update UnitConverters_Tests.cs

* GH-698 Set longer delay on connectivity changes - Android (#700)

* Update CONTRIBUTING.md (#692)

* Fixes #698

* Use original string instead of uri (#716)

* GH-643: Add Android P targeting and support 28 support (#669)

* Update PULL_REQUEST_TEMPLATE.md

* Fixes #643 to add android P targeting and support 28 support

* Add suppresses for Android P

* Cleanup SDKs based on @Redth

* Update more nugets

* More optimizations for Retargeting

* Refactor HasApiLevelN and updated support to 28.0.0.1

* Update manifest and key :)

* Update the device tests certificates

* Make sure to run the checks always

* Updating the certs again to see if CI notices this time...

* Change order to reflect enum (#735)

* Lock keystore on Android for cipher (#734)

* Add locks around android keystore.

* move convert out of lock

* GH-130 & GH-129: Android support for safe shareable file URI’s (#416)

* Android: Support for safe shareable file URI’s

On later versions of Android, you have to wrap streams of data you want to share outside your app (between apps) in a stream through a content provider.  Android Support providers a general use FileProvider we can use for this.  This commit basically adds support for getting all the right AndroidManifest declarations for the custom file provider based on the android support provider, so that we expose an internal method which gets a URI safe for sharing outside of the app.

* Fix absolute type naming

* Add a user interaction test for File Provider

* Fix vibration code

the ifdef meant an empty `else { }` statement with no `if { }` for platforms < 26.  This fixes that.

* Reorder using statements

* Fix test attribute

* Get provider authority properly

* Added external storage permission

* Change file provider path

This is md5(“xamarin_essentials”)

* Copy file into temp folder instead of file

We keep the filename the same this way but use a GUID for a temp sub-folder to ensure a unique path.

* Resgen

* Permissions may need to be checked to control functionality

* The Android FileProvider now can detect permissions
 - internal / external storage can be controlled
 - KitKat+ does not require the permissions
 - corrected the FileProvider resource xml

* Added support for email attachments
 - support for a string path and native file types

* Added attachments to the sample app

* Updated the docs with the new types

* Some fixes for iOS

* Fix the mdoc target

* regen docs

* remove the obsolete armeabi ABI

* Reworked the file logic to try and use public folders first
 - if the file is already exposed, then just use it directly
 - if the file is private, copy to an exposed location first
 - exposing the internal and external caches and the public/external files

* Be more specific with the external storage permission name

* Added some more depth to the comments here

* Unnecessary else

* Added base file info class

* EmailAttachment now derives from FileBase

* Added File Sharing

* Keep track of IStorageFile internally

* Prefer internal IStorageFile in UWP

* Use attachment name properly in UWP

* Add ctor to create from existing FileBase

This will let us use UWP to create a new instance of something derived from FileBase with another instance of something else derived from FileBase, all while keeping track of the same `IStorageFile` instance.

So we can conceivably do something like:
```csharp
var mediaFile = await MediaPicker.PickPhotoAsync();
var attachment = new EmailAttachment(mediaFile);
```

* Add ctors for FileBase

* Add ctors for ShareFileRequest

* We can't use N on pre-N platforms

* Updated the docs

* Update some docs.

* Bump

* Gate Email/Share files with feature flags

* Add sample for ShareFileRequest

* Added test for share method in netstandard

* [WIP] Adding the Device Tests to the yaml (#737)

* Add the device tests to the yaml
* Select the latest version of xamarin/xcode
* Specify the iPhone simulator in the yaml
* Install the Android emulator
* Fix the shared test

* try to resolve build issue with missing nuget

* Fix docs

* Fix ref

* Trim . off start of extension for getting mimetype

* Don't add empty strings on UWP to email (#738)

* Cleanup UWP a bit
Redth added a commit that referenced this pull request Mar 19, 2019
* GH-491: Fix version parsing (#492)

* Fix version parsing

* Util tests

* GH-373: Permissions Must Be Invoked on MainThread else Throw Exception (#487)

* Throw permission exception if not on main thread when we need to request.

* Add tests for not main thread permissions

* Ensure we use culure invarient on tostring (#483)

* Integrate sourcelink - https://github.com/dotnet/sourcelink (#260)

* Integrate sourcelink https://github.com/dotnet/sourcelink

* Add /p:ContinuousIntegrationBuild=true to build.ps1

* Update Xamarin.Essentials.csproj

* Update build.ps1

* Update to latest source link

* Only add sourcelink in release config

* Cleanup build for mac

* Add properties to turn off CI on device tests.

* Use strings

* Use list

* missed one

* Only add on release and windows :)

* GH-476: Put in checks to see if location services are enabled. (#488)

* Put in checks to see if location services are enabled.

* iOS check to see if location services are enabled.

* GH-383: Multiple sms recipients (#484)

* GH-383: Multiple sms recipients (#415)

* Docs

* Added multiple Recipient capabilities

* Updated docs

* PR requests

* SMS docs and comments

* Fixed potential nullreferenceexception

* Updated SMS message as requested

* Updated Samples for SMS

* Updated sms docs via copying files to right directory.

* Updated label in sample

* Fixed comment slash

* Code cleanup.

* Update sample for iOS support

* Null checks for @Redth

* Removed duplicated/unnecessary argument validation. (#509)

* Removed duplicated/unnecessary argument validation.

The argument validation is being done under `SecureStorage.shared.cs`.

* Re-added parameter validation to iOS specific call.

As requested (correctly) in the review, I re-added the parameter validation for the specific iOS call to `SetAsync `.

* Cleaned online editor whitespaces.

* Handle the case when a key does not exist in the iOS Info.plist. Fixes #523 (#525)

* GH-464 Dispose of any SecRecord inside of the keychain (#499)

* Dispose of any SecRecord inside of the keychain

* Reduced the double indent of the nested usings

* Use specified version of ECMA2Yaml to work around (#532)

Latest version of ECMA2Yaml has some issue with this repository. Need investigate more, use 1.0.417 version as workaround.

* Add ToString overrides on a bunch of types to improve debugging information (#531)

* Add ToString overrides on a bunch of types to improve debugging information

* Remove trailing spaces

* use nameof for all tostring and also update placemark (location is in another pr) (#539)

* Change name to Timestamp. (#538)

* Change name to Timestamp.

* Cleanup extensions

* Add progaurd file for reference (#530)

* Add progaurd file for reference

* minimize progaurd

* Fix #534 by setting default language to english before creating keyge… (#536)

* Fix #534 by setting default language to english before creating keygenerator.

* Fix build!

* Add sample of backup rools, and handl AEADBadTagException (#540)

* Add sample of backup rools, and handl AEADBadTagException

* Typos

* Update iOS Simulator version in device tests

* Regenerate the docs (#541)

* Update the build bits for the new things

* Re-generate the docs

* Markdown and edit fixes. (#528)

* Catch FeatureNotSupportedException when navigating back (#558)

* Update Xamarin.Essentials.csproj (#552)

* iOS don't throw exception when removing key that doesn't exist (#562)

* Integrate App Center SDK into Sample App (#557)

* Update NuGets!

* Added App Center Integration. Added SDKs, build scripts for app Ids, and enabled distribute all sample apps.

* cat test

* Fix android!

* Remove cat

* Add file for common constants! Fix sh scripts.

* Update readme!

* fix null reference exceptions for missing Locale in SpeakSettings (#588)

* [Share] Renamed DataTransfer to Share. Fixes #577 (#586)

* Added some guiding principles for new feature work (#585)

* Added some guiding principles for new feature work

* Update CONTRIBUTING.md

Co-Authored-By: Redth <jondick@gmail.com>

* Update CONTRIBUTING.md

Co-Authored-By: Redth <jondick@gmail.com>

* Update CONTRIBUTING.md

Co-Authored-By: Redth <jondick@gmail.com>

* Update CONTRIBUTING.md

Co-Authored-By: Redth <jondick@gmail.com>

* More contribution guide updates

* Update CONTRIBUTING.md

Co-Authored-By: jamesmontemagno <james.montemagno@gmail.com>

* Update CONTRIBUTING.md

Co-Authored-By: jamesmontemagno <james.montemagno@gmail.com>

* Update README.md (#603)

* Increase Device Test timeout

* GH-629 Fixed launcher sample project (#630)

* Small main thread optimization

* redo commit

* Udated docs

* Revert "Udated docs"

This reverts commit 4c721d3.

* Added exception handling

* Docs fixed

* Remove whitespace

* API Fixes (#590)

* Rename AppInfo.OpenSettings -> ShowSettingsUI

Fixes #567

* Missed one docs rename

* Added back a missing using.

* Fixed up Clipboard API! Updated everything SetTextAsync.
Update xunit test runners

* Updates Connectivity APIs from the review! got rid of Other made it unknown, removed WiMAX and updated Profiles to ConnectionProfiles

* Change MapKey to Platform.MapServiceToken only for UWP

* Dropping the version of the device runner until we can figure out what is broken on UWP (#596)

* Update docs/en/FrameworksIndex/xamarin-essentials-uwp.xml

Co-Authored-By: jamesmontemagno <james.montemagno@gmail.com>

* Fix spacing

* Updated DOCS!

* Added Default and set it to Medium

* [Platform] Remove the Platform for .net standard since it does nothing (#592)

- closes #579

* GH-583: [api-fix] Power / Battery (#591)

* Move the `Power` members into `Battery` Closes #583

* [Battery] If the charge can be determined, return 1.0
 - if the device is on, then it must have some charge
 - chances are, the issue is that there is no battery at all (on power)
 - closes #583

* Merged the PR

* GH-568: [api-fix] Browser (#589)

* OpenAsync returns Task<bool>

Also on iOS we can take advantage of some async methods like PresentViewControllerAsync now.

* Update API docs

* Update Browser.shared.cs

* re-gen docs

* Generated docs

* Revert this to avoid conflicts

* Add in DeviceIdiom and DevicePlatform

* Updated the docs and added a .gitattributes to control the line endings

* Renamed SpeakSettings to SpeechOptions. Closes #580

* Add docs about HTML emails not supported on UWP. Closes #578

* [Map] Fixed the type names and enum values. Closes #576

* Refactor display info and keep screen on.

* Add device display.

* Change to BatteryInfoChanged and BatteryInfoChangedEventArgs

* Revert back battery intent

* If we can't unwrap the key, then tear down everything and start over again.

* Change back to "DisplayInfoChangedEventArgs"

* Update Battery.android.cs

* change to valid key

* Update Battery.android.cs

* Add docs

* Rename file correctly for docs!

* Cleanup docs

* Catch only specific exceptions. some code cleanup

* Updated the sensors to adhere to guidelines. #582
 - enum names
 - compas low pass filter is now a param
 - updated docs
 - public constructors on data and events
 - stating an already started sensor will throw
 - sensor use the same units on all platforms
Added a unit conversion API. #575

* Catch invalid key exception.

* If there is no main window, then there is no UI thread. Closes 510

* Fixes #612

We shouldn't have a need for telephony as we don't check it on others and restricts VOIP apps.

* Integrate html option into sample for email. (#623)

* Add Unknown to DeviceType. Update .net standard to return unknown for platform/idiom/type (#627)

* Update nugetreadme.txt (#625)

* Make sure UWP DeviceTest deps are installed

* Fixed up missed documentation updates

* Remove some unintentional whitespace

* GH-621 Fixes Main thread checks for permissions. (#640)

* Swap version values on iOS

This fixes #639

We were using the wrong version key/values from Info.plist for the respective AppInfo properties.

* Ensure we only check is main thread when prompting

* Revert "Swap version values on iOS"

This reverts commit c61ef22.

We actually have this correct.

* Update nugetreadme.txt

* Return distnct profiles. Added test as well. (#650)

* Update README.md

* Update README.md

* GH-656: Connectivity Updates on Android for Not Available (#657)

* Always check IsAvailable

This may fix #656 on select phones where wifi is returned even though it isn't available.

Still need to investigate profiles

* removing whitespaces

* [docs] Update global metadata for API docs (#659)

* add global file metadata

* update ms.topic

* update topic to match .net docs

* Update PULL_REQUEST_TEMPLATE.md

* GH-668 Calculate Phone v Tablet on Android correctly (#670)

Need to return known and calculate tablet vs phone as "Normal" is returned by all standard devices.

* GH-672: Update SMS recipient (#674)

* Add back constructor taking single recipient.

* Update constructors

* Clean up android xml

* Update xamarin-essentials-android.xml

* Update CONTRIBUTING.md (#692)

* Set up CI with Azure Pipelines (#711)

* Set up CI with Azure Pipelines

* Added the first pass at the yaml

* Typo

* Make sure to sign only on the private bots

* Use vmImage and not name

* Fix a few errors

* Restore as a separate step

* Make sure not to build the samples on macos

* Add some comments and other tweaks

* Set the version to 1.0 to avoid the warnings

* Use the centralized signing template

* Use the xamarin endpoint

* Check to see if there is a variable to access the current github endpoint

* Use the new template

* Build the library on windows/mac and the samples/tests just on windows

* Update azure-pipelines.yml

* Use more explicit job definitions

* Update azure-pipelines.yml

* Update azure-pipelines.yml

* Tweak some audits to run in CI

* More audit CI tweaks

* More audit CI tweaks

* Just a bit more tweaking to CI

* [WIP] Xamarin.Essentials 1.1.0 (#663)

* Use SharedPreferences.Editor.Apply when editing to force disk write to be asynchronous (#637)

* GH-182 Color/Point/Rect/Size Extension Converters (#651)

* Add extension helpers for iOS and Android

* Add UWP colors and adjsut android colors.

* Add UWP Point/Rect/Size

* Rename and optimize!

* Add tests and color helpers!

* Fix unit test and add WithAlpha

* Cleanup iOS as it stores it from 0-1

* Tests are all green!

* Add generate-docs cmd :)

* Add docs config to all :)

* Additional clenaup for docs

* Added some docs

* Updated the mdoc target and regenerated the docs

* Allow for code reuse on macOS (#665)

Even though macOS is not yet officially supported, it is nice to reuse this code. macOS is exactly the same, except for this single property not supported.

* GH-196 Browser Customization (#646)

* Implemented GH-196

* Apply suggestions from code review: Naming

Renamed incorrectly spelled variables

Co-Authored-By: Mrnikbobjeff <schillinik@yahoo.de>

* Implemented GH-196

* Browser update work as requested. Using System.Drawing.Color now

* Adopted more review changes. Type forwarded.

* Review changes

* Made equals operator null safe, removed constructor

* Add documentation and simplify the API!

* Update viewmodel

* Back to 7.2

* GH-676 Require To Check GPS Location is Fake Or Not In GeoLocation (#677)

* Added  bool IsFromMockProvider in Location class

* Checkin

* csproj original

* Revert "csproj original"

This reverts commit 6302b95.

* Revert "Checkin"

This reverts commit 0881e4f.

* Revert "Added  bool IsFromMockProvider in Location class"

This reverts commit e56d940.

* Revert the Xamarin.Essentials.csproj and Samples.Android.csproj to original;

Adjust the property IsFromMockProvider in Location.shared and LocationExetensions.

* Edited sample to show if the location is from moking provider.

* Update docs

* Fixes #694 (#699)

* Update the mdoc to use the new minimum for VS2019

* GH-126: Finish Shake Detector API (#693)

* Update CONTRIBUTING.md (#692)

* GH-126 Detect Shake API (#666)

* Added shaken support

* name vhange

* check-in

* doc update

* Implements the Shake API inside Accelerometer Class;
Change sample to AccelorometerViewModel

* Fix the sample project

* Update the docs

* Added Queue mechanism based off seismic with tests as well. Something is not  right yet with calulating isaccelerating.

* Finalize shake detection!!!

* Re-generated the docs.

* Fix the VM after merge

* GH-704 Handle duplicate item in keychain (#705)

* Update CONTRIBUTING.md (#692)

* #704 if we get a duplicate item try to remove and then re-add if possible.

* Add all possible combinations  for coords to km or mile (#721)

* Add all possible combinations  for coords to km or mile

* Update UnitConverters_Tests.cs

* Use more explicit job definitions

* Update UnitConverters_Tests.cs

* GH-698 Set longer delay on connectivity changes - Android (#700)

* Update CONTRIBUTING.md (#692)

* Fixes #698

* Use original string instead of uri (#716)

* GH-643: Add Android P targeting and support 28 support (#669)

* Update PULL_REQUEST_TEMPLATE.md

* Fixes #643 to add android P targeting and support 28 support

* Add suppresses for Android P

* Cleanup SDKs based on @Redth

* Update more nugets

* More optimizations for Retargeting

* Refactor HasApiLevelN and updated support to 28.0.0.1

* Update manifest and key :)

* Update the device tests certificates

* Make sure to run the checks always

* Updating the certs again to see if CI notices this time...

* Change order to reflect enum (#735)

* Lock keystore on Android for cipher (#734)

* Add locks around android keystore.

* move convert out of lock

* GH-130 & GH-129: Android support for safe shareable file URI’s (#416)

* Android: Support for safe shareable file URI’s

On later versions of Android, you have to wrap streams of data you want to share outside your app (between apps) in a stream through a content provider.  Android Support providers a general use FileProvider we can use for this.  This commit basically adds support for getting all the right AndroidManifest declarations for the custom file provider based on the android support provider, so that we expose an internal method which gets a URI safe for sharing outside of the app.

* Fix absolute type naming

* Add a user interaction test for File Provider

* Fix vibration code

the ifdef meant an empty `else { }` statement with no `if { }` for platforms < 26.  This fixes that.

* Reorder using statements

* Fix test attribute

* Get provider authority properly

* Added external storage permission

* Change file provider path

This is md5(“xamarin_essentials”)

* Copy file into temp folder instead of file

We keep the filename the same this way but use a GUID for a temp sub-folder to ensure a unique path.

* Resgen

* Permissions may need to be checked to control functionality

* The Android FileProvider now can detect permissions
 - internal / external storage can be controlled
 - KitKat+ does not require the permissions
 - corrected the FileProvider resource xml

* Added support for email attachments
 - support for a string path and native file types

* Added attachments to the sample app

* Updated the docs with the new types

* Some fixes for iOS

* Fix the mdoc target

* regen docs

* remove the obsolete armeabi ABI

* Reworked the file logic to try and use public folders first
 - if the file is already exposed, then just use it directly
 - if the file is private, copy to an exposed location first
 - exposing the internal and external caches and the public/external files

* Be more specific with the external storage permission name

* Added some more depth to the comments here

* Unnecessary else

* Added base file info class

* EmailAttachment now derives from FileBase

* Added File Sharing

* Keep track of IStorageFile internally

* Prefer internal IStorageFile in UWP

* Use attachment name properly in UWP

* Add ctor to create from existing FileBase

This will let us use UWP to create a new instance of something derived from FileBase with another instance of something else derived from FileBase, all while keeping track of the same `IStorageFile` instance.

So we can conceivably do something like:
```csharp
var mediaFile = await MediaPicker.PickPhotoAsync();
var attachment = new EmailAttachment(mediaFile);
```

* Add ctors for FileBase

* Add ctors for ShareFileRequest

* We can't use N on pre-N platforms

* Updated the docs

* Update some docs.

* Bump

* Gate Email/Share files with feature flags

* Add sample for ShareFileRequest

* Added test for share method in netstandard

* [WIP] Adding the Device Tests to the yaml (#737)

* Add the device tests to the yaml
* Select the latest version of xamarin/xcode
* Specify the iPhone simulator in the yaml
* Install the Android emulator
* Fix the shared test

* try to resolve build issue with missing nuget

* Fix docs

* Fix ref

* Trim . off start of extension for getting mimetype

* Don't add empty strings on UWP to email (#738)

* Cleanup UWP a bit

* Update azure-pipelines.yml
jamesmontemagno pushed a commit that referenced this pull request Dec 19, 2019
* Use SharedPreferences.Editor.Apply when editing to force disk write to be asynchronous (#637)

* GH-182 Color/Point/Rect/Size Extension Converters (#651)

* Add extension helpers for iOS and Android

* Add UWP colors and adjsut android colors.

* Add UWP Point/Rect/Size

* Rename and optimize!

* Add tests and color helpers!

* Fix unit test and add WithAlpha

* Cleanup iOS as it stores it from 0-1

* Tests are all green!

* Add generate-docs cmd :)

* Add docs config to all :)

* Additional clenaup for docs

* Added some docs

* Updated the mdoc target and regenerated the docs

* Allow for code reuse on macOS (#665)

Even though macOS is not yet officially supported, it is nice to reuse this code. macOS is exactly the same, except for this single property not supported.

* GH-196 Browser Customization (#646)

* Implemented GH-196

* Apply suggestions from code review: Naming

Renamed incorrectly spelled variables

Co-Authored-By: Mrnikbobjeff <schillinik@yahoo.de>

* Implemented GH-196

* Browser update work as requested. Using System.Drawing.Color now

* Adopted more review changes. Type forwarded.

* Review changes

* Made equals operator null safe, removed constructor

* Add documentation and simplify the API!

* Update viewmodel

* Back to 7.2

* GH-676 Require To Check GPS Location is Fake Or Not In GeoLocation (#677)

* Added  bool IsFromMockProvider in Location class

* Checkin

* csproj original

* Revert "csproj original"

This reverts commit 6302b95.

* Revert "Checkin"

This reverts commit 0881e4f.

* Revert "Added  bool IsFromMockProvider in Location class"

This reverts commit e56d940.

* Revert the Xamarin.Essentials.csproj and Samples.Android.csproj to original;

Adjust the property IsFromMockProvider in Location.shared and LocationExetensions.

* Edited sample to show if the location is from moking provider.

* Update docs

* Fixes #694 (#699)

* Update the mdoc to use the new minimum for VS2019

* GH-126: Finish Shake Detector API (#693)

* Update CONTRIBUTING.md (#692)

* GH-126 Detect Shake API (#666)

* Added shaken support

* name vhange

* check-in

* doc update

* Implements the Shake API inside Accelerometer Class;
Change sample to AccelorometerViewModel

* Fix the sample project

* Update the docs

* Added Queue mechanism based off seismic with tests as well. Something is not  right yet with calulating isaccelerating.

* Finalize shake detection!!!

* Re-generated the docs.

* Fix the VM after merge

* GH-704 Handle duplicate item in keychain (#705)

* Update CONTRIBUTING.md (#692)

* #704 if we get a duplicate item try to remove and then re-add if possible.

* Initial commit Clipboard Change

* Implemented Clipboard listeners on iOS, tested on android and uwp and fixed other issues related to Visual Studio for Mac and Essentials support.

* Initial commit Clipboard Change

* Implemented Clipboard listeners on iOS, tested on android and uwp and fixed other issues related to Visual Studio for Mac and Essentials support.

* Naming fix

* UI improvements

* Docs update

* docs update part 2

* docs tool breaking fix

* reverted change to csproj
ScottBTR pushed a commit to builttoroam/Essentials that referenced this pull request Jan 22, 2020
* Use SharedPreferences.Editor.Apply when editing to force disk write to be asynchronous (xamarin#637)

* xamarinGH-182 Color/Point/Rect/Size Extension Converters (xamarin#651)

* Add extension helpers for iOS and Android

* Add UWP colors and adjsut android colors.

* Add UWP Point/Rect/Size

* Rename and optimize!

* Add tests and color helpers!

* Fix unit test and add WithAlpha

* Cleanup iOS as it stores it from 0-1

* Tests are all green!

* Add generate-docs cmd :)

* Add docs config to all :)

* Additional clenaup for docs

* Added some docs

* Updated the mdoc target and regenerated the docs

* Allow for code reuse on macOS (xamarin#665)

Even though macOS is not yet officially supported, it is nice to reuse this code. macOS is exactly the same, except for this single property not supported.

* xamarinGH-196 Browser Customization (xamarin#646)

* Implemented xamarinGH-196

* Apply suggestions from code review: Naming

Renamed incorrectly spelled variables

Co-Authored-By: Mrnikbobjeff <schillinik@yahoo.de>

* Implemented xamarinGH-196

* Browser update work as requested. Using System.Drawing.Color now

* Adopted more review changes. Type forwarded.

* Review changes

* Made equals operator null safe, removed constructor

* Add documentation and simplify the API!

* Update viewmodel

* Back to 7.2

* xamarinGH-676 Require To Check GPS Location is Fake Or Not In GeoLocation (xamarin#677)

* Added  bool IsFromMockProvider in Location class

* Checkin

* csproj original

* Revert "csproj original"

This reverts commit 6302b95.

* Revert "Checkin"

This reverts commit 0881e4f.

* Revert "Added  bool IsFromMockProvider in Location class"

This reverts commit e56d940.

* Revert the Xamarin.Essentials.csproj and Samples.Android.csproj to original;

Adjust the property IsFromMockProvider in Location.shared and LocationExetensions.

* Edited sample to show if the location is from moking provider.

* Update docs

* Fixes xamarin#694 (xamarin#699)

* Update the mdoc to use the new minimum for VS2019

* xamarinGH-126: Finish Shake Detector API (xamarin#693)

* Update CONTRIBUTING.md (xamarin#692)

* xamarinGH-126 Detect Shake API (xamarin#666)

* Added shaken support

* name vhange

* check-in

* doc update

* Implements the Shake API inside Accelerometer Class;
Change sample to AccelorometerViewModel

* Fix the sample project

* Update the docs

* Added Queue mechanism based off seismic with tests as well. Something is not  right yet with calulating isaccelerating.

* Finalize shake detection!!!

* Re-generated the docs.

* Fix the VM after merge

* xamarinGH-704 Handle duplicate item in keychain (xamarin#705)

* Update CONTRIBUTING.md (xamarin#692)

* xamarin#704 if we get a duplicate item try to remove and then re-add if possible.

* Initial commit Clipboard Change

* Implemented Clipboard listeners on iOS, tested on android and uwp and fixed other issues related to Visual Studio for Mac and Essentials support.

* Initial commit Clipboard Change

* Implemented Clipboard listeners on iOS, tested on android and uwp and fixed other issues related to Visual Studio for Mac and Essentials support.

* Naming fix

* UI improvements

* Docs update

* docs update part 2

* docs tool breaking fix

* reverted change to csproj
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants