You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
5.8 KiB
Java
152 lines
5.8 KiB
Java
/*
|
|
Licensed to the Apache Software Foundation (ASF) under one
|
|
or more contributor license agreements. See the NOTICE file
|
|
distributed with this work for additional information
|
|
regarding copyright ownership. The ASF licenses this file
|
|
to you under the Apache License, Version 2.0 (the
|
|
"License"); you may not use this file except in compliance
|
|
with the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing,
|
|
software distributed under the License is distributed on an
|
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
KIND, either express or implied. See the License for the
|
|
specific language governing permissions and limitations
|
|
under the License.
|
|
*/
|
|
package org.apache.cordova;
|
|
|
|
import android.app.AlertDialog;
|
|
import android.content.Context;
|
|
import android.content.DialogInterface;
|
|
import android.view.KeyEvent;
|
|
import android.widget.EditText;
|
|
|
|
/**
|
|
* Helper class for WebViews to implement prompt(), alert(), confirm() dialogs.
|
|
*/
|
|
public class CordovaDialogsHelper {
|
|
private final Context context;
|
|
private AlertDialog lastHandledDialog;
|
|
|
|
public CordovaDialogsHelper(Context context) {
|
|
this.context = context;
|
|
}
|
|
|
|
public void showAlert(String message, final Result result) {
|
|
AlertDialog.Builder dlg = new AlertDialog.Builder(context);
|
|
dlg.setMessage(message);
|
|
dlg.setTitle("Alert");
|
|
//Don't let alerts break the back button
|
|
dlg.setCancelable(true);
|
|
dlg.setPositiveButton(android.R.string.ok,
|
|
new AlertDialog.OnClickListener() {
|
|
public void onClick(DialogInterface dialog, int which) {
|
|
result.gotResult(true, null);
|
|
}
|
|
});
|
|
dlg.setOnCancelListener(
|
|
new DialogInterface.OnCancelListener() {
|
|
public void onCancel(DialogInterface dialog) {
|
|
result.gotResult(false, null);
|
|
}
|
|
});
|
|
dlg.setOnKeyListener(new DialogInterface.OnKeyListener() {
|
|
//DO NOTHING
|
|
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
|
|
if (keyCode == KeyEvent.KEYCODE_BACK)
|
|
{
|
|
result.gotResult(true, null);
|
|
return false;
|
|
}
|
|
else
|
|
return true;
|
|
}
|
|
});
|
|
lastHandledDialog = dlg.show();
|
|
}
|
|
|
|
public void showConfirm(String message, final Result result) {
|
|
AlertDialog.Builder dlg = new AlertDialog.Builder(context);
|
|
dlg.setMessage(message);
|
|
dlg.setTitle("Confirm");
|
|
dlg.setCancelable(true);
|
|
dlg.setPositiveButton(android.R.string.ok,
|
|
new DialogInterface.OnClickListener() {
|
|
public void onClick(DialogInterface dialog, int which) {
|
|
result.gotResult(true, null);
|
|
}
|
|
});
|
|
dlg.setNegativeButton(android.R.string.cancel,
|
|
new DialogInterface.OnClickListener() {
|
|
public void onClick(DialogInterface dialog, int which) {
|
|
result.gotResult(false, null);
|
|
}
|
|
});
|
|
dlg.setOnCancelListener(
|
|
new DialogInterface.OnCancelListener() {
|
|
public void onCancel(DialogInterface dialog) {
|
|
result.gotResult(false, null);
|
|
}
|
|
});
|
|
dlg.setOnKeyListener(new DialogInterface.OnKeyListener() {
|
|
//DO NOTHING
|
|
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
|
|
if (keyCode == KeyEvent.KEYCODE_BACK)
|
|
{
|
|
result.gotResult(false, null);
|
|
return false;
|
|
}
|
|
else
|
|
return true;
|
|
}
|
|
});
|
|
lastHandledDialog = dlg.show();
|
|
}
|
|
|
|
/**
|
|
* Tell the client to display a prompt dialog to the user.
|
|
* If the client returns true, WebView will assume that the client will
|
|
* handle the prompt dialog and call the appropriate JsPromptResult method.
|
|
*
|
|
* Since we are hacking prompts for our own purposes, we should not be using them for
|
|
* this purpose, perhaps we should hack console.log to do this instead!
|
|
*/
|
|
public void showPrompt(String message, String defaultValue, final Result result) {
|
|
// Returning false would also show a dialog, but the default one shows the origin (ugly).
|
|
AlertDialog.Builder dlg = new AlertDialog.Builder(context);
|
|
dlg.setMessage(message);
|
|
final EditText input = new EditText(context);
|
|
if (defaultValue != null) {
|
|
input.setText(defaultValue);
|
|
}
|
|
dlg.setView(input);
|
|
dlg.setCancelable(false);
|
|
dlg.setPositiveButton(android.R.string.ok,
|
|
new DialogInterface.OnClickListener() {
|
|
public void onClick(DialogInterface dialog, int which) {
|
|
String userText = input.getText().toString();
|
|
result.gotResult(true, userText);
|
|
}
|
|
});
|
|
dlg.setNegativeButton(android.R.string.cancel,
|
|
new DialogInterface.OnClickListener() {
|
|
public void onClick(DialogInterface dialog, int which) {
|
|
result.gotResult(false, null);
|
|
}
|
|
});
|
|
lastHandledDialog = dlg.show();
|
|
}
|
|
|
|
public void destroyLastDialog(){
|
|
if (lastHandledDialog != null){
|
|
lastHandledDialog.cancel();
|
|
}
|
|
}
|
|
|
|
public interface Result {
|
|
public void gotResult(boolean success, String value);
|
|
}
|
|
} |