Ejemplo n.º 1
0
        public bool OnLongClick(View v)
        {
            var      item      = new ClipData.Item(v.Tag.JavaCast <Java.Lang.String>());
            var      mimeTypes = new String[1];
            ClipData data      = null;

            if (v is ImageView)
            {
                // image item only drags WITHIN THE APP
                mimeTypes[0] = "image/jpeg";
                data         = new ClipData(v.Tag.JavaCast <Java.Lang.String>().ToString(), mimeTypes, item);
                // TODO: allow image to drag to other apps
            }
            else if (v is TextView)
            {
                // use plain text, can drag outside the app
                data = ClipData.NewPlainText(
                    new Java.Lang.String(v.Tag.ToString()),
                    new Java.Lang.String((v as TextView).Text)
                    );
            }

            var dragShadowBuilder = new View.DragShadowBuilder(v);

            // flags required to drag to other apps
            v.StartDragAndDrop(data, dragShadowBuilder, v, (int)ADragFlags.Global | (int)ADragFlags.GlobalUriRead | (int)ADragFlags.GlobalUriWrite);

            return(true);
        }
Ejemplo n.º 2
0
 public static IMimeItem Parse(ClipData.Item item)
 {
     if (item.Uri != null && new AndroidUriMimeItem(item.Uri) is IMimeItem result && result.MimeType != null)
     {
         var mimeType = result.MimeType;
         var value    = result.Value;
         return(result);
     }
     if (item.HtmlText != null)
     {
         return(new AndroidHtmlMimeItem(item.HtmlText));
     }
     if (item.TextFormatted != null && item.CoerceToHtmlText(Forms9Patch.Droid.Settings.Context) is string html)
     {
         return(new AndroidHtmlMimeItem(html));
     }
     if (item.Text != null)
     {
         return(new AndroidTextMimeItem(item.Text));
     }
     if (item.Intent != null)
     {
         return(new AndroidIntentMimeItem(item.Intent));
     }
     return(null);
 }
Ejemplo n.º 3
0
        private void UpdateDisplay()
        {
            bool             pasteEnable         = false;
            ClipboardManager clipboardManagerNew = _clipboardManager as ClipboardManager;

            if (clipboardManagerNew != null)
            {
                if (clipboardManagerNew.HasPrimaryClip)
                {
                    string        clipText = string.Empty;
                    ClipData.Item item     = clipboardManagerNew.PrimaryClip.GetItemAt(0);
                    if (item != null)
                    {
                        clipText = clipboardManagerNew.PrimaryClipDescription.HasMimeType(ClipDescription.MimetypeTextPlain) ?
                                   item.Text : item.CoerceToText(this);
                    }
                    if (!string.IsNullOrWhiteSpace(clipText))
                    {
                        pasteEnable = true;
                    }
                }
            }
            else
            {
#pragma warning disable 618
                Android.Text.ClipboardManager clipboardManagerOld = _clipboardManager as Android.Text.ClipboardManager;
#pragma warning restore 618
                if (!string.IsNullOrWhiteSpace(clipboardManagerOld?.Text))
                {
                    pasteEnable = true;
                }
            }
            _buttonYandexApiKeyPaste.Enabled = pasteEnable;
            _buttonYandexApiKeyTest.Enabled  = !string.IsNullOrWhiteSpace(_editTextYandexApiKey.Text);
        }
Ejemplo n.º 4
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            SetContentView(Resource.Layout.activity_main);

            var btnCopy  = FindViewById <Button>(Resource.Id.btn_copy);
            var btnPaste = FindViewById <Button>(Resource.Id.btn_paste);

            var txtCopy  = FindViewById <EditText>(Resource.Id.txt_copy);
            var txtPaste = FindViewById <TextView> (Resource.Id.txt_paste);

            clipboardManager = (ClipboardManager)GetSystemService(ClipboardService);
            btnCopy.Click   += delegate {
                var copyText = txtCopy.Text;
                clipData = ClipData.NewPlainText("text", copyText);
                clipboardManager.PrimaryClip = clipData;
                Toast.MakeText(this, Resource.String.msg_copy_text, ToastLength.Short).Show();
            };
            btnPaste.Click += delegate {
                ClipData.Item item = clipboardManager.PrimaryClip.GetItemAt(0);
                txtPaste.Text = item.Text;
                Toast.MakeText(this, Resource.String.msg_paste_text, ToastLength.Short).Show();
            };
        }
Ejemplo n.º 5
0
        protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            if (requestCode == VOICE)
            {
                if (resultCode == Result.Ok)
                {
                    var matches = data.GetStringArrayListExtra(RecognizerIntent.ExtraResults);
                    if (matches.Count != 0)
                    {
                        string textInput = matches[0];
                        MessagingCenter.Send <IMessageSender, string>(this, "STT", textInput);
                    }
                    else
                    {
                        MessagingCenter.Send <IMessageSender, string>(this, "STT", "No input");
                    }
                }
            }
            base.OnActivityResult(requestCode, resultCode, data);

            //If we are calling multiple image selection, enter into here and return photos and their filepaths.
            if (requestCode == OPENGALLERYCODE && resultCode == Result.Ok)
            {
                List <string> images = new List <string>();

                if (data != null)
                {
                    //Separate all photos and get the path from them all individually.
                    ClipData clipData = data.ClipData;
                    if (clipData != null)
                    {
                        for (int i = 0; i < clipData.ItemCount; i++)
                        {
                            ClipData.Item   item = clipData.GetItemAt(i);
                            Android.Net.Uri uri  = item.Uri;
                            var             path = GetRealPathFromURI(uri);


                            if (path != null)
                            {
                                images.Add(path);
                            }
                        }
                    }
                    else
                    {
                        Android.Net.Uri uri  = data.Data;
                        var             path = GetRealPathFromURI(uri);

                        if (path != null)
                        {
                            images.Add(path);
                        }
                    }

                    //Send our images to the carousel view.
                    MessagingCenter.Send <App, List <string> >((App)Xamarin.Forms.Application.Current, "ImagesSelectedAndroid", images);
                }
            }
        }
