Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
F
Flutter Inappwebview
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
李增强
Flutter Inappwebview
Commits
17c00556
Commit
17c00556
authored
5 years ago
by
crazecoder
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix choose file callback in android
parent
2811fce4
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
488 additions
and
479 deletions
+488
-479
android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppWebView/InAppWebChromeClient.java
...utter_inappbrowser/InAppWebView/InAppWebChromeClient.java
+488
-479
No files found.
android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppWebView/InAppWebChromeClient.java
View file @
17c00556
package
com.pichillilorenzo.flutter_inappbrowser.InAppWebView
;
import
android.annotation.TargetApi
;
import
android.content.DialogInterface
;
import
android.content.Intent
;
import
android.graphics.Bitmap
;
...
...
@@ -33,511 +34,519 @@ import java.util.Map;
import
io.flutter.plugin.common.MethodChannel
;
import
io.flutter.plugin.common.PluginRegistry
;
public
class
InAppWebChromeClient
extends
WebChromeClient
{
protected
static
final
String
LOG_TAG
=
"IABWebChromeClient"
;
private
PluginRegistry
.
Registrar
registrar
;
private
FlutterWebView
flutterWebView
;
private
InAppBrowserActivity
inAppBrowserActivity
;
private
ValueCallback
<
Uri
[]>
mUploadMessageArray
;
private
ValueCallback
<
Uri
>
mUploadMessage
;
private
final
static
int
FILECHOOSER_RESULTCODE
=
1
;
private
View
mCustomView
;
private
WebChromeClient
.
CustomViewCallback
mCustomViewCallback
;
protected
FrameLayout
mFullscreenContainer
;
private
int
mOriginalOrientation
;
private
int
mOriginalSystemUiVisibility
;
public
InAppWebChromeClient
(
Object
obj
,
PluginRegistry
.
Registrar
registrar
)
{
super
();
this
.
registrar
=
registrar
;
if
(
obj
instanceof
InAppBrowserActivity
)
this
.
inAppBrowserActivity
=
(
InAppBrowserActivity
)
obj
;
else
if
(
obj
instanceof
FlutterWebView
)
this
.
flutterWebView
=
(
FlutterWebView
)
obj
;
}
public
Bitmap
getDefaultVideoPoster
()
{
if
(
mCustomView
==
null
)
{
return
null
;
import
static
android
.
app
.
Activity
.
RESULT_CANCELED
;
import
static
android
.
app
.
Activity
.
RESULT_OK
;
public
class
InAppWebChromeClient
extends
WebChromeClient
implements
PluginRegistry
.
ActivityResultListener
{
protected
static
final
String
LOG_TAG
=
"IABWebChromeClient"
;
private
PluginRegistry
.
Registrar
registrar
;
private
FlutterWebView
flutterWebView
;
private
InAppBrowserActivity
inAppBrowserActivity
;
private
ValueCallback
<
Uri
[]>
mUploadMessageArray
;
private
ValueCallback
<
Uri
>
mUploadMessage
;
private
final
static
int
FILECHOOSER_RESULTCODE
=
1
;
private
View
mCustomView
;
private
WebChromeClient
.
CustomViewCallback
mCustomViewCallback
;
protected
FrameLayout
mFullscreenContainer
;
private
int
mOriginalOrientation
;
private
int
mOriginalSystemUiVisibility
;
public
InAppWebChromeClient
(
Object
obj
,
PluginRegistry
.
Registrar
registrar
)
{
super
();
this
.
registrar
=
registrar
;
if
(
obj
instanceof
InAppBrowserActivity
)
this
.
inAppBrowserActivity
=
(
InAppBrowserActivity
)
obj
;
else
if
(
obj
instanceof
FlutterWebView
)
this
.
flutterWebView
=
(
FlutterWebView
)
obj
;
registrar
.
addActivityResultListener
(
this
);
}
return
BitmapFactory
.
decodeResource
(
this
.
registrar
.
activeContext
().
getResources
(),
2130837573
);
}
public
void
onHideCustomView
()
{
View
decorView
=
this
.
registrar
.
activity
().
getWindow
().
getDecorView
();
((
FrameLayout
)
decorView
).
removeView
(
this
.
mCustomView
);
this
.
mCustomView
=
null
;
decorView
.
setSystemUiVisibility
(
this
.
mOriginalSystemUiVisibility
);
this
.
registrar
.
activity
().
setRequestedOrientation
(
this
.
mOriginalOrientation
);
this
.
mCustomViewCallback
.
onCustomViewHidden
();
this
.
mCustomViewCallback
=
null
;
}
public
void
onShowCustomView
(
View
paramView
,
WebChromeClient
.
CustomViewCallback
paramCustomViewCallback
)
{
if
(
this
.
mCustomView
!=
null
)
{
onHideCustomView
();
return
;
public
Bitmap
getDefaultVideoPoster
()
{
if
(
mCustomView
==
null
)
{
return
null
;
}
return
BitmapFactory
.
decodeResource
(
this
.
registrar
.
activeContext
().
getResources
(),
2130837573
);
}
View
decorView
=
this
.
registrar
.
activity
().
getWindow
().
getDecorView
();
this
.
mCustomView
=
paramView
;
this
.
mOriginalSystemUiVisibility
=
decorView
.
getSystemUiVisibility
();
this
.
mOriginalOrientation
=
this
.
registrar
.
activity
().
getRequestedOrientation
();
this
.
mCustomViewCallback
=
paramCustomViewCallback
;
this
.
mCustomView
.
setBackgroundColor
(
Color
.
parseColor
(
"#000000"
));
((
FrameLayout
)
decorView
).
addView
(
this
.
mCustomView
,
new
FrameLayout
.
LayoutParams
(-
1
,
-
1
));
decorView
.
setSystemUiVisibility
(
3846
|
View
.
SYSTEM_UI_FLAG_LAYOUT_STABLE
);
}
@Override
public
boolean
onJsAlert
(
final
WebView
view
,
String
url
,
final
String
message
,
final
JsResult
result
)
{
Map
<
String
,
Object
>
obj
=
new
HashMap
<>();
if
(
inAppBrowserActivity
!=
null
)
obj
.
put
(
"uuid"
,
inAppBrowserActivity
.
uuid
);
obj
.
put
(
"message"
,
message
);
getChannel
().
invokeMethod
(
"onJsAlert"
,
obj
,
new
MethodChannel
.
Result
()
{
@Override
public
void
success
(
Object
response
)
{
String
responseMessage
=
null
;
String
confirmButtonTitle
=
null
;
if
(
response
!=
null
)
{
Map
<
String
,
Object
>
responseMap
=
(
Map
<
String
,
Object
>)
response
;
responseMessage
=
(
String
)
responseMap
.
get
(
"message"
);
confirmButtonTitle
=
(
String
)
responseMap
.
get
(
"confirmButtonTitle"
);
Boolean
handledByClient
=
(
Boolean
)
responseMap
.
get
(
"handledByClient"
);
if
(
handledByClient
!=
null
&&
handledByClient
)
{
Integer
action
=
(
Integer
)
responseMap
.
get
(
"action"
);
action
=
action
!=
null
?
action
:
1
;
switch
(
action
)
{
case
0
:
result
.
confirm
();
break
;
case
1
:
default
:
public
void
onHideCustomView
()
{
View
decorView
=
this
.
registrar
.
activity
().
getWindow
().
getDecorView
();
((
FrameLayout
)
decorView
).
removeView
(
this
.
mCustomView
);
this
.
mCustomView
=
null
;
decorView
.
setSystemUiVisibility
(
this
.
mOriginalSystemUiVisibility
);
this
.
registrar
.
activity
().
setRequestedOrientation
(
this
.
mOriginalOrientation
);
this
.
mCustomViewCallback
.
onCustomViewHidden
();
this
.
mCustomViewCallback
=
null
;
}
public
void
onShowCustomView
(
View
paramView
,
WebChromeClient
.
CustomViewCallback
paramCustomViewCallback
)
{
if
(
this
.
mCustomView
!=
null
)
{
onHideCustomView
();
return
;
}
View
decorView
=
this
.
registrar
.
activity
().
getWindow
().
getDecorView
();
this
.
mCustomView
=
paramView
;
this
.
mOriginalSystemUiVisibility
=
decorView
.
getSystemUiVisibility
();
this
.
mOriginalOrientation
=
this
.
registrar
.
activity
().
getRequestedOrientation
();
this
.
mCustomViewCallback
=
paramCustomViewCallback
;
this
.
mCustomView
.
setBackgroundColor
(
Color
.
parseColor
(
"#000000"
));
((
FrameLayout
)
decorView
).
addView
(
this
.
mCustomView
,
new
FrameLayout
.
LayoutParams
(-
1
,
-
1
));
decorView
.
setSystemUiVisibility
(
3846
|
View
.
SYSTEM_UI_FLAG_LAYOUT_STABLE
);
}
@Override
public
boolean
onJsAlert
(
final
WebView
view
,
String
url
,
final
String
message
,
final
JsResult
result
)
{
Map
<
String
,
Object
>
obj
=
new
HashMap
<>();
if
(
inAppBrowserActivity
!=
null
)
obj
.
put
(
"uuid"
,
inAppBrowserActivity
.
uuid
);
obj
.
put
(
"message"
,
message
);
getChannel
().
invokeMethod
(
"onJsAlert"
,
obj
,
new
MethodChannel
.
Result
()
{
@Override
public
void
success
(
Object
response
)
{
String
responseMessage
=
null
;
String
confirmButtonTitle
=
null
;
if
(
response
!=
null
)
{
Map
<
String
,
Object
>
responseMap
=
(
Map
<
String
,
Object
>)
response
;
responseMessage
=
(
String
)
responseMap
.
get
(
"message"
);
confirmButtonTitle
=
(
String
)
responseMap
.
get
(
"confirmButtonTitle"
);
Boolean
handledByClient
=
(
Boolean
)
responseMap
.
get
(
"handledByClient"
);
if
(
handledByClient
!=
null
&&
handledByClient
)
{
Integer
action
=
(
Integer
)
responseMap
.
get
(
"action"
);
action
=
action
!=
null
?
action
:
1
;
switch
(
action
)
{
case
0
:
result
.
confirm
();
break
;
case
1
:
default
:
result
.
cancel
();
}
return
;
}
}
createAlertDialog
(
view
,
message
,
result
,
responseMessage
,
confirmButtonTitle
);
}
@Override
public
void
error
(
String
s
,
String
s1
,
Object
o
)
{
Log
.
e
(
LOG_TAG
,
s
+
", "
+
s1
);
result
.
cancel
();
}
return
;
}
@Override
public
void
notImplemented
()
{
createAlertDialog
(
view
,
message
,
result
,
null
,
null
);
}
});
return
true
;
}
public
void
createAlertDialog
(
WebView
view
,
String
message
,
final
JsResult
result
,
String
responseMessage
,
String
confirmButtonTitle
)
{
String
alertMessage
=
(
responseMessage
!=
null
&&
!
responseMessage
.
isEmpty
())
?
responseMessage
:
message
;
DialogInterface
.
OnClickListener
clickListener
=
new
DialogInterface
.
OnClickListener
()
{
@Override
public
void
onClick
(
DialogInterface
dialog
,
int
which
)
{
result
.
confirm
();
dialog
.
dismiss
();
}
};
AlertDialog
.
Builder
alertDialogBuilder
=
new
AlertDialog
.
Builder
(
view
.
getContext
(),
R
.
style
.
Theme_AppCompat_Dialog_Alert
);
alertDialogBuilder
.
setMessage
(
alertMessage
);
if
(
confirmButtonTitle
!=
null
&&
!
confirmButtonTitle
.
isEmpty
())
{
alertDialogBuilder
.
setPositiveButton
(
confirmButtonTitle
,
clickListener
);
}
else
{
alertDialogBuilder
.
setPositiveButton
(
android
.
R
.
string
.
ok
,
clickListener
);
}
createAlertDialog
(
view
,
message
,
result
,
responseMessage
,
confirmButtonTitle
);
}
@Override
public
void
error
(
String
s
,
String
s1
,
Object
o
)
{
Log
.
e
(
LOG_TAG
,
s
+
", "
+
s1
);
result
.
cancel
();
}
@Override
public
void
notImplemented
()
{
createAlertDialog
(
view
,
message
,
result
,
null
,
null
);
}
});
return
true
;
}
public
void
createAlertDialog
(
WebView
view
,
String
message
,
final
JsResult
result
,
String
responseMessage
,
String
confirmButtonTitle
)
{
String
alertMessage
=
(
responseMessage
!=
null
&&
!
responseMessage
.
isEmpty
())
?
responseMessage
:
message
;
DialogInterface
.
OnClickListener
clickListener
=
new
DialogInterface
.
OnClickListener
()
{
@Override
public
void
onClick
(
DialogInterface
dialog
,
int
which
)
{
result
.
confirm
();
dialog
.
dismiss
();
}
};
AlertDialog
.
Builder
alertDialogBuilder
=
new
AlertDialog
.
Builder
(
view
.
getContext
(),
R
.
style
.
Theme_AppCompat_Dialog_Alert
);
alertDialogBuilder
.
setMessage
(
alertMessage
);
if
(
confirmButtonTitle
!=
null
&&
!
confirmButtonTitle
.
isEmpty
())
{
alertDialogBuilder
.
setPositiveButton
(
confirmButtonTitle
,
clickListener
);
}
else
{
alertDialogBuilder
.
setPositiveButton
(
android
.
R
.
string
.
ok
,
clickListener
);
alertDialogBuilder
.
setOnCancelListener
(
new
DialogInterface
.
OnCancelListener
()
{
@Override
public
void
onCancel
(
DialogInterface
dialog
)
{
result
.
cancel
();
dialog
.
dismiss
();
}
});
AlertDialog
alertDialog
=
alertDialogBuilder
.
create
();
alertDialog
.
show
();
}
alertDialogBuilder
.
setOnCancelListener
(
new
DialogInterface
.
OnCancelListener
()
{
@Override
public
void
onCancel
(
DialogInterface
dialog
)
{
result
.
cancel
();
dialog
.
dismiss
();
}
});
@Override
public
boolean
onJsConfirm
(
final
WebView
view
,
String
url
,
final
String
message
,
final
JsResult
result
)
{
Map
<
String
,
Object
>
obj
=
new
HashMap
<>();
if
(
inAppBrowserActivity
!=
null
)
obj
.
put
(
"uuid"
,
inAppBrowserActivity
.
uuid
);
obj
.
put
(
"message"
,
message
);
getChannel
().
invokeMethod
(
"onJsConfirm"
,
obj
,
new
MethodChannel
.
Result
()
{
@Override
public
void
success
(
Object
response
)
{
String
responseMessage
=
null
;
String
confirmButtonTitle
=
null
;
String
cancelButtonTitle
=
null
;
if
(
response
!=
null
)
{
Map
<
String
,
Object
>
responseMap
=
(
Map
<
String
,
Object
>)
response
;
responseMessage
=
(
String
)
responseMap
.
get
(
"message"
);
confirmButtonTitle
=
(
String
)
responseMap
.
get
(
"confirmButtonTitle"
);
cancelButtonTitle
=
(
String
)
responseMap
.
get
(
"cancelButtonTitle"
);
Boolean
handledByClient
=
(
Boolean
)
responseMap
.
get
(
"handledByClient"
);
if
(
handledByClient
!=
null
&&
handledByClient
)
{
Integer
action
=
(
Integer
)
responseMap
.
get
(
"action"
);
action
=
action
!=
null
?
action
:
1
;
switch
(
action
)
{
case
0
:
result
.
confirm
();
break
;
case
1
:
default
:
result
.
cancel
();
}
return
;
}
}
createConfirmDialog
(
view
,
message
,
result
,
responseMessage
,
confirmButtonTitle
,
cancelButtonTitle
);
}
AlertDialog
alertDialog
=
alertDialogBuilder
.
create
();
alertDialog
.
show
();
}
@Override
public
void
error
(
String
s
,
String
s1
,
Object
o
)
{
Log
.
e
(
LOG_TAG
,
s
+
", "
+
s1
);
result
.
cancel
();
}
@Override
public
boolean
onJsConfirm
(
final
WebView
view
,
String
url
,
final
String
message
,
final
JsResult
result
)
{
Map
<
String
,
Object
>
obj
=
new
HashMap
<>();
if
(
inAppBrowserActivity
!=
null
)
obj
.
put
(
"uuid"
,
inAppBrowserActivity
.
uuid
);
obj
.
put
(
"message"
,
message
);
getChannel
().
invokeMethod
(
"onJsConfirm"
,
obj
,
new
MethodChannel
.
Result
()
{
@Override
public
void
success
(
Object
response
)
{
String
responseMessage
=
null
;
String
confirmButtonTitle
=
null
;
String
cancelButtonTitle
=
null
;
if
(
response
!=
null
)
{
Map
<
String
,
Object
>
responseMap
=
(
Map
<
String
,
Object
>)
response
;
responseMessage
=
(
String
)
responseMap
.
get
(
"message"
);
confirmButtonTitle
=
(
String
)
responseMap
.
get
(
"confirmButtonTitle"
);
cancelButtonTitle
=
(
String
)
responseMap
.
get
(
"cancelButtonTitle"
);
Boolean
handledByClient
=
(
Boolean
)
responseMap
.
get
(
"handledByClient"
);
if
(
handledByClient
!=
null
&&
handledByClient
)
{
Integer
action
=
(
Integer
)
responseMap
.
get
(
"action"
);
action
=
action
!=
null
?
action
:
1
;
switch
(
action
)
{
case
0
:
@Override
public
void
notImplemented
()
{
createConfirmDialog
(
view
,
message
,
result
,
null
,
null
,
null
);
}
});
return
true
;
}
public
void
createConfirmDialog
(
WebView
view
,
String
message
,
final
JsResult
result
,
String
responseMessage
,
String
confirmButtonTitle
,
String
cancelButtonTitle
)
{
String
alertMessage
=
(
responseMessage
!=
null
&&
!
responseMessage
.
isEmpty
())
?
responseMessage
:
message
;
DialogInterface
.
OnClickListener
confirmClickListener
=
new
DialogInterface
.
OnClickListener
()
{
@Override
public
void
onClick
(
DialogInterface
dialog
,
int
which
)
{
result
.
confirm
();
break
;
case
1
:
default
:
dialog
.
dismiss
();
}
};
DialogInterface
.
OnClickListener
cancelClickListener
=
new
DialogInterface
.
OnClickListener
()
{
@Override
public
void
onClick
(
DialogInterface
dialog
,
int
which
)
{
result
.
cancel
();
dialog
.
dismiss
();
}
return
;
}
};
AlertDialog
.
Builder
alertDialogBuilder
=
new
AlertDialog
.
Builder
(
view
.
getContext
(),
R
.
style
.
Theme_AppCompat_Dialog_Alert
);
alertDialogBuilder
.
setMessage
(
alertMessage
);
if
(
confirmButtonTitle
!=
null
&&
!
confirmButtonTitle
.
isEmpty
())
{
alertDialogBuilder
.
setPositiveButton
(
confirmButtonTitle
,
confirmClickListener
);
}
else
{
alertDialogBuilder
.
setPositiveButton
(
android
.
R
.
string
.
ok
,
confirmClickListener
);
}
if
(
cancelButtonTitle
!=
null
&&
!
cancelButtonTitle
.
isEmpty
())
{
alertDialogBuilder
.
setNegativeButton
(
cancelButtonTitle
,
cancelClickListener
);
}
else
{
alertDialogBuilder
.
setNegativeButton
(
android
.
R
.
string
.
cancel
,
cancelClickListener
);
}
createConfirmDialog
(
view
,
message
,
result
,
responseMessage
,
confirmButtonTitle
,
cancelButtonTitle
);
}
@Override
public
void
error
(
String
s
,
String
s1
,
Object
o
)
{
Log
.
e
(
LOG_TAG
,
s
+
", "
+
s1
);
result
.
cancel
();
}
@Override
public
void
notImplemented
()
{
createConfirmDialog
(
view
,
message
,
result
,
null
,
null
,
null
);
}
});
return
true
;
}
public
void
createConfirmDialog
(
WebView
view
,
String
message
,
final
JsResult
result
,
String
responseMessage
,
String
confirmButtonTitle
,
String
cancelButtonTitle
)
{
String
alertMessage
=
(
responseMessage
!=
null
&&
!
responseMessage
.
isEmpty
())
?
responseMessage
:
message
;
DialogInterface
.
OnClickListener
confirmClickListener
=
new
DialogInterface
.
OnClickListener
()
{
@Override
public
void
onClick
(
DialogInterface
dialog
,
int
which
)
{
result
.
confirm
();
dialog
.
dismiss
();
}
};
DialogInterface
.
OnClickListener
cancelClickListener
=
new
DialogInterface
.
OnClickListener
()
{
@Override
public
void
onClick
(
DialogInterface
dialog
,
int
which
)
{
result
.
cancel
();
dialog
.
dismiss
();
}
};
AlertDialog
.
Builder
alertDialogBuilder
=
new
AlertDialog
.
Builder
(
view
.
getContext
(),
R
.
style
.
Theme_AppCompat_Dialog_Alert
);
alertDialogBuilder
.
setMessage
(
alertMessage
);
if
(
confirmButtonTitle
!=
null
&&
!
confirmButtonTitle
.
isEmpty
())
{
alertDialogBuilder
.
setPositiveButton
(
confirmButtonTitle
,
confirmClickListener
);
}
else
{
alertDialogBuilder
.
setPositiveButton
(
android
.
R
.
string
.
ok
,
confirmClickListener
);
alertDialogBuilder
.
setOnCancelListener
(
new
DialogInterface
.
OnCancelListener
()
{
@Override
public
void
onCancel
(
DialogInterface
dialog
)
{
result
.
cancel
();
dialog
.
dismiss
();
}
});
AlertDialog
alertDialog
=
alertDialogBuilder
.
create
();
alertDialog
.
show
();
}
if
(
cancelButtonTitle
!=
null
&&
!
cancelButtonTitle
.
isEmpty
())
{
alertDialogBuilder
.
setNegativeButton
(
cancelButtonTitle
,
cancelClickListener
);
}
else
{
alertDialogBuilder
.
setNegativeButton
(
android
.
R
.
string
.
cancel
,
cancelClickListener
);
@Override
public
boolean
onJsPrompt
(
final
WebView
view
,
String
url
,
final
String
message
,
final
String
defaultValue
,
final
JsPromptResult
result
)
{
Map
<
String
,
Object
>
obj
=
new
HashMap
<>();
if
(
inAppBrowserActivity
!=
null
)
obj
.
put
(
"uuid"
,
inAppBrowserActivity
.
uuid
);
obj
.
put
(
"message"
,
message
);
obj
.
put
(
"defaultValue"
,
defaultValue
);
getChannel
().
invokeMethod
(
"onJsPrompt"
,
obj
,
new
MethodChannel
.
Result
()
{
@Override
public
void
success
(
Object
response
)
{
String
responseMessage
=
null
;
String
responseDefaultValue
=
null
;
String
confirmButtonTitle
=
null
;
String
cancelButtonTitle
=
null
;
String
value
=
null
;
if
(
response
!=
null
)
{
Map
<
String
,
Object
>
responseMap
=
(
Map
<
String
,
Object
>)
response
;
responseMessage
=
(
String
)
responseMap
.
get
(
"message"
);
responseDefaultValue
=
(
String
)
responseMap
.
get
(
"defaultValue"
);
confirmButtonTitle
=
(
String
)
responseMap
.
get
(
"confirmButtonTitle"
);
cancelButtonTitle
=
(
String
)
responseMap
.
get
(
"cancelButtonTitle"
);
value
=
(
String
)
responseMap
.
get
(
"value"
);
Boolean
handledByClient
=
(
Boolean
)
responseMap
.
get
(
"handledByClient"
);
if
(
handledByClient
!=
null
&&
handledByClient
)
{
Integer
action
=
(
Integer
)
responseMap
.
get
(
"action"
);
action
=
action
!=
null
?
action
:
1
;
switch
(
action
)
{
case
0
:
result
.
confirm
(
value
);
break
;
case
1
:
default
:
result
.
cancel
();
}
return
;
}
}
createPromptDialog
(
view
,
message
,
defaultValue
,
result
,
responseMessage
,
responseDefaultValue
,
value
,
cancelButtonTitle
,
confirmButtonTitle
);
}
@Override
public
void
error
(
String
s
,
String
s1
,
Object
o
)
{
Log
.
e
(
LOG_TAG
,
s
+
", "
+
s1
);
result
.
cancel
();
}
@Override
public
void
notImplemented
()
{
createPromptDialog
(
view
,
message
,
defaultValue
,
result
,
null
,
null
,
null
,
null
,
null
);
}
});
return
true
;
}
alertDialogBuilder
.
setOnCancelListener
(
new
DialogInterface
.
OnCancelListener
()
{
@Override
public
void
onCancel
(
DialogInterface
dialog
)
{
result
.
cancel
();
dialog
.
dismiss
();
}
});
AlertDialog
alertDialog
=
alertDialogBuilder
.
create
();
alertDialog
.
show
();
}
@Override
public
boolean
onJsPrompt
(
final
WebView
view
,
String
url
,
final
String
message
,
final
String
defaultValue
,
final
JsPromptResult
result
)
{
Map
<
String
,
Object
>
obj
=
new
HashMap
<>();
if
(
inAppBrowserActivity
!=
null
)
obj
.
put
(
"uuid"
,
inAppBrowserActivity
.
uuid
);
obj
.
put
(
"message"
,
message
);
obj
.
put
(
"defaultValue"
,
defaultValue
);
getChannel
().
invokeMethod
(
"onJsPrompt"
,
obj
,
new
MethodChannel
.
Result
()
{
@Override
public
void
success
(
Object
response
)
{
String
responseMessage
=
null
;
String
responseDefaultValue
=
null
;
String
confirmButtonTitle
=
null
;
String
cancelButtonTitle
=
null
;
String
value
=
null
;
if
(
response
!=
null
)
{
Map
<
String
,
Object
>
responseMap
=
(
Map
<
String
,
Object
>)
response
;
responseMessage
=
(
String
)
responseMap
.
get
(
"message"
);
responseDefaultValue
=
(
String
)
responseMap
.
get
(
"defaultValue"
);
confirmButtonTitle
=
(
String
)
responseMap
.
get
(
"confirmButtonTitle"
);
cancelButtonTitle
=
(
String
)
responseMap
.
get
(
"cancelButtonTitle"
);
value
=
(
String
)
responseMap
.
get
(
"value"
);
Boolean
handledByClient
=
(
Boolean
)
responseMap
.
get
(
"handledByClient"
);
if
(
handledByClient
!=
null
&&
handledByClient
)
{
Integer
action
=
(
Integer
)
responseMap
.
get
(
"action"
);
action
=
action
!=
null
?
action
:
1
;
switch
(
action
)
{
case
0
:
result
.
confirm
(
value
);
break
;
case
1
:
default
:
public
void
createPromptDialog
(
WebView
view
,
String
message
,
String
defaultValue
,
final
JsPromptResult
result
,
String
responseMessage
,
String
responseDefaultValue
,
String
value
,
String
cancelButtonTitle
,
String
confirmButtonTitle
)
{
FrameLayout
layout
=
new
FrameLayout
(
view
.
getContext
());
final
EditText
input
=
new
EditText
(
view
.
getContext
());
input
.
setMaxLines
(
1
);
input
.
setText
((
responseDefaultValue
!=
null
&&
!
responseDefaultValue
.
isEmpty
())
?
responseDefaultValue
:
defaultValue
);
LinearLayout
.
LayoutParams
lp
=
new
LinearLayout
.
LayoutParams
(
LinearLayout
.
LayoutParams
.
MATCH_PARENT
,
LinearLayout
.
LayoutParams
.
MATCH_PARENT
);
input
.
setLayoutParams
(
lp
);
layout
.
setPaddingRelative
(
45
,
15
,
45
,
0
);
layout
.
addView
(
input
);
String
alertMessage
=
(
responseMessage
!=
null
&&
!
responseMessage
.
isEmpty
())
?
responseMessage
:
message
;
final
String
finalValue
=
value
;
DialogInterface
.
OnClickListener
confirmClickListener
=
new
DialogInterface
.
OnClickListener
()
{
@Override
public
void
onClick
(
DialogInterface
dialog
,
int
which
)
{
String
text
=
input
.
getText
().
toString
();
result
.
confirm
(
finalValue
!=
null
?
finalValue
:
text
);
dialog
.
dismiss
();
}
};
DialogInterface
.
OnClickListener
cancelClickListener
=
new
DialogInterface
.
OnClickListener
()
{
@Override
public
void
onClick
(
DialogInterface
dialog
,
int
which
)
{
result
.
cancel
();
dialog
.
dismiss
();
}
};
AlertDialog
.
Builder
alertDialogBuilder
=
new
AlertDialog
.
Builder
(
view
.
getContext
(),
R
.
style
.
Theme_AppCompat_Dialog_Alert
);
alertDialogBuilder
.
setMessage
(
alertMessage
);
if
(
confirmButtonTitle
!=
null
&&
!
confirmButtonTitle
.
isEmpty
())
{
alertDialogBuilder
.
setPositiveButton
(
confirmButtonTitle
,
confirmClickListener
);
}
else
{
alertDialogBuilder
.
setPositiveButton
(
android
.
R
.
string
.
ok
,
confirmClickListener
);
}
if
(
cancelButtonTitle
!=
null
&&
!
cancelButtonTitle
.
isEmpty
())
{
alertDialogBuilder
.
setNegativeButton
(
cancelButtonTitle
,
cancelClickListener
);
}
else
{
alertDialogBuilder
.
setNegativeButton
(
android
.
R
.
string
.
cancel
,
cancelClickListener
);
}
alertDialogBuilder
.
setOnCancelListener
(
new
DialogInterface
.
OnCancelListener
()
{
@Override
public
void
onCancel
(
DialogInterface
dialog
)
{
result
.
cancel
();
dialog
.
dismiss
();
}
});
AlertDialog
alertDialog
=
alertDialogBuilder
.
create
();
alertDialog
.
setView
(
layout
);
alertDialog
.
show
();
}
@Override
public
boolean
onCreateWindow
(
WebView
view
,
boolean
dialog
,
boolean
userGesture
,
android
.
os
.
Message
resultMsg
)
{
WebView
.
HitTestResult
result
=
view
.
getHitTestResult
();
String
data
=
result
.
getExtra
();
Map
<
String
,
Object
>
obj
=
new
HashMap
<>();
if
(
inAppBrowserActivity
!=
null
)
obj
.
put
(
"uuid"
,
inAppBrowserActivity
.
uuid
);
obj
.
put
(
"url"
,
data
);
getChannel
().
invokeMethod
(
"onTargetBlank"
,
obj
);
return
false
;
}
@Override
public
void
onGeolocationPermissionsShowPrompt
(
final
String
origin
,
final
GeolocationPermissions
.
Callback
callback
)
{
Map
<
String
,
Object
>
obj
=
new
HashMap
<>();
if
(
inAppBrowserActivity
!=
null
)
obj
.
put
(
"uuid"
,
inAppBrowserActivity
.
uuid
);
obj
.
put
(
"origin"
,
origin
);
getChannel
().
invokeMethod
(
"onGeolocationPermissionsShowPrompt"
,
obj
,
new
MethodChannel
.
Result
()
{
@Override
public
void
success
(
Object
o
)
{
Map
<
String
,
Object
>
response
=
(
Map
<
String
,
Object
>)
o
;
if
(
response
!=
null
)
callback
.
invoke
((
String
)
response
.
get
(
"origin"
),
(
Boolean
)
response
.
get
(
"allow"
),
(
Boolean
)
response
.
get
(
"retain"
));
else
callback
.
invoke
(
origin
,
false
,
false
);
}
@Override
public
void
error
(
String
s
,
String
s1
,
Object
o
)
{
callback
.
invoke
(
origin
,
false
,
false
);
}
@Override
public
void
notImplemented
()
{
callback
.
invoke
(
origin
,
false
,
false
);
}
});
}
@Override
public
boolean
onConsoleMessage
(
ConsoleMessage
consoleMessage
)
{
Map
<
String
,
Object
>
obj
=
new
HashMap
<>();
if
(
inAppBrowserActivity
!=
null
)
obj
.
put
(
"uuid"
,
inAppBrowserActivity
.
uuid
);
obj
.
put
(
"sourceURL"
,
consoleMessage
.
sourceId
());
obj
.
put
(
"lineNumber"
,
consoleMessage
.
lineNumber
());
obj
.
put
(
"message"
,
consoleMessage
.
message
());
obj
.
put
(
"messageLevel"
,
consoleMessage
.
messageLevel
().
ordinal
());
getChannel
().
invokeMethod
(
"onConsoleMessage"
,
obj
);
return
true
;
}
@Override
public
void
onProgressChanged
(
WebView
view
,
int
progress
)
{
if
(
inAppBrowserActivity
!=
null
&&
inAppBrowserActivity
.
progressBar
!=
null
)
{
inAppBrowserActivity
.
progressBar
.
setVisibility
(
View
.
VISIBLE
);
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
N
)
{
inAppBrowserActivity
.
progressBar
.
setProgress
(
progress
,
true
);
}
else
{
inAppBrowserActivity
.
progressBar
.
setProgress
(
progress
);
}
if
(
progress
==
100
)
{
inAppBrowserActivity
.
progressBar
.
setVisibility
(
View
.
GONE
);
}
return
;
}
}
createPromptDialog
(
view
,
message
,
defaultValue
,
result
,
responseMessage
,
responseDefaultValue
,
value
,
cancelButtonTitle
,
confirmButtonTitle
);
}
@Override
public
void
error
(
String
s
,
String
s1
,
Object
o
)
{
Log
.
e
(
LOG_TAG
,
s
+
", "
+
s1
);
result
.
cancel
();
}
@Override
public
void
notImplemented
()
{
createPromptDialog
(
view
,
message
,
defaultValue
,
result
,
null
,
null
,
null
,
null
,
null
);
}
});
return
true
;
}
public
void
createPromptDialog
(
WebView
view
,
String
message
,
String
defaultValue
,
final
JsPromptResult
result
,
String
responseMessage
,
String
responseDefaultValue
,
String
value
,
String
cancelButtonTitle
,
String
confirmButtonTitle
)
{
FrameLayout
layout
=
new
FrameLayout
(
view
.
getContext
());
final
EditText
input
=
new
EditText
(
view
.
getContext
());
input
.
setMaxLines
(
1
);
input
.
setText
((
responseDefaultValue
!=
null
&&
!
responseDefaultValue
.
isEmpty
())
?
responseDefaultValue
:
defaultValue
);
LinearLayout
.
LayoutParams
lp
=
new
LinearLayout
.
LayoutParams
(
LinearLayout
.
LayoutParams
.
MATCH_PARENT
,
LinearLayout
.
LayoutParams
.
MATCH_PARENT
);
input
.
setLayoutParams
(
lp
);
layout
.
setPaddingRelative
(
45
,
15
,
45
,
0
);
layout
.
addView
(
input
);
String
alertMessage
=
(
responseMessage
!=
null
&&
!
responseMessage
.
isEmpty
())
?
responseMessage
:
message
;
final
String
finalValue
=
value
;
DialogInterface
.
OnClickListener
confirmClickListener
=
new
DialogInterface
.
OnClickListener
()
{
@Override
public
void
onClick
(
DialogInterface
dialog
,
int
which
)
{
String
text
=
input
.
getText
().
toString
();
result
.
confirm
(
finalValue
!=
null
?
finalValue
:
text
);
dialog
.
dismiss
();
}
};
DialogInterface
.
OnClickListener
cancelClickListener
=
new
DialogInterface
.
OnClickListener
()
{
@Override
public
void
onClick
(
DialogInterface
dialog
,
int
which
)
{
result
.
cancel
();
dialog
.
dismiss
();
}
};
AlertDialog
.
Builder
alertDialogBuilder
=
new
AlertDialog
.
Builder
(
view
.
getContext
(),
R
.
style
.
Theme_AppCompat_Dialog_Alert
);
alertDialogBuilder
.
setMessage
(
alertMessage
);
if
(
confirmButtonTitle
!=
null
&&
!
confirmButtonTitle
.
isEmpty
())
{
alertDialogBuilder
.
setPositiveButton
(
confirmButtonTitle
,
confirmClickListener
);
}
else
{
alertDialogBuilder
.
setPositiveButton
(
android
.
R
.
string
.
ok
,
confirmClickListener
);
Map
<
String
,
Object
>
obj
=
new
HashMap
<>();
if
(
inAppBrowserActivity
!=
null
)
obj
.
put
(
"uuid"
,
inAppBrowserActivity
.
uuid
);
obj
.
put
(
"progress"
,
progress
);
getChannel
().
invokeMethod
(
"onProgressChanged"
,
obj
);
super
.
onProgressChanged
(
view
,
progress
);
}
@Override
public
void
onReceivedTitle
(
WebView
view
,
String
title
)
{
super
.
onReceivedTitle
(
view
,
title
);
if
(
inAppBrowserActivity
!=
null
&&
inAppBrowserActivity
.
actionBar
!=
null
&&
inAppBrowserActivity
.
options
.
toolbarTopFixedTitle
.
isEmpty
())
inAppBrowserActivity
.
actionBar
.
setTitle
(
title
);
}
@Override
public
void
onReceivedIcon
(
WebView
view
,
Bitmap
icon
)
{
super
.
onReceivedIcon
(
view
,
icon
);
}
//The undocumented magic method override
//Eclipse will swear at you if you try to put @Override here
// For Android 3.0+
public
void
openFileChooser
(
ValueCallback
<
Uri
>
uploadMsg
)
{
mUploadMessage
=
uploadMsg
;
Intent
i
=
new
Intent
(
Intent
.
ACTION_GET_CONTENT
);
i
.
addCategory
(
Intent
.
CATEGORY_OPENABLE
);
i
.
setType
(
"image/*"
);
((
inAppBrowserActivity
!=
null
)
?
inAppBrowserActivity
:
flutterWebView
.
activity
).
startActivityForResult
(
Intent
.
createChooser
(
i
,
"File Chooser"
),
FILECHOOSER_RESULTCODE
);
}
if
(
cancelButtonTitle
!=
null
&&
!
cancelButtonTitle
.
isEmpty
())
{
alertDialogBuilder
.
setNegativeButton
(
cancelButtonTitle
,
cancelClickListener
);
}
else
{
alertDialogBuilder
.
setNegativeButton
(
android
.
R
.
string
.
cancel
,
cancelClickListener
);
// For Android 3.0+
public
void
openFileChooser
(
ValueCallback
uploadMsg
,
String
acceptType
)
{
mUploadMessage
=
uploadMsg
;
Intent
i
=
new
Intent
(
Intent
.
ACTION_GET_CONTENT
);
i
.
addCategory
(
Intent
.
CATEGORY_OPENABLE
);
i
.
setType
(
"*/*"
);
((
inAppBrowserActivity
!=
null
)
?
inAppBrowserActivity
:
flutterWebView
.
activity
).
startActivityForResult
(
Intent
.
createChooser
(
i
,
"File Browser"
),
FILECHOOSER_RESULTCODE
);
}
alertDialogBuilder
.
setOnCancelListener
(
new
DialogInterface
.
OnCancelListener
()
{
@Override
public
void
onCancel
(
DialogInterface
dialog
)
{
result
.
cancel
();
dialog
.
dismiss
();
}
});
AlertDialog
alertDialog
=
alertDialogBuilder
.
create
();
alertDialog
.
setView
(
layout
);
alertDialog
.
show
();
}
@Override
public
boolean
onCreateWindow
(
WebView
view
,
boolean
dialog
,
boolean
userGesture
,
android
.
os
.
Message
resultMsg
)
{
WebView
.
HitTestResult
result
=
view
.
getHitTestResult
();
String
data
=
result
.
getExtra
();
Map
<
String
,
Object
>
obj
=
new
HashMap
<>();
if
(
inAppBrowserActivity
!=
null
)
obj
.
put
(
"uuid"
,
inAppBrowserActivity
.
uuid
);
obj
.
put
(
"url"
,
data
);
getChannel
().
invokeMethod
(
"onTargetBlank"
,
obj
);
return
false
;
}
@Override
public
void
onGeolocationPermissionsShowPrompt
(
final
String
origin
,
final
GeolocationPermissions
.
Callback
callback
)
{
Map
<
String
,
Object
>
obj
=
new
HashMap
<>();
if
(
inAppBrowserActivity
!=
null
)
obj
.
put
(
"uuid"
,
inAppBrowserActivity
.
uuid
);
obj
.
put
(
"origin"
,
origin
);
getChannel
().
invokeMethod
(
"onGeolocationPermissionsShowPrompt"
,
obj
,
new
MethodChannel
.
Result
()
{
@Override
public
void
success
(
Object
o
)
{
Map
<
String
,
Object
>
response
=
(
Map
<
String
,
Object
>)
o
;
if
(
response
!=
null
)
callback
.
invoke
((
String
)
response
.
get
(
"origin"
),(
Boolean
)
response
.
get
(
"allow"
),(
Boolean
)
response
.
get
(
"retain"
));
else
callback
.
invoke
(
origin
,
false
,
false
);
}
@Override
public
void
error
(
String
s
,
String
s1
,
Object
o
)
{
callback
.
invoke
(
origin
,
false
,
false
);
}
@Override
public
void
notImplemented
()
{
callback
.
invoke
(
origin
,
false
,
false
);
}
});
}
@Override
public
boolean
onConsoleMessage
(
ConsoleMessage
consoleMessage
)
{
Map
<
String
,
Object
>
obj
=
new
HashMap
<>();
if
(
inAppBrowserActivity
!=
null
)
obj
.
put
(
"uuid"
,
inAppBrowserActivity
.
uuid
);
obj
.
put
(
"sourceURL"
,
consoleMessage
.
sourceId
());
obj
.
put
(
"lineNumber"
,
consoleMessage
.
lineNumber
());
obj
.
put
(
"message"
,
consoleMessage
.
message
());
obj
.
put
(
"messageLevel"
,
consoleMessage
.
messageLevel
().
ordinal
());
getChannel
().
invokeMethod
(
"onConsoleMessage"
,
obj
);
return
true
;
}
@Override
public
void
onProgressChanged
(
WebView
view
,
int
progress
)
{
if
(
inAppBrowserActivity
!=
null
&&
inAppBrowserActivity
.
progressBar
!=
null
)
{
inAppBrowserActivity
.
progressBar
.
setVisibility
(
View
.
VISIBLE
);
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
N
)
{
inAppBrowserActivity
.
progressBar
.
setProgress
(
progress
,
true
);
}
else
{
inAppBrowserActivity
.
progressBar
.
setProgress
(
progress
);
}
if
(
progress
==
100
)
{
inAppBrowserActivity
.
progressBar
.
setVisibility
(
View
.
GONE
);
}
//For Android 4.1
public
void
openFileChooser
(
ValueCallback
<
Uri
>
uploadMsg
,
String
acceptType
,
String
capture
)
{
mUploadMessage
=
uploadMsg
;
Intent
i
=
new
Intent
(
Intent
.
ACTION_GET_CONTENT
);
i
.
addCategory
(
Intent
.
CATEGORY_OPENABLE
);
i
.
setType
(
"image/*"
);
((
inAppBrowserActivity
!=
null
)
?
inAppBrowserActivity
:
flutterWebView
.
activity
).
startActivityForResult
(
Intent
.
createChooser
(
i
,
"File Chooser"
),
FILECHOOSER_RESULTCODE
);
}
Map
<
String
,
Object
>
obj
=
new
HashMap
<>();
if
(
inAppBrowserActivity
!=
null
)
obj
.
put
(
"uuid"
,
inAppBrowserActivity
.
uuid
);
obj
.
put
(
"progress"
,
progress
);
getChannel
().
invokeMethod
(
"onProgressChanged"
,
obj
);
super
.
onProgressChanged
(
view
,
progress
);
}
@Override
public
void
onReceivedTitle
(
WebView
view
,
String
title
)
{
super
.
onReceivedTitle
(
view
,
title
);
if
(
inAppBrowserActivity
!=
null
&&
inAppBrowserActivity
.
actionBar
!=
null
&&
inAppBrowserActivity
.
options
.
toolbarTopFixedTitle
.
isEmpty
())
inAppBrowserActivity
.
actionBar
.
setTitle
(
title
);
}
@Override
public
void
onReceivedIcon
(
WebView
view
,
Bitmap
icon
)
{
super
.
onReceivedIcon
(
view
,
icon
);
}
//The undocumented magic method override
//Eclipse will swear at you if you try to put @Override here
// For Android 3.0+
public
void
openFileChooser
(
ValueCallback
<
Uri
>
uploadMsg
)
{
mUploadMessage
=
uploadMsg
;
Intent
i
=
new
Intent
(
Intent
.
ACTION_GET_CONTENT
);
i
.
addCategory
(
Intent
.
CATEGORY_OPENABLE
);
i
.
setType
(
"image/*"
);
((
inAppBrowserActivity
!=
null
)
?
inAppBrowserActivity
:
flutterWebView
.
activity
).
startActivityForResult
(
Intent
.
createChooser
(
i
,
"File Chooser"
),
FILECHOOSER_RESULTCODE
);
}
// For Android 3.0+
public
void
openFileChooser
(
ValueCallback
uploadMsg
,
String
acceptType
)
{
mUploadMessage
=
uploadMsg
;
Intent
i
=
new
Intent
(
Intent
.
ACTION_GET_CONTENT
);
i
.
addCategory
(
Intent
.
CATEGORY_OPENABLE
);
i
.
setType
(
"*/*"
);
((
inAppBrowserActivity
!=
null
)
?
inAppBrowserActivity
:
flutterWebView
.
activity
).
startActivityForResult
(
Intent
.
createChooser
(
i
,
"File Browser"
),
FILECHOOSER_RESULTCODE
);
}
//For Android 4.1
public
void
openFileChooser
(
ValueCallback
<
Uri
>
uploadMsg
,
String
acceptType
,
String
capture
)
{
mUploadMessage
=
uploadMsg
;
Intent
i
=
new
Intent
(
Intent
.
ACTION_GET_CONTENT
);
i
.
addCategory
(
Intent
.
CATEGORY_OPENABLE
);
i
.
setType
(
"image/*"
);
((
inAppBrowserActivity
!=
null
)
?
inAppBrowserActivity
:
flutterWebView
.
activity
).
startActivityForResult
(
Intent
.
createChooser
(
i
,
"File Chooser"
),
FILECHOOSER_RESULTCODE
);
}
//For Android 5.0+
public
boolean
onShowFileChooser
(
WebView
webView
,
ValueCallback
<
Uri
[]>
filePathCallback
,
FileChooserParams
fileChooserParams
)
{
if
(
mUploadMessageArray
!=
null
)
{
mUploadMessageArray
.
onReceiveValue
(
null
);
//For Android 5.0+
public
boolean
onShowFileChooser
(
WebView
webView
,
ValueCallback
<
Uri
[]>
filePathCallback
,
FileChooserParams
fileChooserParams
)
{
if
(
mUploadMessageArray
==
null
)
{
mUploadMessageArray
=
filePathCallback
;
}
Intent
contentSelectionIntent
=
new
Intent
(
Intent
.
ACTION_GET_CONTENT
);
contentSelectionIntent
.
addCategory
(
Intent
.
CATEGORY_OPENABLE
);
contentSelectionIntent
.
setType
(
"*/*"
);
Intent
[]
intentArray
;
intentArray
=
new
Intent
[
0
];
Intent
chooserIntent
=
new
Intent
(
Intent
.
ACTION_CHOOSER
);
chooserIntent
.
putExtra
(
Intent
.
EXTRA_INTENT
,
contentSelectionIntent
);
chooserIntent
.
putExtra
(
Intent
.
EXTRA_TITLE
,
"Image Chooser"
);
chooserIntent
.
putExtra
(
Intent
.
EXTRA_INITIAL_INTENTS
,
intentArray
);
((
inAppBrowserActivity
!=
null
)
?
inAppBrowserActivity
:
flutterWebView
.
activity
).
startActivityForResult
(
chooserIntent
,
FILECHOOSER_RESULTCODE
);
return
true
;
}
private
MethodChannel
getChannel
()
{
return
(
inAppBrowserActivity
!=
null
)
?
InAppBrowserFlutterPlugin
.
inAppBrowser
.
channel
:
flutterWebView
.
channel
;
}
@TargetApi
(
Build
.
VERSION_CODES
.
LOLLIPOP
)
@Override
public
boolean
onActivityResult
(
int
requestCode
,
int
resultCode
,
Intent
data
)
{
if
(
requestCode
==
FILECHOOSER_RESULTCODE
&&
(
resultCode
==
RESULT_OK
||
resultCode
==
RESULT_CANCELED
))
{
mUploadMessageArray
.
onReceiveValue
(
WebChromeClient
.
FileChooserParams
.
parseResult
(
resultCode
,
data
));
}
return
false
;
}
mUploadMessageArray
=
filePathCallback
;
Intent
contentSelectionIntent
=
new
Intent
(
Intent
.
ACTION_GET_CONTENT
);
contentSelectionIntent
.
addCategory
(
Intent
.
CATEGORY_OPENABLE
);
contentSelectionIntent
.
setType
(
"*/*"
);
Intent
[]
intentArray
;
intentArray
=
new
Intent
[
0
];
Intent
chooserIntent
=
new
Intent
(
Intent
.
ACTION_CHOOSER
);
chooserIntent
.
putExtra
(
Intent
.
EXTRA_INTENT
,
contentSelectionIntent
);
chooserIntent
.
putExtra
(
Intent
.
EXTRA_TITLE
,
"Image Chooser"
);
chooserIntent
.
putExtra
(
Intent
.
EXTRA_INITIAL_INTENTS
,
intentArray
);
((
inAppBrowserActivity
!=
null
)
?
inAppBrowserActivity
:
flutterWebView
.
activity
).
startActivityForResult
(
chooserIntent
,
FILECHOOSER_RESULTCODE
);
return
true
;
}
private
MethodChannel
getChannel
()
{
return
(
inAppBrowserActivity
!=
null
)
?
InAppBrowserFlutterPlugin
.
inAppBrowser
.
channel
:
flutterWebView
.
channel
;
}
}
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment