-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathEditSettingsFile.pas
More file actions
93 lines (86 loc) · 2.12 KB
/
EditSettingsFile.pas
File metadata and controls
93 lines (86 loc) · 2.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
unit EditSettingsFile;
interface
uses
System.SysUtils, System.Classes
{$IFDEF MSWINDOWS }, WinAPI.ShellApi, WinAPI.Windows {$ENDIF}
{$IFDEF ANDROID}
,FMX.Dialogs
,IdGlobalProtocols
,Androidapi.JNI.GraphicsContentViewText
,Androidapi.JNI.Net
,Androidapi.JNI.JavaTypes
,idUri
,Androidapi.IOUtils
,Androidapi.Helpers
{$ENDIF ANDROID}
{$IFDEF IOS}
,iOSapi.Foundation, FMX.Helpers.iOS
{$ENDIF IOS};
function OpenURLorFile(URL: string; const DisplayError: Boolean = False): Boolean;
implementation
function OpenURLorFile(URL: string; const DisplayError: Boolean = False): Boolean;
{$IFDEF MSWINDOWS}
begin
ShellExecute(0, 'OPEN', PChar(URL), '', '', SW_SHOWNORMAL);
end;
{$ELSE}
{$IFDEF ANDROID}
var
Intent: JIntent;
idMimeTable: TIdMimeTable;
begin
// There may be an issue with the geo: prefix and URLEncode.
// will need to research
if URl.toLower.StartsWith('http://') then
Begin
Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW,
TJnet_Uri.JavaClass.parse(StringToJString(TIdURI.URLEncode(URL))));
End
Else
Begin
try
idMimeTable := TidMimeTable.Create;
Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
if not url.ToLower.StartsWith('file://') then
url := 'file://' + url;
Intent.setDataAndType(StrToJURI(Url), StringToJString(idMimeTable.GetFileMIMEType(Url)));
Finally
try idMimeTable.Free; except end;
End;
End;
try
SharedActivity.startActivity(Intent);
exit(true);
except
on e: Exception do
begin
if DisplayError then ShowMessage('Error: ' + e.Message);
exit(false);
end;
end;
end;
{$ELSE}
{$IFDEF IOS}
var
NSU: NSUrl;
begin
// iOS doesn't like spaces, so URL encode is important.
NSU := StrToNSUrl(TIdURI.URLEncode(URL));
if SharedApplication.canOpenURL(NSU) then
exit(SharedApplication.openUrl(NSU))
else
begin
if DisplayError then
ShowMessage('Error: Opening "' + URL + '" not supported.');
exit(false);
end;
end;
{$ELSE}
begin
raise Exception.Create('Not supported!');
end;
{$ENDIF IOS}
{$ENDIF ANDROID}
{$ENDIF WINDOWS}
end.