Handle exceptions when accessing android clipboard

In some circumstances android throws an exception or returns null,
when trying to access the clipboard.

Fixes: QTBUG-80689
Change-Id: I92c134e2a002fc648ff966e15a19eb3307c428a1
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
(cherry picked from commit 287b570ad5c00eb491f86eab0c4b8d3f6d96f666)
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
Mike Achtelik 2020-01-22 13:17:20 +01:00 committed by Lars Schmertmann
parent ca0dedf9ea
commit 08d6cb7673

View File

@ -724,28 +724,37 @@ public class QtNative
public static boolean hasClipboardText() public static boolean hasClipboardText()
{ {
try {
if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) { if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) {
ClipData primaryClip = m_clipboardManager.getPrimaryClip(); ClipData primaryClip = m_clipboardManager.getPrimaryClip();
for (int i = 0; i < primaryClip.getItemCount(); ++i) for (int i = 0; i < primaryClip.getItemCount(); ++i)
if (primaryClip.getItemAt(i).getText() != null) if (primaryClip.getItemAt(i).getText() != null)
return true; return true;
} }
} catch (Exception e) {
Log.e(QtTAG, "Failed to get clipboard data", e);
}
return false; return false;
} }
private static String getClipboardText() private static String getClipboardText()
{ {
try {
if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) { if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) {
ClipData primaryClip = m_clipboardManager.getPrimaryClip(); ClipData primaryClip = m_clipboardManager.getPrimaryClip();
for (int i = 0; i < primaryClip.getItemCount(); ++i) for (int i = 0; i < primaryClip.getItemCount(); ++i)
if (primaryClip.getItemAt(i).getText() != null) if (primaryClip.getItemAt(i).getText() != null)
return primaryClip.getItemAt(i).getText().toString(); return primaryClip.getItemAt(i).getText().toString();
} }
} catch (Exception e) {
Log.e(QtTAG, "Failed to get clipboard data", e);
}
return ""; return "";
} }
private static void updatePrimaryClip(ClipData clipData) private static void updatePrimaryClip(ClipData clipData)
{ {
try {
if (m_usePrimaryClip) { if (m_usePrimaryClip) {
ClipData clip = m_clipboardManager.getPrimaryClip(); ClipData clip = m_clipboardManager.getPrimaryClip();
if (Build.VERSION.SDK_INT >= 26) { if (Build.VERSION.SDK_INT >= 26) {
@ -773,6 +782,9 @@ public class QtNative
m_clipboardManager.setPrimaryClip(clipData); m_clipboardManager.setPrimaryClip(clipData);
m_usePrimaryClip = true; m_usePrimaryClip = true;
} }
} catch (Exception e) {
Log.e(QtTAG, "Failed to set clipboard data", e);
}
} }
private static void setClipboardHtml(String text, String html) private static void setClipboardHtml(String text, String html)
@ -785,23 +797,31 @@ public class QtNative
public static boolean hasClipboardHtml() public static boolean hasClipboardHtml()
{ {
try {
if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) { if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) {
ClipData primaryClip = m_clipboardManager.getPrimaryClip(); ClipData primaryClip = m_clipboardManager.getPrimaryClip();
for (int i = 0; i < primaryClip.getItemCount(); ++i) for (int i = 0; i < primaryClip.getItemCount(); ++i)
if (primaryClip.getItemAt(i).getHtmlText() != null) if (primaryClip.getItemAt(i).getHtmlText() != null)
return true; return true;
} }
} catch (Exception e) {
Log.e(QtTAG, "Failed to get clipboard data", e);
}
return false; return false;
} }
private static String getClipboardHtml() private static String getClipboardHtml()
{ {
try {
if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) { if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) {
ClipData primaryClip = m_clipboardManager.getPrimaryClip(); ClipData primaryClip = m_clipboardManager.getPrimaryClip();
for (int i = 0; i < primaryClip.getItemCount(); ++i) for (int i = 0; i < primaryClip.getItemCount(); ++i)
if (primaryClip.getItemAt(i).getHtmlText() != null) if (primaryClip.getItemAt(i).getHtmlText() != null)
return primaryClip.getItemAt(i).getHtmlText().toString(); return primaryClip.getItemAt(i).getHtmlText().toString();
} }
} catch (Exception e) {
Log.e(QtTAG, "Failed to get clipboard data", e);
}
return ""; return "";
} }
@ -816,24 +836,32 @@ public class QtNative
public static boolean hasClipboardUri() public static boolean hasClipboardUri()
{ {
try {
if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) { if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) {
ClipData primaryClip = m_clipboardManager.getPrimaryClip(); ClipData primaryClip = m_clipboardManager.getPrimaryClip();
for (int i = 0; i < primaryClip.getItemCount(); ++i) for (int i = 0; i < primaryClip.getItemCount(); ++i)
if (primaryClip.getItemAt(i).getUri() != null) if (primaryClip.getItemAt(i).getUri() != null)
return true; return true;
} }
} catch (Exception e) {
Log.e(QtTAG, "Failed to get clipboard data", e);
}
return false; return false;
} }
private static String[] getClipboardUris() private static String[] getClipboardUris()
{ {
ArrayList<String> uris = new ArrayList<String>(); ArrayList<String> uris = new ArrayList<String>();
try {
if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) { if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) {
ClipData primaryClip = m_clipboardManager.getPrimaryClip(); ClipData primaryClip = m_clipboardManager.getPrimaryClip();
for (int i = 0; i < primaryClip.getItemCount(); ++i) for (int i = 0; i < primaryClip.getItemCount(); ++i)
if (primaryClip.getItemAt(i).getUri() != null) if (primaryClip.getItemAt(i).getUri() != null)
uris.add(primaryClip.getItemAt(i).getUri().toString()); uris.add(primaryClip.getItemAt(i).getUri().toString());
} }
} catch (Exception e) {
Log.e(QtTAG, "Failed to get clipboard data", e);
}
String[] strings = new String[uris.size()]; String[] strings = new String[uris.size()];
strings = uris.toArray(strings); strings = uris.toArray(strings);
return strings; return strings;