Ejemplo n.º 6
0
        protected override async void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            base.OnActivityResult(requestCode, resultCode, data);
            InAppBillingImplementation.HandleActivityResult(requestCode, resultCode, data);

            if (requestCode == OPENGALLERYCODE && resultCode == Result.Ok)
            {
                List <byte[]> images = new List <byte[]>();

                if (data != null)
                {
                    ClipData clipData = data.ClipData;
                    // if clipData exists, it means there are more than 1 image

                    if (clipData != null)
                    {
                        // we need to send this message so the view can show loading
                        MessagingCenter.Send <object>(this, MessagingKeys.ShowLoadingIndicator);

                        for (int i = 0; i < clipData.ItemCount; i++)
                        {
                            if (i > 5)
                            {
                                break;
                            }                     // limit to 5 images
                            try {
                                ClipData.Item item = clipData.GetItemAt(i);
                                var           uri  = item.Uri;

                                await Task.Run(() => {
                                    images.Add(PhotoUtilHelper.UpdateAndConvertURI(this, uri));
                                });
                            } catch (Exception ex) {
                                Console.WriteLine(ex.Message);
                            }
                        }
                    }
                    else
                    {
                        try {
                            MessagingCenter.Send <object>(this, MessagingKeys.ShowLoadingIndicator);
                            var uri = data.Data;
                            await Task.Run(() => {
                                images.Add(PhotoUtilHelper.UpdateAndConvertURI(this, uri));
                            });
                        } catch (Exception ex) {
                            Console.WriteLine(ex.Message);
                        }
                    }

                    // post the message with the list attached
                    MessagingCenter.Send <object, object>(this, MessagingKeys.DidFinishSelectingImages, images);
                }
            }
        }
        public async Task OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            var mediaPicked = new ObservableCollection <MediaFile>();
            var tasks       = new List <Task>();

            if (requestCode == MultiPickerResultCode)
            {
                if (resultCode == Result.Ok)
                {
                    if (data != null)
                    {
                        ClipData clipData = data.ClipData;
                        if (clipData != null)
                        {
                            for (int i = 0; i < clipData.ItemCount; i++)
                            {
                                ClipData.Item   item = clipData.GetItemAt(i);
                                Android.Net.Uri uri  = item.Uri;

                                tasks.Add(Task.Run(
                                              () =>
                                {
                                    var media = CreateMediaFileFromUri(uri);

                                    if (media != null)
                                    {
                                        lock (Obj)
                                        {
                                            mediaPicked.Add(media);
                                        }
                                        OnMediaPicked?.Invoke(this, media);
                                    }
                                }));
                            }
                        }
                        else
                        {
                            Android.Net.Uri uri   = data.Data;
                            var             media = CreateMediaFileFromUri(uri);
                            if (media != null)
                            {
                                mediaPicked.Add(media);
                                OnMediaPicked?.Invoke(this, media);
                            }
                        }
                    }
                }
                await Task.WhenAll(tasks);

                OnMediaPickedCompleted?.Invoke(this, mediaPicked);
                _mediaPickedTcs?.TrySetResult(mediaPicked);
            }
        }
Ejemplo n.º 8
0
        protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            base.OnActivityResult(requestCode, resultCode, data);

            //NuGet Initializations
            CarouselViewRenderer.Init();
            FFImageLoading.Forms.Platform.CachedImageRenderer.Init(enableFastRenderer: false);

            //If we are calling multiple image selection, enter into here and return photos and their filepaths.
            if (requestCode == OPENGALLERYCODE && resultCode == Result.Ok)
            {
                List <string> images = new List <string>();

                if (data != null)
                {
                    //Separate all photos and get the path from them all individually.
                    ClipData clipData = data.ClipData;
                    if (clipData != null)
                    {
                        for (int i = 0; i < clipData.ItemCount; i++)
                        {
                            ClipData.Item   item = clipData.GetItemAt(i);
                            Android.Net.Uri uri  = item.Uri;
                            var             path = GetRealPathFromURI(uri);


                            if (path != null)
                            {
                                images.Add(path);
                            }
                        }
                    }
                    else
                    {
                        Android.Net.Uri uri  = data.Data;
                        var             path = GetRealPathFromURI(uri);

                        if (path != null)
                        {
                            images.Add(path);
                        }
                    }

                    //Send our images to the carousel view.
                    MessagingCenter.Send <App, List <string> >((App)Xamarin.Forms.Application.Current, "ImagesSelectedAndroid", images);
                    items = new ObservableCollection <App>();
                }
            }
        }
        public void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            ObservableCollection <MediaModel> oCollection = null;

            if (requestCode == SOURCE_PICK_CODE)
            {
                if (resultCode == Result.Ok)
                {
                    oCollection = new ObservableCollection <MediaModel>();

                    if (data != null)
                    {
                        ClipData oData = data.ClipData;

                        if (oData != null)
                        {
                            for (int i = 0; i < oData.ItemCount; i++)
                            {
                                ClipData.Item   oItem  = oData.GetItemAt(i);
                                Android.Net.Uri oUri   = oItem.Uri;
                                var             oModel = CreateMediaModel(oUri);
                                if (oModel != null)
                                {
                                    oCollection.Add(oModel);
                                    OnMediaPicked?.Invoke(this, oModel);
                                }
                            }
                        }
                        else
                        {
                            Android.Net.Uri oUri   = data.Data;
                            var             oModel = CreateMediaModel(oUri);

                            if (oModel != null)
                            {
                                oCollection.Add(oModel);
                                OnMediaPicked?.Invoke(this, oModel);
                            }
                        }

                        OnMediaPickedCompleted?.Invoke(this, oCollection);
                    }
                }

                _taskCompletionSource?.TrySetResult(oCollection);
            }
        }
Ejemplo n.º 10
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource   = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);

            Xamarin.Forms.Forms.Init(this, savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);

            CrossCurrentActivity.Current.Init(this, savedInstanceState);
            Xamarin.FormsMaps.Init(this, savedInstanceState);

            Xamarin.Forms.Forms.ViewInitialized += (object sender, Xamarin.Forms.ViewInitializedEventArgs e) =>
            {
                if (!string.IsNullOrWhiteSpace(e.View.AutomationId))
                {
                    e.NativeView.ContentDescription = e.View.AutomationId;
                }
            };

            App mainForms = new App();

            LoadApplication(mainForms);

            serviceIntent = new Intent(this, typeof(AndroidLocationService));
            SetServiceMethods();

            SetAppTheme();

            if (Intent.Action == Intent.ActionSend)
            {
                // Get the info from ClipData
                ClipData.Item file = Intent.ClipData.GetItemAt(0);

                // Open a stream from the URI
                System.IO.Stream fileStream = ContentResolver.OpenInputStream(file.Uri);

                // Save it over
                System.IO.MemoryStream memOfFile = new System.IO.MemoryStream();

                fileStream.CopyTo(memOfFile);
                string decoded = Encoding.UTF8.GetString(memOfFile.ToArray());

                _ = mainForms.ImportRawGeoJSON(decoded);
            }
        }
