48 void onConnectCancel();
51 private final Activity activity;
53 private final Handler mainHandler =
new Handler(Looper.getMainLooper());
55 private final AlertDialog dlgVerifyCertificate;
56 private final AlertDialog dlgUserCredentials;
57 private final AlertDialog dlgExperimental;
58 private final View userCredView;
60 private AlertDialog progressDialog;
62 private boolean callbackDialogResult;
66 this.activity = activity;
67 this.cancelListener = cancelListener;
69 dlgVerifyCertificate =
new AlertDialog.Builder(activity)
70 .setTitle(R.string.dlg_title_verify_certificate)
71 .setPositiveButton(android.R.string.yes,
73 callbackDialogResult = true;
79 .setNegativeButton(android.R.string.no,
81 callbackDialogResult = false;
91 userCredView = activity.getLayoutInflater().inflate(R.layout.credentials,
null,
true);
92 dlgUserCredentials =
new AlertDialog.Builder(activity)
93 .setView(userCredView)
94 .setTitle(R.string.dlg_title_credentials)
95 .setPositiveButton(android.R.string.ok,
97 callbackDialogResult = true;
103 .setNegativeButton(android.R.string.cancel,
105 callbackDialogResult = false;
107 synchronized (dialog)
112 .setCancelable(
false)
115 dlgExperimental =
new AlertDialog.Builder(activity)
116 .setTitle(R.string.dlg_title_experimental_feature)
117 .setPositiveButton(R.string.menu_app_settings,
119 openExperimentalSettings();
120 synchronized (dialog)
125 .setNegativeButton(android.R.string.cancel,
128 synchronized (dialog)
133 .setCancelable(
false)
142 StringBuilder password)
144 callbackDialogResult =
false;
146 ((EditText)userCredView.findViewById(R.id.editTextUsername)).setText(username);
147 ((EditText)userCredView.findViewById(R.id.editTextDomain)).setText(domain);
148 ((EditText)userCredView.findViewById(R.id.editTextPassword)).setText(password);
150 showOnUiThread(dlgUserCredentials);
154 synchronized (dlgUserCredentials)
156 dlgUserCredentials.wait();
159 catch (InterruptedException e)
163 username.setLength(0);
165 password.setLength(0);
168 ((EditText)userCredView.findViewById(R.id.editTextUsername)).getText().toString());
170 ((EditText)userCredView.findViewById(R.id.editTextDomain)).getText().toString());
172 ((EditText)userCredView.findViewById(R.id.editTextPassword)).getText().toString());
174 return callbackDialogResult;
181 String fingerprint,
long flags)
183 String msg = activity.getResources().getString(R.string.dlg_msg_verify_certificate);
184 String type =
"RDP-Server";
185 if ((flags & LibFreeRDP.VERIFY_CERT_FLAG_GATEWAY) != 0)
186 type =
"RDP-Gateway";
187 if ((flags & LibFreeRDP.VERIFY_CERT_FLAG_REDIRECT) != 0)
188 type =
"RDP-Redirect";
189 msg +=
"\n\n" + type +
": " + host +
":" + port;
190 msg +=
"\n\nSubject: " + subject +
"\nIssuer: " + issuer;
191 if ((flags & LibFreeRDP.VERIFY_CERT_FLAG_FP_IS_PEM) != 0)
192 msg +=
"\nCertificate: " + fingerprint;
194 msg +=
"\nFingerprint: " + fingerprint;
196 return showVerifyDialog(msg);
203 String fingerprint,
long flags)
207 return verifyCertificate(host, port, subject, issuer, fingerprint, flags);
213 dlgExperimental.setMessage(
214 activity.getString(R.string.dlg_msg_experimental_feature, featureName));
216 showOnUiThread(dlgExperimental);
220 synchronized (dlgExperimental)
222 dlgExperimental.wait();
225 catch (InterruptedException e)
230 private void openExperimentalSettings()
235 private int showVerifyDialog(String msg)
237 callbackDialogResult =
false;
238 dlgVerifyCertificate.setMessage(msg);
240 showOnUiThread(dlgVerifyCertificate);
244 synchronized (dlgVerifyCertificate)
246 dlgVerifyCertificate.wait();
249 catch (InterruptedException e)
253 return callbackDialogResult ? 1 : 0;
256 private void showOnUiThread(
final AlertDialog dialog)
258 mainHandler.post(dialog::show);
261 private void notifyCancel()
263 if (cancelListener !=
null)
264 cancelListener.onUserCancel();
275 int pad = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24,
276 activity.getResources().getDisplayMetrics());
277 LinearLayout content =
new LinearLayout(activity);
278 content.setOrientation(LinearLayout.HORIZONTAL);
279 content.setPadding(pad, pad, pad, pad);
280 content.setGravity(Gravity.CENTER_VERTICAL);
282 ProgressBar progressBar =
new ProgressBar(activity);
283 progressBar.setIndeterminate(
true);
284 content.addView(progressBar,
285 new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
286 ViewGroup.LayoutParams.WRAP_CONTENT));
288 TextView messageView =
new TextView(activity);
289 messageView.setText(R.string.dlg_msg_connecting);
290 LinearLayout.LayoutParams textParams =
new LinearLayout.LayoutParams(
291 ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
292 textParams.leftMargin = pad;
293 content.addView(messageView, textParams);
295 progressDialog =
new AlertDialog.Builder(activity)
298 .setNegativeButton(android.R.string.cancel,
300 if (listener != null)
301 listener.onConnectCancel();
303 .setCancelable(
false)
305 progressDialog.show();
311 if (progressDialog !=
null)
313 progressDialog.dismiss();
314 progressDialog =
null;