| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser; | 5 package org.chromium.chrome.browser; |
| 6 | 6 |
| 7 import android.app.AlertDialog; | 7 import android.app.AlertDialog; |
| 8 import android.content.Context; | 8 import android.content.Context; |
| 9 import android.content.DialogInterface; | 9 import android.content.DialogInterface; |
| 10 import android.view.LayoutInflater; | 10 import android.view.LayoutInflater; |
| 11 import android.view.View; | 11 import android.view.View; |
| 12 import android.view.ViewGroup; | 12 import android.view.ViewGroup; |
| 13 import android.widget.Button; | 13 import android.widget.Button; |
| 14 import android.widget.CheckBox; | 14 import android.widget.CheckBox; |
| 15 import android.widget.EditText; | 15 import android.widget.EditText; |
| 16 import android.widget.TextView; | 16 import android.widget.TextView; |
| 17 | 17 |
| 18 import org.chromium.base.CalledByNative; | 18 import org.chromium.base.CalledByNative; |
| 19 import org.chromium.content.app.AppResource; | 19 import org.chromium.chrome.R; |
| 20 import org.chromium.ui.gfx.NativeWindow; | 20 import org.chromium.ui.gfx.NativeWindow; |
| 21 | 21 |
| 22 public class JavascriptAppModalDialog { | 22 public class JavascriptAppModalDialog { |
| 23 private String mTitle; | 23 private String mTitle; |
| 24 private String mMessage; | 24 private String mMessage; |
| 25 private boolean mShouldShowSuppressCheckBox; | 25 private boolean mShouldShowSuppressCheckBox; |
| 26 private int mNativeDialogPointer; | 26 private int mNativeDialogPointer; |
| 27 private AlertDialog mDialog; | 27 private AlertDialog mDialog; |
| 28 | 28 |
| 29 private JavascriptAppModalDialog(String title, String message, | 29 private JavascriptAppModalDialog(String title, String message, |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 assert window != null; | 64 assert window != null; |
| 65 Context context = window.getContext(); | 65 Context context = window.getContext(); |
| 66 | 66 |
| 67 // Cache the native dialog pointer so that we can use it to return the | 67 // Cache the native dialog pointer so that we can use it to return the |
| 68 // response. | 68 // response. |
| 69 mNativeDialogPointer = nativeDialogPointer; | 69 mNativeDialogPointer = nativeDialogPointer; |
| 70 | 70 |
| 71 LayoutInflater inflater = | 71 LayoutInflater inflater = |
| 72 (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATE
R_SERVICE); | 72 (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATE
R_SERVICE); |
| 73 | 73 |
| 74 assert AppResource.LAYOUT_JS_MODAL_DIALOG != 0; | 74 ViewGroup dialogLayout = (ViewGroup) inflater.inflate(R.layout.js_modal_
dialog, null); |
| 75 ViewGroup dialogLayout = (ViewGroup) inflater.inflate(AppResource.LAYOUT
_JS_MODAL_DIALOG, | |
| 76 null); | |
| 77 | 75 |
| 78 prepare(dialogLayout); | 76 prepare(dialogLayout); |
| 79 | 77 |
| 80 mDialog = new AlertDialog.Builder(context) | 78 mDialog = new AlertDialog.Builder(context) |
| 81 .setView(dialogLayout) | 79 .setView(dialogLayout) |
| 82 .setOnCancelListener(new DialogInterface.OnCancelListener() { | 80 .setOnCancelListener(new DialogInterface.OnCancelListener() { |
| 83 @Override | 81 @Override |
| 84 public void onCancel(DialogInterface dialog) { | 82 public void onCancel(DialogInterface dialog) { |
| 85 cancel(false); | 83 cancel(false); |
| 86 } | 84 } |
| 87 }) | 85 }) |
| 88 .create(); | 86 .create(); |
| 89 mDialog.setCanceledOnTouchOutside(false); | 87 mDialog.setCanceledOnTouchOutside(false); |
| 90 mDialog.show(); | 88 mDialog.show(); |
| 91 } | 89 } |
| 92 | 90 |
| 93 @CalledByNative | 91 @CalledByNative |
| 94 void dismiss() { | 92 void dismiss() { |
| 95 mDialog.dismiss(); | 93 mDialog.dismiss(); |
| 96 } | 94 } |
| 97 | 95 |
| 98 void prepare(final ViewGroup layout) { | 96 void prepare(final ViewGroup layout) { |
| 99 // Set the title and message. | 97 // Set the title and message. |
| 100 assert AppResource.ID_JS_MODAL_DIALOG_TEXT_TITLE != 0; | 98 TextView titleView = (TextView) layout.findViewById(R.id.js_modal_dialog
_title); |
| 101 assert AppResource.ID_JS_MODAL_DIALOG_TEXT_MESSAGE != 0; | 99 TextView messageView = (TextView) layout.findViewById(R.id.js_modal_dial
og_message); |
| 102 | |
| 103 TextView titleView = (TextView) layout.findViewById( | |
| 104 AppResource.ID_JS_MODAL_DIALOG_TEXT_TITLE); | |
| 105 TextView messageView = (TextView) layout.findViewById( | |
| 106 AppResource.ID_JS_MODAL_DIALOG_TEXT_MESSAGE); | |
| 107 titleView.setText(mTitle); | 100 titleView.setText(mTitle); |
| 108 messageView.setText(mMessage); | 101 messageView.setText(mMessage); |
| 109 | 102 |
| 110 // Setup the OK button. | 103 // Setup the OK button. |
| 111 assert AppResource.ID_JS_MODAL_DIALOG_BUTTON_CONFIRM != 0; | 104 Button okButton = (Button) layout.findViewById(R.id.js_modal_dialog_butt
on_confirm); |
| 112 assert AppResource.ID_JS_MODAL_DIALOG_CHECKBOX_SUPPRESS_DIALOGS != 0; | |
| 113 | |
| 114 Button okButton = (Button) layout.findViewById( | |
| 115 AppResource.ID_JS_MODAL_DIALOG_BUTTON_CONFIRM); | |
| 116 okButton.setOnClickListener(new View.OnClickListener() { | 105 okButton.setOnClickListener(new View.OnClickListener() { |
| 117 @Override | 106 @Override |
| 118 public void onClick(View v) { | 107 public void onClick(View v) { |
| 119 boolean suppress = ((CheckBox) layout.findViewById( | 108 boolean suppress = ((CheckBox) layout.findViewById( |
| 120 AppResource.ID_JS_MODAL_DIALOG_CHECKBOX_SUPPRESS_DIALOGS
)).isChecked(); | 109 R.id.suppress_js_modal_dialogs)).isChecked(); |
| 121 | 110 |
| 122 assert AppResource.ID_JS_MODAL_DIALOG_TEXT_PROMPT != 0; | |
| 123 String prompt = ((TextView) layout.findViewById( | 111 String prompt = ((TextView) layout.findViewById( |
| 124 AppResource.ID_JS_MODAL_DIALOG_TEXT_PROMPT)).getText().t
oString(); | 112 R.id.js_modal_dialog_prompt)).getText().toString(); |
| 125 | 113 |
| 126 confirm(prompt, suppress); | 114 confirm(prompt, suppress); |
| 127 mDialog.dismiss(); | 115 mDialog.dismiss(); |
| 128 } | 116 } |
| 129 }); | 117 }); |
| 130 | 118 |
| 131 // Setup the Cancel button. | 119 // Setup the Cancel button. |
| 132 assert AppResource.ID_JS_MODAL_DIALOG_BUTTON_CANCEL != 0; | 120 Button cancelButton = (Button) layout.findViewById(R.id.js_modal_dialog_
button_cancel); |
| 133 | |
| 134 Button cancelButton = (Button) layout.findViewById( | |
| 135 AppResource.ID_JS_MODAL_DIALOG_BUTTON_CANCEL); | |
| 136 cancelButton.setOnClickListener(new View.OnClickListener() { | 121 cancelButton.setOnClickListener(new View.OnClickListener() { |
| 137 @Override | 122 @Override |
| 138 public void onClick(View v) { | 123 public void onClick(View v) { |
| 139 boolean suppress = ((CheckBox) layout.findViewById( | 124 boolean suppress = ((CheckBox) layout.findViewById( |
| 140 AppResource.ID_JS_MODAL_DIALOG_CHECKBOX_SUPPRESS_DIALOGS
)).isChecked(); | 125 R.id.suppress_js_modal_dialogs)).isChecked(); |
| 141 cancel(suppress); | 126 cancel(suppress); |
| 142 mDialog.dismiss(); | 127 mDialog.dismiss(); |
| 143 } | 128 } |
| 144 }); | 129 }); |
| 145 | 130 |
| 146 // Display the checkbox for supressing dialogs if necessary. | 131 // Display the checkbox for supressing dialogs if necessary. |
| 147 layout.findViewById(AppResource.ID_JS_MODAL_DIALOG_CHECKBOX_SUPPRESS_DIA
LOGS).setVisibility( | 132 layout.findViewById(R.id.suppress_js_modal_dialogs).setVisibility( |
| 148 mShouldShowSuppressCheckBox ? View.VISIBLE : View.GONE); | 133 mShouldShowSuppressCheckBox ? View.VISIBLE : View.GONE); |
| 149 } | 134 } |
| 150 | 135 |
| 151 public void confirm(String promptResult, boolean suppressDialogs) { | 136 public void confirm(String promptResult, boolean suppressDialogs) { |
| 152 nativeDidAcceptAppModalDialog(mNativeDialogPointer, promptResult, suppre
ssDialogs); | 137 nativeDidAcceptAppModalDialog(mNativeDialogPointer, promptResult, suppre
ssDialogs); |
| 153 } | 138 } |
| 154 | 139 |
| 155 public void cancel(boolean suppressDialogs) { | 140 public void cancel(boolean suppressDialogs) { |
| 156 nativeDidCancelAppModalDialog(mNativeDialogPointer, suppressDialogs); | 141 nativeDidCancelAppModalDialog(mNativeDialogPointer, suppressDialogs); |
| 157 } | 142 } |
| 158 | 143 |
| 159 private static class JavascriptAppAlertDialog extends JavascriptAppModalDial
og { | 144 private static class JavascriptAppAlertDialog extends JavascriptAppModalDial
og { |
| 160 public JavascriptAppAlertDialog(String title, String message, | 145 public JavascriptAppAlertDialog(String title, String message, |
| 161 boolean shouldShowSuppressCheckBox) { | 146 boolean shouldShowSuppressCheckBox) { |
| 162 super(title, message, shouldShowSuppressCheckBox); | 147 super(title, message, shouldShowSuppressCheckBox); |
| 163 } | 148 } |
| 164 | 149 |
| 165 @Override | 150 @Override |
| 166 public void prepare(ViewGroup layout) { | 151 public void prepare(ViewGroup layout) { |
| 167 super.prepare(layout); | 152 super.prepare(layout); |
| 168 layout.findViewById(AppResource.ID_JS_MODAL_DIALOG_BUTTON_CANCEL) | 153 layout.findViewById(R.id.js_modal_dialog_button_cancel).setVisibilit
y(View.GONE); |
| 169 .setVisibility(View.GONE); | |
| 170 } | 154 } |
| 171 } | 155 } |
| 172 | 156 |
| 173 private static class JavascriptAppConfirmDialog extends JavascriptAppModalDi
alog { | 157 private static class JavascriptAppConfirmDialog extends JavascriptAppModalDi
alog { |
| 174 public JavascriptAppConfirmDialog(String title, String message, | 158 public JavascriptAppConfirmDialog(String title, String message, |
| 175 boolean shouldShowSuppressCheckBox) { | 159 boolean shouldShowSuppressCheckBox) { |
| 176 super(title, message, shouldShowSuppressCheckBox); | 160 super(title, message, shouldShowSuppressCheckBox); |
| 177 } | 161 } |
| 178 | 162 |
| 179 @Override | 163 @Override |
| (...skipping 10 matching lines...) Expand all Loading... |
| 190 super(title, message, shouldShowSuppressCheckBox); | 174 super(title, message, shouldShowSuppressCheckBox); |
| 191 mIsReload = isReload; | 175 mIsReload = isReload; |
| 192 } | 176 } |
| 193 | 177 |
| 194 @Override | 178 @Override |
| 195 public void prepare(ViewGroup layout) { | 179 public void prepare(ViewGroup layout) { |
| 196 super.prepare(layout); | 180 super.prepare(layout); |
| 197 | 181 |
| 198 // Cancel and confirm button resources are checked in | 182 // Cancel and confirm button resources are checked in |
| 199 // JavascriptAppModalDialog.prepare. | 183 // JavascriptAppModalDialog.prepare. |
| 200 assert AppResource.STRING_JS_MODAL_DIALOG_DONT_RELOAD_THIS_PAGE != 0
; | |
| 201 assert AppResource.STRING_JS_MODAL_DIALOG_LEAVE_THIS_PAGE != 0; | |
| 202 assert AppResource.STRING_JS_MODAL_DIALOG_RELOAD_THIS_PAGE != 0; | |
| 203 assert AppResource.STRING_JS_MODAL_DIALOG_STAY_ON_THIS_PAGE != 0; | |
| 204 | |
| 205 TextView stayOnThisPage = | 184 TextView stayOnThisPage = |
| 206 (TextView) layout.findViewById(AppResource.ID_JS_MODAL_DIALO
G_BUTTON_CANCEL); | 185 (TextView) layout.findViewById(R.id.js_modal_dialog_button_c
ancel); |
| 207 stayOnThisPage.setText(mIsReload ? | 186 stayOnThisPage.setText(mIsReload ? |
| 208 AppResource.STRING_JS_MODAL_DIALOG_DONT_RELOAD_THIS_PAGE : | 187 R.string.dont_reload_this_page : |
| 209 AppResource.STRING_JS_MODAL_DIALOG_STAY_ON_THIS_PAGE); | 188 R.string.stay_on_this_page); |
| 210 TextView leaveThisPage = | 189 TextView leaveThisPage = |
| 211 (TextView) layout.findViewById(AppResource.ID_JS_MODAL_DIALO
G_BUTTON_CONFIRM); | 190 (TextView) layout.findViewById(R.id.js_modal_dialog_button_c
onfirm); |
| 212 leaveThisPage.setText(mIsReload ? | 191 leaveThisPage.setText(mIsReload ? |
| 213 AppResource.STRING_JS_MODAL_DIALOG_RELOAD_THIS_PAGE : | 192 R.string.reload_this_page : |
| 214 AppResource.STRING_JS_MODAL_DIALOG_LEAVE_THIS_PAGE); | 193 R.string.leave_this_page); |
| 215 } | 194 } |
| 216 } | 195 } |
| 217 | 196 |
| 218 private static class JavascriptAppPromptDialog extends JavascriptAppModalDia
log { | 197 private static class JavascriptAppPromptDialog extends JavascriptAppModalDia
log { |
| 219 private String mDefaultPromptText; | 198 private String mDefaultPromptText; |
| 220 | 199 |
| 221 public JavascriptAppPromptDialog(String title, String message, | 200 public JavascriptAppPromptDialog(String title, String message, |
| 222 boolean shouldShowSuppressCheckBox, String defaultPromptText) { | 201 boolean shouldShowSuppressCheckBox, String defaultPromptText) { |
| 223 super(title, message, shouldShowSuppressCheckBox); | 202 super(title, message, shouldShowSuppressCheckBox); |
| 224 mDefaultPromptText = defaultPromptText; | 203 mDefaultPromptText = defaultPromptText; |
| 225 } | 204 } |
| 226 | 205 |
| 227 @Override | 206 @Override |
| 228 public void prepare(ViewGroup layout) { | 207 public void prepare(ViewGroup layout) { |
| 229 super.prepare(layout); | 208 super.prepare(layout); |
| 230 EditText prompt = (EditText) layout.findViewById( | 209 EditText prompt = (EditText) layout.findViewById(R.id.js_modal_dialo
g_prompt); |
| 231 AppResource.ID_JS_MODAL_DIALOG_TEXT_PROMPT); | |
| 232 prompt.setVisibility(View.VISIBLE); | 210 prompt.setVisibility(View.VISIBLE); |
| 233 | 211 |
| 234 if (mDefaultPromptText.length() > 0) { | 212 if (mDefaultPromptText.length() > 0) { |
| 235 prompt.setText(mDefaultPromptText); | 213 prompt.setText(mDefaultPromptText); |
| 236 prompt.selectAll(); | 214 prompt.selectAll(); |
| 237 } | 215 } |
| 238 } | 216 } |
| 239 } | 217 } |
| 240 | 218 |
| 241 private native void nativeDidAcceptAppModalDialog(int nativeJavascriptAppMod
alDialogAndroid, | 219 private native void nativeDidAcceptAppModalDialog(int nativeJavascriptAppMod
alDialogAndroid, |
| 242 String prompt, boolean suppress); | 220 String prompt, boolean suppress); |
| 243 | 221 |
| 244 private native void nativeDidCancelAppModalDialog(int nativeJavascriptAppMod
alDialogAndroid, | 222 private native void nativeDidCancelAppModalDialog(int nativeJavascriptAppMod
alDialogAndroid, |
| 245 boolean suppress); | 223 boolean suppress); |
| 246 } | 224 } |
| OLD | NEW |