Ejemplo n.º 11
0
        protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            base.OnActivityResult(requestCode, resultCode, data);

            if (requestCode == OPENGALLERYCODE && resultCode == Result.Ok)
            {
                List <string> images = new List <string>();

                if (data != null)
                {
                    ClipData clipData = data.ClipData;
                    if (clipData != null)
                    {
                        for (int i = 0; i < clipData.ItemCount; i++)
                        {
                            ClipData.Item   item = clipData.GetItemAt(i);
                            Android.Net.Uri uri  = item.Uri;
                            var             path = GetRealPathFromURI(uri);

                            if (path != null)
                            {
                                //Rotate Image
                                var imageRotated = ImageHelpers.RotateImage(path);
                                var newPath      = ImageHelpers.SaveFile("TmpPictures", imageRotated, System.DateTime.Now.ToString("yyyyMMddHHmmssfff"));
                                images.Add(newPath);
                            }
                        }
                    }
                    else
                    {
                        Android.Net.Uri uri  = data.Data;
                        var             path = GetRealPathFromURI(uri);

                        if (path != null)
                        {
                            //Rotate Image
                            var imageRotated = ImageHelpers.RotateImage(path);
                            var newPath      = ImageHelpers.SaveFile("TmpPictures", imageRotated, System.DateTime.Now.ToString("yyyyMMddHHmmssfff"));
                            images.Add(newPath);
                        }
                    }

                    MessagingCenter.Send <App, List <string> >((App)Xamarin.Forms.Application.Current, "ImagesSelected", images);
                }
            }
        }
Ejemplo n.º 12
0
        protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            base.OnActivityResult(requestCode, resultCode, data);
            if (requestCode == 1 && resultCode == Result.Ok)
            {
                // This is used to stock file paths
                var files = new List <Classes.File>();

                // Get file(s) from ClipBoard
                if (data != null)
                {
                    // Get ClipData from Intent, null if not multiple ClipData items
                    ClipData clipData = data.ClipData;
                    if (clipData != null)
                    {
                        // Multiple files returned by user
                        for (int i = 0; i < clipData.ItemCount; i++)
                        {
                            // Get ClipData containin uri
                            ClipData.Item item = clipData.GetItemAt(i);

                            // Get file URI
                            Android.Net.Uri uri = item.Uri;

                            // Retreive Stream from uri and add it to files
                            files.Add(new Classes.File(GetFileName(uri), ContentResolver.OpenInputStream(uri), GetFileLength(uri)));
                        }
                    }
                    else
                    {
                        // Single File
                        // Get URI
                        var uri = data.Data;

                        // Retreive Stream from uri and add it to files
                        files.Add(new Classes.File(GetFileName(uri), ContentResolver.OpenInputStream(uri), GetFileLength(uri)));
                    }

                    // Dispose Recources
                    data.Dispose();

                    // Sending Result to the SelectPage
                    MessagingCenter.Send("MyApp", "FilesSent", files);
                }
            }
        }
Ejemplo n.º 13
0
        public byte[] GetImageData()
        {
            ClipboardManager clipboard = (ClipboardManager)Forms.Context.GetSystemService(Context.ClipboardService);
            ContentResolver  cr        = Forms.Context.ContentResolver;
            ClipData         clip      = clipboard.PrimaryClip;

            byte[] p = null;
            if (clip != null)
            {
                // Gets the first item from the clipboard data
                ClipData.Item item = clip.GetItemAt(0);

                // Tries to get the item's contents as a URI
                Android.Net.Uri pasteUri = item.Uri;
                // If the clipboard contains a URI reference
                if (pasteUri != null)
                {
                    // Is this a content URI?
                    String uriMimeType = cr.GetType(pasteUri);

                    // If the return value is not null, the Uri is a content Uri
                    if (uriMimeType != null)
                    {
                        // Does the content provider offer a MIME type that the current application can use?
                        if (uriMimeType.StartsWith("image/"))
                        {
                            // Get the data from the content provider.
                            ICursor pasteCursor = cr.Query(pasteUri, null, null, null, null);

                            // If the Cursor contains data, move to the first record
                            if (pasteCursor != null)
                            {
                                if (pasteCursor.MoveToFirst())
                                {
                                    p = pasteCursor.GetBlob(0);
                                }
                            }

                            // close the Cursor
                            pasteCursor.Close();
                        }
                    }
                }
            }
            return(p);
        }
Ejemplo n.º 14
0
        protected override void OnActivityResult(int requestCode, Result resultCode, Intent intent)
        {
            base.OnActivityResult(requestCode, resultCode, intent);
            FacebookClientManager.OnActivityResult(requestCode, resultCode, intent);
            GoogleClientManager.OnAuthCompleted(requestCode, resultCode, intent);

            //If we are calling multiple image selection, enter into here and return photos and their filepaths.
            if (requestCode == OPENGALLERYCODE && resultCode == Result.Ok)
            {
                List <string> images = new List <string>();

                if (intent != null)
                {
                    //Separate all photos and get the path from them all individually.
                    ClipData clipData = intent.ClipData;
                    if (clipData != null)
                    {
                        for (int i = 0; i < clipData.ItemCount; i++)
                        {
                            ClipData.Item   item = clipData.GetItemAt(i);
                            Android.Net.Uri uri  = item.Uri;
                            var             path = GetRealPathFromURI(uri);

                            if (path != null)
                            {
                                images.Add(path);
                            }
                        }
                    }
                    else
                    {
                        Android.Net.Uri uri  = intent.Data;
                        var             path = GetRealPathFromURI(uri);

                        if (path != null)
                        {
                            images.Add(path);
                        }
                    }

                    //Send our images to the carousel view.
                    MessagingCenter.Send <App, List <string> >((App)Xamarin.Forms.Application.Current, "ImagesSelectedAndroid", images);
                }
            }
        }
