fix(share_plus): return correct share result on android - #1301

Merged
miquelbeltran merged 3 commits into
fluttercommunity:mainfrom
Coronon:main
Oct 31, 2022
Merged

fix(share_plus): return correct share result on android#1301
miquelbeltran merged 3 commits into
fluttercommunity:mainfrom
Coronon:main

Conversation

@Coronon

@CorononCoronon commented Oct 28, 2022

Copy link
Copy Markdown
Contributor

Description

The share_plus android shareWithResult and shareFilesWithResult implementations are broken. The returned ShareResult.raw is always null on successful share. This PR fixes this by using FLAG_MUTABLE instead of FLAG_IMMUTABLE, as pointed out by @aakash-pamnani. This issue was not found when initially implementing the shareWithResult methods, as the FLAG_IMMUTABLE was only required by the highest API versions. Back then, a simple warning was emitted that strongly suggested using FLAG_IMMUTABLE, which seemed to break nothing.

This PR now fixes the behavior and ensures that the FLAG_MUTABLEPendingIntent given out may not be abused by moving from an implicit internal Intent to an explicit one. This also reduces mental complexity of the implementation.

I also added some more documentation throughout the android implementation.

As always, I provide share_plus_example as a pre-setup example project for this PR.

Related Issues

Fixes#916

Checklist

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • I titled the PR using Conventional Commits.
  • I did not modify the CHANGELOG.md nor the pubspec.yaml files.
  • All existing and new tests are passing.
  • The analyzer (flutter analyze) does not report any problems on my PR.

Breaking Change

Does your PR require plugin users to manually update their apps to accommodate your change?

  • Yes, this is a breaking change (please indicate that with a ! in the title as explained in Conventional Commits).
  • No, this is not a breaking change.

Coronon added a commit to Coronon/share_plus_example that referenced this pull request Oct 28, 2022
@Coronon

Coronon commented Oct 28, 2022

Copy link
Copy Markdown
ContributorAuthor

The Linux test failed because it got a 404 while installing packages through apt - that should not affect this PR

Thank you for re-running the timedout Android integration tests :)

@vbuberenvbuberen left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Tested and it seems to be working good.

Left a few Kotlin related comments, but otherwise looks good to me.

@Coronon

Coronon commented Oct 29, 2022

Copy link
Copy Markdown
ContributorAuthor

Thanks for your review! Fixed all points mentioned and updated my example project and all references to it :)

PS: I just submitted a PR for the failing Linux test #1305

@miquelbeltran

Copy link
Copy Markdown
Member

LGTM, but I'll have to run this on Monday before merging.

@miquelbeltranmiquelbeltran added Hacktoberfest Issues taking part in Hacktoberfest hacktoberfest-accepted labels Oct 29, 2022
@vbuberen

Copy link
Copy Markdown
Collaborator

LGTM, but I'll have to run this on Monday before merging.

I have tested it on Android 10 physical device and emulator of Android 12. Worked well.

@miquelbeltran
miquelbeltran merged commit 994fef7 into fluttercommunity:mainOct 31, 2022
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Jan 28, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

HacktoberfestIssues taking part in Hacktoberfesthacktoberfest-accepted

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: SharewithResult always returning null in Android

3 participants

@Coronon@miquelbeltran@vbuberen
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(share_plus): return correct share result on android - #1301

Merged
miquelbeltran merged 3 commits into
fluttercommunity:mainfrom
Coronon:main
Oct 31, 2022
Merged

fix(share_plus): return correct share result on android#1301
miquelbeltran merged 3 commits into
fluttercommunity:mainfrom
Coronon:main

Conversation

@Coronon

@CorononCoronon commented Oct 28, 2022

Copy link
Copy Markdown
Contributor

Description

The share_plus android shareWithResult and shareFilesWithResult implementations are broken. The returned ShareResult.raw is always null on successful share. This PR fixes this by using FLAG_MUTABLE instead of FLAG_IMMUTABLE, as pointed out by @aakash-pamnani. This issue was not found when initially implementing the shareWithResult methods, as the FLAG_IMMUTABLE was only required by the highest API versions. Back then, a simple warning was emitted that strongly suggested using FLAG_IMMUTABLE, which seemed to break nothing.

This PR now fixes the behavior and ensures that the FLAG_MUTABLEPendingIntent given out may not be abused by moving from an implicit internal Intent to an explicit one. This also reduces mental complexity of the implementation.