Ejemplo n.º 15
0
        public void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            ObservableCollection <MediaFile> mediaPicked = null;

            if (requestCode == MultiPickerResultCode)
            {
                if (resultCode == Result.Ok)
                {
                    mediaPicked = new ObservableCollection <MediaFile>();
                    if (data != null)
                    {
                        ClipData clipData = data.ClipData;
                        if (clipData != null)
                        {
                            for (int i = 0; i < clipData.ItemCount; i++)
                            {
                                ClipData.Item   item  = clipData.GetItemAt(i);
                                Android.Net.Uri uri   = item.Uri;
                                var             media = CreateMediaFileFromUri(uri);
                                if (media != null)
                                {
                                    mediaPicked.Add(media);
                                    OnMediaPicked?.Invoke(this, media);
                                }
                            }
                        }
                        else
                        {
                            Android.Net.Uri uri   = data.Data;
                            var             media = CreateMediaFileFromUri(uri);
                            if (media != null)
                            {
                                mediaPicked.Add(media);
                                OnMediaPicked?.Invoke(this, media);
                            }
                        }

                        OnMediaPickedCompleted?.Invoke(this, mediaPicked);
                    }
                }

                mediaPickedTcs?.TrySetResult(mediaPicked);
            }
        }
Ejemplo n.º 16
0
        protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
        {
            base.OnActivityResult(requestCode, resultCode, data);

            if (resultCode == Result.Ok)
            {
                if (data != null)
                {
                    if (data.ClipData != null)
                    {
                        ClipData clipData = data.ClipData;

                        if (clipData == null)
                        {
                            return;
                        }

                        System.Console.WriteLine(clipData.ItemCount);

                        List <Android.Net.Uri> photoList = new List <Android.Net.Uri>();

                        for (int i = 0; i < clipData.ItemCount; i++)
                        {
                            ClipData.Item item = clipData.GetItemAt(i);

                            var uri = item.Uri;
                            //ImagePrint(uri);
                            photoList.Add(uri);
                        }

                        listView.Adapter = new MyCustomListAdapter(photoList);
                    }
                    else if (data.Data != null)
                    {
                        List <Android.Net.Uri> photoList = new List <Android.Net.Uri>();
                        Android.Net.Uri        uri       = data.Data;
                        //ImagePrint(uri);
                        photoList.Add(uri);
                        listView.Adapter = new MyCustomListAdapter(photoList);
                    }
                }
            }
        }
Ejemplo n.º 17
0
        protected override async void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            if (requestCode == PickImageId)
            {
                if ((resultCode == Result.Ok) && (data != null))
                {
                    InitSpinner();
                    sendStatus.Text = "Connecting...";

                    List <string> files = new List <string>();

                    ClipData clipData = data.ClipData;
                    if (clipData != null)
                    {
                        for (int i = 0; i < clipData.ItemCount; i++)
                        {
                            ClipData.Item item = clipData.GetItemAt(i);
                            var           uri  = item.Uri;
                            files.Add(FilePathHelper.GetPath(this, uri));
                        }
                    }
                    else
                    {
                        Android.Net.Uri uri  = data.Data;
                        var             file = FilePathHelper.GetPath(this, uri);
                        files.Add(file);
                    }

                    if (files.Count == 0)
                    {
                        Finish();
                        return;
                    }

                    await SendFiles(files.ToArray());
                }
                else
                {
                    Finish();
                    return;
                }
            }
        }
Ejemplo n.º 18
0
        protected override void OnNewIntent(Intent intent)
        {
            if (intent.Action == Intent.ActionSend)
            {
                ClipData.Item item = intent.ClipData.GetItemAt(0);

                // Pega o nome do arquivo que está sendo compartilhado
                Android.Database.ICursor returnCursor = ContentResolver.Query(item.Uri, null, null, null, null);
                int index = returnCursor.GetColumnIndex(Android.Provider.OpenableColumns.DisplayName);
                returnCursor.MoveToFirst();
                string ext = Path.GetExtension(returnCursor.GetString(index));

                var filestream = ContentResolver.OpenInputStream(item.Uri);

                App.LoadFromSendTo(filestream, ext);
            }

            base.OnNewIntent(intent);
        }
Ejemplo n.º 19
0
        protected override void OnActivityResult(int requestCode, Result resultCode, Intent intent)
        {
            base.OnActivityResult(requestCode, resultCode, intent);

            List <string> mediaPicked = null;

            if ((resultCode == Result.Ok) && (intent != null))
            {
                //Android.Net.Uri uri = intent.Data;
                //Stream stream = ContentResolver.OpenInputStream(uri);
                //
                //// Set the Stream as the completion of the Task
                //PickImageTaskCompletionSource.SetResult(stream);
                //mediaPicked = new IList<Stream>();

                mediaPicked = new List <string>();

                ClipData clipData = intent.ClipData;
                if (clipData != null)
                {
                    for (int i = 0; i < clipData.ItemCount; i++)
                    {
                        ClipData.Item item = clipData.GetItemAt(i);
                        //Android.Net.Uri uri = item.Uri;
                        //Stream stream = ContentResolver.OpenInputStream(uri);
                        //if (stream != null)
                        //{
                        //    mediaPicked.Add(stream);
                        //}
                        mediaPicked.Add(getPath(item.Uri));
                        ///external/images/media/424869
                    }
                }

                PickImageTaskCompletionSource.SetResult(mediaPicked);
                mediaPicked = new List <string>();
            }
            else
            {
                PickImageTaskCompletionSource.SetResult(null);
            }
        }
            /// <summary>
            /// Callback that gets invoked when the primary clip of the device changes.
            /// </summary>
            public void OnPrimaryClipChanged()
            {
                ClipboardManager clipBoard = (ClipboardManager)Android.App.Application.Context.GetSystemService(ClipboardService);
                String           pasteData = "";

                ClipData.Item item = clipBoard.PrimaryClip.GetItemAt(0);
                pasteData = item.Text;

                //Toast.MakeText(Application.Context, "Copied value: " + pasteData, ToastLength.Long).Show();

                /*Intent translationActivity = new Intent(Application.Context, typeof(TranslationActivity));
                 * translationActivity.PutExtra("OCRdText", pasteData);
                 * Application.Context.StartActivity(translationActivity);*/



                Application.Context.StartService(new Intent(Application.Context, typeof(FloatingWidgetService)));

                //Intent translationActivity = new Intent(Application.Context, typeof(MainActivity2));

                //Application.Context.StartActivity(translationActivity);
            }
Ejemplo n.º 21
0
        public bool OnLongClick(View v)
        {
            var item      = new ClipData.Item(v.Tag.JavaCast <Java.Lang.String>());
            var mimeTypes = new String[1];

            if (v is ImageView)
            {
                mimeTypes[0] = "image/jpeg";
            }
            else if (v is TextView)
            {
                mimeTypes[0] = ClipDescription.MimetypeTextPlain;
            }

            var data = new ClipData(v.Tag.JavaCast <Java.Lang.String>().ToString(), mimeTypes, item);

            var dragShadowBuilder = new View.DragShadowBuilder(v);

            v.StartDragAndDrop(data, dragShadowBuilder, v, 0);

            return(true);
        }
        bool ProcessDrop(DragEvent evt, ImageView imageView)
        {
            // Attempt to parse clip data with expected format: category||entry_id.
            // Ignore event if data does not conform to this format.
            ClipData data = evt.ClipData;

            if (data != null)
            {
                if (data.ItemCount > 0)
                {
                    ClipData.Item item     = data.GetItemAt(0);
                    String        textData = (String)item.Text;
                    if (textData != null)
                    {
                        StringTokenizer tokenizer = new StringTokenizer(textData, "||");
                        if (tokenizer.CountTokens() != 2)
                        {
                            return(false);
                        }
                        int category = -1;
                        int entryId  = -1;
                        try {
                            category = Java.Lang.Integer.ParseInt(tokenizer.NextToken());
                            entryId  = Java.Lang.Integer.ParseInt(tokenizer.NextToken());
                        } catch (NumberFormatException exception) {
                            return(false);
                        }
                        UpdateContentAndRecycleBitmap(category, entryId);
                        // Update list fragment with selected entry.
                        TitlesFragment titlesFrag = (TitlesFragment)
                                                    FragmentManager.FindFragmentById(Resource.Id.frag_title);
                        titlesFrag.SelectPosition(entryId);
                        return(true);
                    }
                }
            }
            return(false);
        }
Ejemplo n.º 23
0
 public static IMimeItem Parse(ClipData.Item item)
 {
     if (item.Uri != null && new AndroidUriMimeItem(item.Uri) is IMimeItem result && result.MimeType != null)
     {
         return(result);
     }
     if (item.HtmlText != null)
     {
         return(new AndroidHtmlMimeItem(item.HtmlText));
     }
     if (item.TextFormatted != null && item.CoerceToHtmlText(Android.App.Application.Context) is string html)
     {
         return(new AndroidHtmlMimeItem(html));
     }
     if (item.Text != null)
     {
         return(new AndroidTextMimeItem(item.Text));
     }
     if (item.Intent != null)
     {
         return(new AndroidIntentMimeItem(item.Intent));
     }
     return(null);
 }
Ejemplo n.º 24
0
        /// <summary>
        /// Override OnCreate()
        /// </summary>
        protected async override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            /// <summary>
            /// Initialise the counter to 0
            /// </summary>
            int counter = 0;

            /// <summary>
            /// Define sensor manager,detector and events
            /// </summary>
            _sensorManager = (SensorManager)GetSystemService(Context.SensorService);
            _sensor        = _sensorManager.GetDefaultSensor(SensorType.Accelerometer);
            _shakeDetector = new ShakeDetector();
            /// <summary>
            /// Preload 15 items
            /// </summary>
            ProgressDialog pd = new ProgressDialog(this);

            pd.SetTitle("Loading..");
            pd.Show();
            for (int i = 0; i < 15; i++)
            {
                if (CheckConnection.iSConnected())
                {
                    propsList.Add(await SetViewProperties.SetProperties(new ViewProps()));
                }
                else
                {
                    propsList.Add(SetViewProperties.SetViewProperty(new ViewProps()));
                }
            }
            pd.Dismiss();
            /// <summary>
            ///  Set our view from the "main" layout resource
            /// </summary>
            SetContentView(Resource.Layout.Main);
            /// <summary>
            ///  Device specific properties
            /// </summary>
            DeviceSpecificProperties props = new DeviceSpecificProperties();
            double Y = props.inchY;
            /// <summary>
            ///  //Define the views and layouts which can be accessed
            /// </summary>
            ImageView imageView = FindViewById <ImageView>(Resource.Id.imageView);

            imageView.SetImageResource(Resource.Drawable.Icon);
            RelativeLayout layout = FindViewById <RelativeLayout>(Resource.Id.mainLayout);

            _shakeDetector.Shaked += (sender1, shakeCount) =>
            {
                lock (_syncLock)
                {
                    imageView.Visibility = ViewStates.Invisible;
                }
            };
            /// <summary>
            ///  Events
            /// </summary>
            imageView.LongClick += (sender, e) =>
            {
                View v = (View)sender;

                ClipData.Item item      = new ClipData.Item("category", "value");
                string[]      mimeTypes = { ClipDescription.MimetypeTextPlain };

                ClipData dragData = new ClipData("category", mimeTypes, item);
                View.DragShadowBuilder myShadow = new View.DragShadowBuilder(imageView);

                imageView.StartDrag(dragData, myShadow, null, 0);
            };
            imageView.Drag += (sender, e) =>
            {
                View v = (View)sender;
                switch (e.Event.Action)
                {
                case DragAction.Started:
                    layoutParams = (RelativeLayout.LayoutParams)v.LayoutParameters;
                    break;

                case DragAction.Entered:
                    var x_cord = (int)e.Event.GetX();
                    var y_cord = (int)e.Event.GetY();
                    break;

                case DragAction.Exited:
                    x_cord = (int)e.Event.GetX();
                    y_cord = (int)e.Event.GetY();
                    layoutParams.LeftMargin = x_cord;
                    layoutParams.TopMargin  = y_cord;
                    v.LayoutParameters      = layoutParams;
                    break;

                case DragAction.Location:
                    x_cord = (int)e.Event.GetX();
                    y_cord = (int)e.Event.GetY();
                    break;

                case DragAction.Drop:
                    break;

                default: break;
                }
            };
            int prevtime = 0;

            imageView.Click += async(sender, e) =>
            {
                prevtime++;

                if (prevtime == 2)
                {
                    if (CheckConnection.iSConnected())
                    {
                        var res = await SetViewProperties.SetProperties(new ViewProps());

                        imageView.SetImageBitmap(res.image);

                        if (res.title != null)
                        {
                            ActionBar.Title = res.title;
                        }
                    }
                    else
                    {
                        var res = SetViewProperties.SetViewProperty(new ViewProps());

                        imageView.SetImageBitmap(res.image);

                        if (res.title != null)
                        {
                            ActionBar.Title = res.title;
                        }
                    }

                    prevtime = 0;
                }
            };
            layout.Touch += (sender, e) =>
            {
                try
                {
                    imageView.Visibility = ViewStates.Visible;
                    var x_cord = (int)e.Event.RawX;
                    var y_cord = (int)(e.Event.RawY - Y * 0.23);
                    layoutParams               = new RelativeLayout.LayoutParams((int)100, (int)100);
                    layoutParams.LeftMargin    = x_cord;
                    layoutParams.TopMargin     = y_cord;
                    imageView.LayoutParameters = layoutParams;
                    if (e.Event.Action == MotionEventActions.Up)
                    {
                        try
                        {
                            if (counter < 15)
                            {
                                var res = propsList[counter];
                                imageView.SetImageBitmap(res.image);

                                if (res.title != null)
                                {
                                    ActionBar.Title = res.title;
                                }

                                counter++;

                                //if (CheckConnection.iSConnected())
                                //{
                                //    var res = await SetViewProperties.SetProperties(new ViewProps());
                                //    //var res = propsList[counter + 1];
                                //    imageView.SetImageBitmap(res.image);
                                //    ActionBar.Title = res.title;
                                //}
                                //else
                                //{
                                //    var res = SetViewProperties.SetViewProperty(new ViewProps());
                                //    imageView.SetImageBitmap(res.image);
                                //}
                            }
                            else
                            {
                                counter = 0;
                            }
                        }
                        catch (Java.Lang.Exception e1)
                        {
                            e1.PrintStackTrace();
                            var res = SetViewProperties.SetViewProperty(new ViewProps());
                            imageView.SetImageBitmap(res.image);
                        }
                    }
                }
                catch (Java.Lang.Exception e1)
                {
                    var res = SetViewProperties.SetViewProperty(new ViewProps());
                    imageView.SetImageBitmap(res.image);
                }
            };
        }