I also added some more documentation throughout the android implementation.

As always, I provide share_plus_example as a pre-setup example project for this PR.

Related Issues

Fixes#916

Checklist

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • I titled the PR using Conventional Commits.
  • I did not modify the CHANGELOG.md nor the pubspec.yaml files.
  • All existing and new tests are passing.
  • The analyzer (flutter analyze) does not report any problems on my PR.

Breaking Change

Does your PR require plugin users to manually update their apps to accommodate your change?

  • Yes, this is a breaking change (please indicate that with a ! in the title as explained in Conventional Commits).
  • No, this is not a breaking change.

Coronon added a commit to Coronon/share_plus_example that referenced this pull request Oct 28, 2022
@Coronon

Coronon commented Oct 28, 2022

Copy link
Copy Markdown
ContributorAuthor

The Linux test failed because it got a 404 while installing packages through apt - that should not affect this PR

Thank you for re-running the timedout Android integration tests :)

@vbuberenvbuberen left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Tested and it seems to be working good.

Left a few Kotlin related comments, but otherwise looks good to me.

@Coronon

Coronon commented Oct 29, 2022

Copy link
Copy Markdown
ContributorAuthor

Thanks for your review! Fixed all points mentioned and updated my example project and all references to it :)

PS: I just submitted a PR for the failing Linux test #1305

@miquelbeltran

Copy link
Copy Markdown
Member

LGTM, but I'll have to run this on Monday before merging.

@miquelbeltranmiquelbeltran added Hacktoberfest Issues taking part in Hacktoberfest hacktoberfest-accepted labels Oct 29, 2022
@vbuberen

Copy link
Copy Markdown
Collaborator

LGTM, but I'll have to run this on Monday before merging.

I have tested it on Android 10 physical device and emulator of Android 12. Worked well.

@miquelbeltran
miquelbeltran merged commit 994fef7 into fluttercommunity:mainOct 31, 2022
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Jan 28, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

HacktoberfestIssues taking part in Hacktoberfesthacktoberfest-accepted

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: SharewithResult always returning null in Android

3 participants

@Coronon@miquelbeltran@vbuberen
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(share_plus): return correct share result on android - #1301

Merged
miquelbeltran merged 3 commits into
fluttercommunity:mainfrom
Coronon:main
Oct 31, 2022
Merged

fix(share_plus): return correct share result on android#1301
miquelbeltran merged 3 commits into
fluttercommunity:mainfrom
Coronon:main

Conversation

@Coronon

@CorononCoronon commented Oct 28, 2022

Copy link
Copy Markdown
Contributor

Description

The share_plus android shareWithResult and shareFilesWithResult implementations are broken. The returned ShareResult.raw is always null on successful share. This PR fixes this by using FLAG_MUTABLE instead of FLAG_IMMUTABLE, as pointed out by @aakash-pamnani. This issue was not found when initially implementing the shareWithResult methods, as the FLAG_IMMUTABLE was only required by the highest API versions. Back then, a simple warning was emitted that strongly suggested using FLAG_IMMUTABLE, which seemed to break nothing.

This PR now fixes the behavior and ensures that the FLAG_MUTABLEPendingIntent given out may not be abused by moving from an implicit internal Intent to an explicit one. This also reduces mental complexity of the implementation.

I also added some more documentation throughout the android implementation.

As always, I provide share_plus_example as a pre-setup example project for this PR.

Related Issues

Fixes#916

Checklist

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • I titled the PR using Conventional Commits.
  • I did not modify the CHANGELOG.md nor the pubspec.yaml files.
  • All existing and new tests are passing.
  • The analyzer (flutter analyze) does not report any problems on my PR.

Breaking Change

Does your PR require plugin users to manually update their apps to accommodate your change?

  • Yes, this is a breaking change (please indicate that with a ! in the title as explained in Conventional Commits).
  • No, this is not a breaking change.

Coronon added a commit to Coronon/share_plus_example that referenced this pull request Oct 28, 2022
@Coronon

Coronon commented Oct 28, 2022

Copy link
Copy Markdown
ContributorAuthor

The Linux test failed because it got a 404 while installing packages through apt - that should not affect this PR

Thank you for re-running the timedout Android integration tests :)

@vbuberenvbuberen left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Tested and it seems to be working good.

Left a few Kotlin related comments, but otherwise looks good to me.

@Coronon

Coronon commented Oct 29, 2022

Copy link
Copy Markdown
ContributorAuthor

Thanks for your review! Fixed all points mentioned and updated my example project and all references to it :)

PS: I just submitted a PR for the failing Linux test #1305

@miquelbeltran

Copy link
Copy Markdown
Member

LGTM, but I'll have to run this on Monday before merging.

@miquelbeltranmiquelbeltran added Hacktoberfest Issues taking part in Hacktoberfest hacktoberfest-accepted labels Oct 29, 2022
@vbuberen

Copy link
Copy Markdown
Collaborator

LGTM, but I'll have to run this on Monday before merging.

I have tested it on Android 10 physical device and emulator of Android 12. Worked well.

@miquelbeltran
miquelbeltran merged commit 994fef7 into fluttercommunity:mainOct 31, 2022
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Jan 28, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

HacktoberfestIssues taking part in Hacktoberfesthacktoberfest-accepted

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: SharewithResult always returning null in Android

3 participants

@Coronon@miquelbeltran@vbuberen
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(share_plus): return correct share result on android - #1301

Merged
miquelbeltran merged 3 commits into
fluttercommunity:mainfrom
Coronon:main
Oct 31, 2022
Merged

fix(share_plus): return correct share result on android#1301
miquelbeltran merged 3 commits into
fluttercommunity:mainfrom
Coronon:main

Conversation

@Coronon

@CorononCoronon commented Oct 28, 2022

Copy link
Copy Markdown
Contributor

Description

The share_plus android shareWithResult and shareFilesWithResult implementations are broken. The returned ShareResult.raw is always null on successful share. This PR fixes this by using FLAG_MUTABLE instead of FLAG_IMMUTABLE, as pointed out by @aakash-pamnani. This issue was not found when initially implementing the shareWithResult methods, as the FLAG_IMMUTABLE was only required by the highest API versions. Back then, a simple warning was emitted that strongly suggested using FLAG_IMMUTABLE, which seemed to break nothing.

This PR now fixes the behavior and ensures that the FLAG_MUTABLEPendingIntent given out may not be abused by moving from an implicit internal Intent to an explicit one. This also reduces mental complexity of the implementation.

I also added some more documentation throughout the android implementation.

As always, I provide share_plus_example as a pre-setup example project for this PR.

Related Issues

Fixes#916

Checklist

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • I titled the PR using Conventional Commits.
  • I did not modify the CHANGELOG.md nor the pubspec.yaml files.
  • All existing and new tests are passing.
  • The analyzer (flutter analyze) does not report any problems on my PR.

Breaking Change

Does your PR require plugin users to manually update their apps to accommodate your change?

  • Yes, this is a breaking change (please indicate that with a ! in the title as explained in Conventional Commits).
  • No, this is not a breaking change.

Coronon added a commit to Coronon/share_plus_example that referenced this pull request Oct 28, 2022
@Coronon

Coronon commented Oct 28, 2022

Copy link
Copy Markdown
ContributorAuthor

The Linux test failed because it got a 404 while installing packages through apt - that should not affect this PR

Thank you for re-running the timedout Android integration tests :)

@vbuberenvbuberen left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Tested and it seems to be working good.

Left a few Kotlin related comments, but otherwise looks good to me.

@Coronon

Coronon commented Oct 29, 2022

Copy link
Copy Markdown
ContributorAuthor

Thanks for your review! Fixed all points mentioned and updated my example project and all references to it :)

PS: I just submitted a PR for the failing Linux test #1305

@miquelbeltran

Copy link
Copy Markdown
Member

LGTM, but I'll have to run this on Monday before merging.

@miquelbeltranmiquelbeltran added Hacktoberfest Issues taking part in Hacktoberfest hacktoberfest-accepted labels Oct 29, 2022
@vbuberen

Copy link
Copy Markdown
Collaborator

LGTM, but I'll have to run this on Monday before merging.

I have tested it on Android 10 physical device and emulator of Android 12. Worked well.

@miquelbeltran
miquelbeltran merged commit 994fef7 into fluttercommunity:mainOct 31, 2022
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Jan 28, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

HacktoberfestIssues taking part in Hacktoberfesthacktoberfest-accepted

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: SharewithResult always returning null in Android

3 participants