Ejemplo n.º 25
0
        protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            base.OnActivityResult(requestCode, resultCode, data);


            //If we are calling multiple image selection, enter into here and return photos and their filepaths.
            if (requestCode == OPENGALLERYCODE && resultCode == Result.Ok)
            {
                List <string> images    = new List <string>();
                List <Stream> imgStream = new List <Stream>();

                if (data != null)
                {
                    //Separate all photos and get the path from them all individually.
                    ClipData clipData = data.ClipData;
                    if (clipData != null)
                    {
                        for (int i = 0; i < clipData.ItemCount; i++)
                        {
                            ClipData.Item   item = clipData.GetItemAt(i);
                            Android.Net.Uri uri  = item.Uri;

                            var path = GetRealPathFromURI(uri);


                            // TESTING RESIZE !!
                            byte[] file = this.Resize(uri, path, 60, 60);

                            //byte[] file = File.ReadAllBytes(path);
                            System.IO.Stream strm = new MemoryStream(file);

                            if (path != null)
                            {
                                imgStream.Add(strm);
                                images.Add(path);
                            }
                        }
                    }
                    else
                    {
                        Android.Net.Uri uri  = data.Data;
                        var             path = GetRealPathFromURI(uri);


                        // TESTING RESIZE !!
                        byte[] file = this.Resize(uri, path, 60, 60);

                        // byte[] file = File.ReadAllBytes(path);
                        System.IO.Stream strm = new MemoryStream(file);


                        if (path != null)
                        {
                            imgStream.Add(strm);
                            images.Add(path);
                        }
                    }

                    //Send our images to the carousel view.
                    MessagingCenter.Send(imgStream, "ImagesStreamAndroid"); // New test
                    MessagingCenter.Send(images, "ImagesSelectedAndroid");
                }
            }
        }