@Coronon@miquelbeltran@vbuberen
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(share_plus): return correct share result on android - #1301

Merged
miquelbeltran merged 3 commits into
fluttercommunity:mainfrom
Coronon:main
Oct 31, 2022
Merged

fix(share_plus): return correct share result on android#1301
miquelbeltran merged 3 commits into
fluttercommunity:mainfrom
Coronon:main

Conversation

@Coronon

@CorononCoronon commented Oct 28, 2022

Copy link
Copy Markdown
Contributor

Description

The share_plus android shareWithResult and shareFilesWithResult implementations are broken. The returned ShareResult.raw is always null on successful share. This PR fixes this by using FLAG_MUTABLE instead of FLAG_IMMUTABLE, as pointed out by @aakash-pamnani. This issue was not found when initially implementing the shareWithResult methods, as the FLAG_IMMUTABLE was only required by the highest API versions. Back then, a simple warning was emitted that strongly suggested using FLAG_IMMUTABLE, which seemed to break nothing.

This PR now fixes the behavior and ensures that the FLAG_MUTABLEPendingIntent given out may not be abused by moving from an implicit internal Intent to an explicit one. This also reduces mental complexity of the implementation.

I also added some more documentation throughout the android implementation.

As always, I provide share_plus_example as a pre-setup example project for this PR.

Related Issues

Fixes#916

Checklist

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • I titled the PR using Conventional Commits.
  • I did not modify the CHANGELOG.md nor the pubspec.yaml files.
  • All existing and new tests are passing.
  • The analyzer (flutter analyze) does not report any problems on my PR.

Breaking Change

Does your PR require plugin users to manually update their apps to accommodate your change?

  • Yes, this is a breaking change (please indicate that with a ! in the title as explained in Conventional Commits).
  • No, this is not a breaking change.

Coronon added a commit to Coronon/share_plus_example that referenced this pull request Oct 28, 2022
@Coronon

Coronon commented Oct 28, 2022

Copy link
Copy Markdown
ContributorAuthor

The Linux test failed because it got a 404 while installing packages through apt - that should not affect this PR

Thank you for re-running the timedout Android integration tests :)

@vbuberenvbuberen left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Tested and it seems to be working good.

Left a few Kotlin related comments, but otherwise looks good to me.

@Coronon

Coronon commented Oct 29, 2022

Copy link
Copy Markdown
ContributorAuthor

Thanks for your review! Fixed all points mentioned and updated my example project and all references to it :)

PS: I just submitted a PR for the failing Linux test #1305

@miquelbeltran

Copy link
Copy Markdown
Member

LGTM, but I'll have to run this on Monday before merging.

@miquelbeltranmiquelbeltran added Hacktoberfest Issues taking part in Hacktoberfest hacktoberfest-accepted labels Oct 29, 2022
@vbuberen

Copy link
Copy Markdown
Collaborator

LGTM, but I'll have to run this on Monday before merging.

I have tested it on Android 10 physical device and emulator of Android 12. Worked well.

@miquelbeltran
miquelbeltran merged commit 994fef7 into fluttercommunity:mainOct 31, 2022
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Jan 28, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

HacktoberfestIssues taking part in Hacktoberfesthacktoberfest-accepted

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: SharewithResult always returning null in Android

3 participants

@Coronon@miquelbeltran@vbuberen
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(share_plus): return correct share result on android - #1301

Merged
miquelbeltran merged 3 commits into
fluttercommunity:mainfrom
Coronon:main
Oct 31, 2022
Merged

fix(share_plus): return correct share result on android#1301
miquelbeltran merged 3 commits into
fluttercommunity:mainfrom
Coronon:main

Conversation

@Coronon

@CorononCoronon commented Oct 28, 2022

Copy link
Copy Markdown
Contributor

Description

The share_plus android shareWithResult and shareFilesWithResult implementations are broken. The returned ShareResult.raw is always null on successful share. This PR fixes this by using FLAG_MUTABLE instead of FLAG_IMMUTABLE, as pointed out by @aakash-pamnani. This issue was not found when initially implementing the shareWithResult methods, as the FLAG_IMMUTABLE was only required by the highest API versions. Back then, a simple warning was emitted that strongly suggested using FLAG_IMMUTABLE, which seemed to break nothing.

This PR now fixes the behavior and ensures that the FLAG_MUTABLEPendingIntent given out may not be abused by moving from an implicit internal Intent to an explicit one. This also reduces mental complexity of the implementation.

I also added some more documentation throughout the android implementation.

As always, I provide share_plus_example as a pre-setup example project for this PR.

Related Issues

Fixes#916

Checklist

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • I titled the PR using Conventional Commits.
  • I did not modify the CHANGELOG.md nor the pubspec.yaml files.
  • All existing and new tests are passing.
  • The analyzer (flutter analyze) does not report any problems on my PR.

Breaking Change

Does your PR require plugin users to manually update their apps to accommodate your change?

  • Yes, this is a breaking change (please indicate that with a ! in the title as explained in Conventional Commits).
  • No, this is not a breaking change.

Coronon added a commit to Coronon/share_plus_example that referenced this pull request Oct 28, 2022
@Coronon

Coronon commented Oct 28, 2022

Copy link
Copy Markdown
ContributorAuthor

The Linux test failed because it got a 404 while installing packages through apt - that should not affect this PR

Thank you for re-running the timedout Android integration tests :)

@vbuberenvbuberen left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Tested and it seems to be working good.

Left a few Kotlin related comments, but otherwise looks good to me.

@Coronon

Coronon commented Oct 29, 2022

Copy link
Copy Markdown
ContributorAuthor

Thanks for your review! Fixed all points mentioned and updated my example project and all references to it :)

PS: I just submitted a PR for the failing Linux test #1305

@miquelbeltran

Copy link
Copy Markdown
Member

LGTM, but I'll have to run this on Monday before merging.

@miquelbeltranmiquelbeltran added Hacktoberfest Issues taking part in Hacktoberfest hacktoberfest-accepted labels Oct 29, 2022
@vbuberen

Copy link
Copy Markdown
Collaborator

LGTM, but I'll have to run this on Monday before merging.

I have tested it on Android 10 physical device and emulator of Android 12. Worked well.

@miquelbeltran
miquelbeltran merged commit 994fef7 into fluttercommunity:mainOct 31, 2022
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Jan 28, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

HacktoberfestIssues taking part in Hacktoberfesthacktoberfest-accepted

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: SharewithResult always returning null in Android

3 participants

@Coronon@miquelbeltran@vbuberen
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(share_plus): return correct share result on android - #1301

Merged
miquelbeltran merged 3 commits into
fluttercommunity:mainfrom
Coronon:main
Oct 31, 2022
Merged

fix(share_plus): return correct share result on android#1301
miquelbeltran merged 3 commits into
fluttercommunity:mainfrom
Coronon:main

Conversation

@Coronon

@CorononCoronon commented Oct 28, 2022

Copy link
Copy Markdown
Contributor

Description

The share_plus android shareWithResult and shareFilesWithResult implementations are broken. The returned ShareResult.raw is always null on successful share. This PR fixes this by using FLAG_MUTABLE instead of FLAG_IMMUTABLE, as pointed out by @aakash-pamnani. This issue was not found when initially implementing the shareWithResult methods, as the FLAG_IMMUTABLE was only required by the highest API versions. Back then, a simple warning was emitted that strongly suggested using FLAG_IMMUTABLE, which seemed to break nothing.

This PR now fixes the behavior and ensures that the FLAG_MUTABLEPendingIntent given out may not be abused by moving from an implicit internal Intent to an explicit one. This also reduces mental complexity of the implementation.

I also added some more documentation throughout the android implementation.

As always, I provide share_plus_example as a pre-setup example project for this PR.

Related Issues

Fixes#916

Checklist

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • I titled the PR using Conventional Commits.
  • I did not modify the CHANGELOG.md nor the pubspec.yaml files.
  • All existing and new tests are passing.
  • The analyzer (flutter analyze) does not report any problems on my PR.

Breaking Change

Does your PR require plugin users to manually update their apps to accommodate your change?

  • Yes, this is a breaking change (please indicate that with a ! in the title as explained in Conventional Commits).
  • No, this is not a breaking change.

Coronon added a commit to Coronon/share_plus_example that referenced this pull request Oct 28, 2022
@Coronon

Coronon commented Oct 28, 2022

Copy link
Copy Markdown
ContributorAuthor

The Linux test failed because it got a 404 while installing packages through apt - that should not affect this PR

Thank you for re-running the timedout Android integration tests :)

@vbuberenvbuberen left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Tested and it seems to be working good.