Ejemplo n.º 26
0
        public override void OnActivityResult(int requestCode, int resultCode, Intent data)
        {
            base.OnActivityResult(requestCode, resultCode, data);
            try
            {
                if (_paths != null)
                {
                    _paths.Clear(); /*remove initial image*/
                }

                //result code is -1
                if (resultCode == (int)Result.Ok)
                {
                    var    clipData = data.ClipData;
                    Uri    uri;
                    string path;
                    if (clipData != null)     //handlem multi selection
                    {
                        //Console.WriteLine(string.Format("Clip data count {0}", clipData.ItemCount));
                        //var imagePath = HelperClass.GetPathToImage(pickedImageUrl);
                        for (int i = 0; i < clipData.ItemCount; i++)
                        {
                            ClipData.Item item = clipData.GetItemAt(i);

                            uri = item.Uri;     //get the image Uris

                            //In case you need image's absolute path
                            path = HelperClass.GetPathToImage(uri);
                            if (path != null)
                            {
                                if (_paths != null)
                                {
                                    _paths.Add(path);                     //add the image paths
                                }
                            }
                        }
                        Toast.MakeText(Application.Context, string.Format("{0} images selected", clipData.ItemCount), ToastLength.Short).Show();
                        _carImageSelected = true;
                        //confirmationDialog.Show();
                    }
                    else
                    {
                        uri  = data.Data;
                        path = HelperClass.GetPathToImage(uri);
                        if (path != null)
                        {
                            if (_paths != null)
                            {
                                _paths.Add(path);                     //add the image paths
                            }
                            _carImageSelected = true;
                        }
                        //@TODO cater for single image selection?
                        Toast.MakeText(Application.Context, "You have selected only one image, you can add upto 25", ToastLength.Short).Show();
                        //confirmationDialog.Show();
                    }

                    //show images previews here
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(string.Format("Image selection error {0} {1}", ex.Message, ex.StackTrace));
                Toast.MakeText(Application.Context,
                               string.Format("Unable to select image please try again {0}", ex.Message),
                               ToastLength.Long).Show();
                _carImageSelected = false;

                MetricsManager.TrackEvent("Image selection error " + ex.Message + ex.StackTrace);
            }

            //verify validation flag
            if (_carImageSelected)
            {
                NotifyCompleted(); // All the input is valid.. Set the step as completed
            }
            else
            {
                NotifyIncomplete(); //Input is invalid do not proceed to next step
            }
        }
Ejemplo n.º 27
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            SupportActionBar.SetHomeButtonEnabled(true);
            SupportActionBar.SetDisplayShowHomeEnabled(true);
            SupportActionBar.SetDisplayHomeAsUpEnabled(true);
            SetContentView(Resource.Layout.yandex_key_select);

            _clipboardManager = GetSystemService(ClipboardService);
            _imm         = (InputMethodManager)GetSystemService(InputMethodService);
            _contentView = FindViewById <View>(Android.Resource.Id.Content);

            SetResult(Android.App.Result.Canceled);

            _oldYandexApiKey = ActivityCommon.YandexApiKey ?? string.Empty;

            _activityCommon = new ActivityCommon(this);

            _layoutYandexKey = FindViewById <LinearLayout>(Resource.Id.layoutYandexKey);
            _layoutYandexKey.SetOnTouchListener(this);

            _editTextYandexApiKey      = FindViewById <EditText>(Resource.Id.editTextYandexApiKey);
            _editTextYandexApiKey.Text = _oldYandexApiKey;

            _buttonYandexApiKeyCreate = FindViewById <Button>(Resource.Id.buttonYandexKeyCreate);
            _buttonYandexApiKeyCreate.SetOnTouchListener(this);
            _buttonYandexApiKeyCreate.Click += (sender, args) =>
            {
                StartActivity(new Intent(Intent.ActionView, Android.Net.Uri.Parse(@"https://tech.yandex.com/keys/get/?service=trnsl")));
            };

            _buttonYandexApiKeyGet = FindViewById <Button>(Resource.Id.buttonYandexKeyGet);
            _buttonYandexApiKeyGet.SetOnTouchListener(this);
            _buttonYandexApiKeyGet.Click += (sender, args) =>
            {
                StartActivity(new Intent(Intent.ActionView, Android.Net.Uri.Parse(@"https://tech.yandex.com/keys/")));
            };

            _buttonYandexApiKeyPaste = FindViewById <Button>(Resource.Id.buttonYandexKeyPaste);
            _buttonYandexApiKeyPaste.SetOnTouchListener(this);
            _buttonYandexApiKeyPaste.Click += (sender, args) =>
            {
                ClipboardManager clipboardManagerNew = _clipboardManager as ClipboardManager;
                if (clipboardManagerNew != null)
                {
                    if (clipboardManagerNew.HasPrimaryClip)
                    {
                        string        clipText = string.Empty;
                        ClipData.Item item     = clipboardManagerNew.PrimaryClip.GetItemAt(0);
                        if (item != null)
                        {
                            clipText = clipboardManagerNew.PrimaryClipDescription.HasMimeType(ClipDescription.MimetypeTextPlain) ?
                                       item.Text : item.CoerceToText(this);
                        }
                        if (!string.IsNullOrWhiteSpace(clipText))
                        {
                            _editTextYandexApiKey.Text = clipText.Trim();
                            UpdateDisplay();
                        }
                    }
                }
                else
                {
#pragma warning disable 618
                    Android.Text.ClipboardManager clipboardManagerOld = _clipboardManager as Android.Text.ClipboardManager;
#pragma warning restore 618
                    if (!string.IsNullOrWhiteSpace(clipboardManagerOld?.Text))
                    {
                        _editTextYandexApiKey.Text = clipboardManagerOld.Text.Trim();
                        UpdateDisplay();
                    }
                }
            };
            _buttonYandexApiKeyPaste.TextChanged += (sender, args) =>
            {
                UpdateDisplay();
            };

            _textViewYandexApiKeyTestResult = FindViewById <TextView>(Resource.Id.textViewYandexKeyTestResult);

            _buttonYandexApiKeyTest = FindViewById <Button>(Resource.Id.buttonYandexKeyTest);
            _buttonYandexApiKeyTest.SetOnTouchListener(this);
            _buttonYandexApiKeyTest.Click += (sender, args) =>
            {
                _textViewYandexApiKeyTestResult.Text = string.Empty;
                ActivityCommon.YandexApiKey          = _editTextYandexApiKey.Text.Trim();
                if (!_activityCommon.TranslateStrings(new List <string> {
                    @"Dieser Text wurde erfolgreich übersetzt"
                }, list =>
                {
                    if (list != null && list.Count > 0)
                    {
                        _textViewYandexApiKeyTestResult.Text = list[0];
                    }
                    else
                    {
                        _textViewYandexApiKeyTestResult.Text = GetString(Resource.String.button_yandex_key_test_failed);
                    }
                }, true))
                {
                    _textViewYandexApiKeyTestResult.Text = GetString(Resource.String.button_yandex_key_test_failed);
                }
            };

            UpdateDisplay();
        }