Left a few Kotlin related comments, but otherwise looks good to me.

@Coronon

Coronon commented Oct 29, 2022

Copy link
Copy Markdown
ContributorAuthor

Thanks for your review! Fixed all points mentioned and updated my example project and all references to it :)

PS: I just submitted a PR for the failing Linux test #1305

@miquelbeltran

Copy link
Copy Markdown
Member

LGTM, but I'll have to run this on Monday before merging.

@miquelbeltranmiquelbeltran added Hacktoberfest Issues taking part in Hacktoberfest hacktoberfest-accepted labels Oct 29, 2022
@vbuberen

Copy link
Copy Markdown
Collaborator

LGTM, but I'll have to run this on Monday before merging.

I have tested it on Android 10 physical device and emulator of Android 12. Worked well.

@miquelbeltran
miquelbeltran merged commit 994fef7 into fluttercommunity:mainOct 31, 2022
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Jan 28, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

HacktoberfestIssues taking part in Hacktoberfesthacktoberfest-accepted

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: SharewithResult always returning null in Android

3 participants

@Coronon@miquelbeltran@vbuberen
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(share_plus): return correct share result on android - #1301

Merged
miquelbeltran merged 3 commits into
fluttercommunity:mainfrom
Coronon:main
Oct 31, 2022
Merged

fix(share_plus): return correct share result on android#1301
miquelbeltran merged 3 commits into
fluttercommunity:mainfrom
Coronon:main

Conversation

@Coronon

@CorononCoronon commented Oct 28, 2022

Copy link
Copy Markdown
Contributor

Description

The share_plus android shareWithResult and shareFilesWithResult implementations are broken. The returned ShareResult.raw is always null on successful share. This PR fixes this by using FLAG_MUTABLE instead of FLAG_IMMUTABLE, as pointed out by @aakash-pamnani. This issue was not found when initially implementing the shareWithResult methods, as the FLAG_IMMUTABLE was only required by the highest API versions. Back then, a simple warning was emitted that strongly suggested using FLAG_IMMUTABLE, which seemed to break nothing.

This PR now fixes the behavior and ensures that the FLAG_MUTABLEPendingIntent given out may not be abused by moving from an implicit internal Intent to an explicit one. This also reduces mental complexity of the implementation.

I also added some more documentation throughout the android implementation.

As always, I provide share_plus_example as a pre-setup example project for this PR.

Related Issues

Fixes#916

Checklist

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • I titled the PR using Conventional Commits.
  • I did not modify the CHANGELOG.md nor the pubspec.yaml files.
  • All existing and new tests are passing.
  • The analyzer (flutter analyze) does not report any problems on my PR.

Breaking Change

Does your PR require plugin users to manually update their apps to accommodate your change?

  • Yes, this is a breaking change (please indicate that with a ! in the title as explained in Conventional Commits).
  • No, this is not a breaking change.

Coronon added a commit to Coronon/share_plus_example that referenced this pull request Oct 28, 2022
@Coronon

Coronon commented Oct 28, 2022

Copy link
Copy Markdown
ContributorAuthor

The Linux test failed because it got a 404 while installing packages through apt - that should not affect this PR

Thank you for re-running the timedout Android integration tests :)

@vbuberenvbuberen left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Tested and it seems to be working good.

Left a few Kotlin related comments, but otherwise looks good to me.

@Coronon

Coronon commented Oct 29, 2022

Copy link
Copy Markdown
ContributorAuthor

Thanks for your review! Fixed all points mentioned and updated my example project and all references to it :)

PS: I just submitted a PR for the failing Linux test #1305

@miquelbeltran

Copy link
Copy Markdown
Member

LGTM, but I'll have to run this on Monday before merging.

@miquelbeltranmiquelbeltran added Hacktoberfest Issues taking part in Hacktoberfest hacktoberfest-accepted labels Oct 29, 2022
@vbuberen

Copy link
Copy Markdown
Collaborator

LGTM, but I'll have to run this on Monday before merging.

I have tested it on Android 10 physical device and emulator of Android 12. Worked well.

@miquelbeltran
miquelbeltran merged commit 994fef7 into fluttercommunity:mainOct 31, 2022
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Jan 28, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

HacktoberfestIssues taking part in Hacktoberfesthacktoberfest-accepted

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: SharewithResult always returning null in Android

3 participants

@Coronon@miquelbeltran@vbuberen