Ejemplo n.º 28
0
 protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
 {
     if (requestCode == 1)
     {
         #region GetDataFromGallery
         UploadPrescription UploadPrescription;
         var str = "";
         base.OnActivityResult(requestCode, resultCode, data);
         if (resultCode == Result.Ok)
         {
             int           Totalsize = 0;
             List <byte[]> images    = new List <byte[]>();
             List <string> imagename = new List <string>();
             var           IsValid   = true;
             if (data != null)
             {
                 ClipData clipData = data.ClipData;
                 if (clipData != null)
                 {
                     if (clipData.ItemCount > 4)
                     {
                         MessagingCenter.Send <App, string>((App)Xamarin.Forms.Application.Current, "imagevalidation", "Please Upload Select 4 Images");
                         return;
                     }
                     for (int i = 0; i < clipData.ItemCount; i++)
                     {
                         ClipData.Item   item = clipData.GetItemAt(i);
                         Android.Net.Uri uri  = item.Uri;
                         var             path = GetRealPathFromURI(uri);
                         if (path != null)
                         {
                             //Rotate Image
                             var imageRotated = DependencyService.Get <IImageHelpers>().RotateImage(path);
                             Totalsize += imageRotated.Length;
                             if (Totalsize > 10000000)
                             {
                                 IsValid = false;
                                 MessagingCenter.Send <App, string>((App)Xamarin.Forms.Application.Current, "imagevalidation", "Image Cannot be Greater than 10 MB");
                                 break;
                             }
                             //var newPath = ImageHelpers.SaveFile("TmpPictures", imageRotated, System.DateTime.Now.ToString("yyyyMMddHHmmssfff"));
                             //  str = System.Convert.ToBase64String(imageRotated);
                             images.Add(imageRotated);
                             imagename.Add(uri.LastPathSegment);
                             //   images.Add(newPath);
                         }
                     }
                 }
                 else
                 {
                     Android.Net.Uri uri  = data.Data;
                     var             path = GetRealPathFromURI(uri);
                     if (path != null)
                     {
                         //Rotate Image
                         var imageRotated = DependencyService.Get <IImageHelpers>().RotateImage(path);
                         Totalsize += imageRotated.Length;
                         if (Totalsize > 10000000)
                         {
                             IsValid = false;
                             MessagingCenter.Send <App, string>((App)Xamarin.Forms.Application.Current, "imagevalidation", "Image Cannot be Greater than 10 MB");
                         }
                         //  var newPath = ImageHelpers.SaveFile("TmpPictures", imageRotated, System.DateTime.Now.ToString("yyyyMMddHHmmssfff"));
                         str = System.Convert.ToBase64String(imageRotated);
                         images.Add(imageRotated);
                         imagename.Add(uri.LastPathSegment);
                         //images.Add(str);
                         //images.Add(newPath);
                     }
                 }
                 if (IsValid)
                 {
                     MessagingCenter.Send <App, List <byte[]> >((App)Xamarin.Forms.Application.Current, "ImagesSelected", images);
                 }
                 MessagingCenter.Send <App, List <string> >((App)Xamarin.Forms.Application.Current, "ImagesSelectedName", imagename);
             }
         }
         #endregion GetDataFromGallery
     }
     else
     {
     }
 }
        public void OnLongPress(MotionEvent e)
        {
            if (!HasAnyDragGestures())
            {
                return;
            }

            SendEventArgs <DragGestureRecognizer>(rec =>
            {
                if (!rec.CanDrag)
                {
                    return;
                }

                var element  = GetView();
                var renderer = AppCompat.Platform.GetRenderer(element);
                var v        = renderer.View;

                if (v.Handle == IntPtr.Zero)
                {
                    return;
                }

                var args = rec.SendDragStarting(element);

                if (args.Cancel)
                {
                    return;
                }

                CustomLocalStateData customLocalStateData = new CustomLocalStateData();
                customLocalStateData.DataPackage          = args.Data;

                //_dragSource[element] = args.Data;
                string clipDescription  = FastRenderers.AutomationPropertiesProvider.ConcatenateNameAndHelpText(element) ?? String.Empty;
                ClipData.Item item      = null;
                List <string> mimeTypes = new List <string>();

                if (!args.Handled)
                {
                    if (args.Data.Image != null)
                    {
                        mimeTypes.Add("image/jpeg");
                        item = ConvertToClipDataItem(args.Data.Image, mimeTypes);
                    }
                    else
                    {
                        string text = clipDescription ?? args.Data.Text;
                        if (Uri.TryCreate(text, UriKind.Absolute, out _))
                        {
                            item = new ClipData.Item(AUri.Parse(text));
                            mimeTypes.Add(ClipDescription.MimetypeTextUrilist);
                        }
                        else
                        {
                            item = new ClipData.Item(text);
                            mimeTypes.Add(ClipDescription.MimetypeTextPlain);
                        }
                    }
                }

                var dataPackage        = args.Data;
                ClipData.Item userItem = null;
                if (dataPackage.Image != null)
                {
                    userItem = ConvertToClipDataItem(dataPackage.Image, mimeTypes);
                }

                if (dataPackage.Text != null)
                {
                    userItem = new ClipData.Item(dataPackage.Text);
                }

                if (item == null)
                {
                    item     = userItem;
                    userItem = null;
                }

                ClipData data = new ClipData(clipDescription, mimeTypes.ToArray(), item);

                if (userItem != null)
                {
                    data.AddItem(userItem);
                }

                var dragShadowBuilder = new AView.DragShadowBuilder(v);

                customLocalStateData.SourceNativeView = v;
                customLocalStateData.SourceElement    = renderer?.Element;

                if (Forms.IsNougatOrNewer)
                {
                    v.StartDragAndDrop(data, dragShadowBuilder, customLocalStateData, (int)ADragFlags.Global | (int)ADragFlags.GlobalUriRead);
                }
                else
#pragma warning disable CS0618 // Type or member is obsolete
                {
                    v.StartDrag(data, dragShadowBuilder, customLocalStateData, (int)ADragFlags.Global | (int)ADragFlags.GlobalUriRead);
                }
#pragma warning restore CS0618 // Type or member is obsolete
            });
        }
        public static List <ClipData.Item> AsClipDataItems(this IMimeItemCollection mimeItemCollection)
        {
            ClipboardContentProvider.Clear();
            var result = new List <ClipData.Item>();

            string text = null;
            string html = null;

            // this has to happen because GMAIL will only paste the first "text/html" AND it won't parse correctly unless it is supplied as ClipData.Item(string,string)
            foreach (var item in mimeItemCollection.Items)
            {
                if (text == null && item.MimeType == "text/plain")
                {
                    text = item.Value as string;
                }
                else if (html == null && item.MimeType == "text/html")
                {
                    html = item.Value as string;
                }
            }
            if (html != null)
            {
                result.Add(new ClipData.Item(text ?? html, html));
            }
            else if (text != null)
            {
                result.Add(new ClipData.Item(text));
            }

            foreach (var item in mimeItemCollection.Items)
            {
                ClipData.Item androidClipItem = null;


                // The following block was added to support copying images by intent.
                // However, I have yet to see where it actually works with 3rd party apps.
                // Maybe I'm not doing it right?

                // START OF BLOCK
                if (item.MimeType.StartsWith("image/", StringComparison.InvariantCultureIgnoreCase) || item.Value is FileInfo)
                {
                    Java.IO.File file = null;

                    if (item.Value is FileInfo fileInfo)
                    {
                        file = new Java.IO.File(fileInfo.FullName);
                    }
                    else if (item.Value is byte[] byteArray && MimeSharp.Current.Extension(item.MimeType) is List <string> extensions && extensions.Count > 0)
                    {
                        var ext      = extensions[0];
                        var fileName = Guid.NewGuid() + "." + ext;
                        var dir      = P42.Utils.Environment.TemporaryStoragePath;
                        var path     = Path.Combine(dir, fileName);
                        System.IO.File.WriteAllBytes(path, byteArray);
                        file = new Java.IO.File(path);
                    }

                    if (file != null && file.Exists())
                    {
                        Android.Net.Uri uri    = Android.Net.Uri.FromFile(file);
                        var             intent = new Intent(Intent.ActionSend);
                        intent.SetType(item.MimeType);
                        intent.PutExtra(Intent.ExtraStream, uri);
                        intent.SetFlags(ActivityFlags.GrantReadUriPermission);
                        androidClipItem = new ClipData.Item(intent);
                    }
                    file?.Dispose();
                }
                if (androidClipItem == null)
                {
                    // END OF BLOCK
                    androidClipItem = ClipboardContentProvider.AddAsClipDataItem(item);
                }

                result.Add(androidClipItem);
            }


            return(result);
        }