Improved dialog code & zrtp dialog

This commit is contained in:
Sylvain Berfini 2018-11-14 17:46:23 +01:00
parent 16432bc5e2
commit 1bdfd80286
13 changed files with 292 additions and 187 deletions

View file

@ -6,7 +6,7 @@
android:gravity="center"> android:gravity="center">
<ImageView <ImageView
android:id="@+id/icon" android:id="@+id/dialog_icon"
android:visibility="gone" android:visibility="gone"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -14,17 +14,26 @@
android:layout_margin="15dp"/> android:layout_margin="15dp"/>
<TextView <TextView
android:id="@+id/customText" android:id="@+id/dialog_title"
android:visibility="gone"
style="@style/dialog_title_font"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textAlignment="center"
android:layout_margin="15dp"/>
<TextView
android:id="@+id/dialog_message"
style="@style/font14" style="@style/font14"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Lorem ipsum dolor sit amet"
android:gravity="center" android:gravity="center"
android:textAlignment="center" android:textAlignment="center"
android:layout_margin="15dp"/> android:layout_margin="15dp"/>
<EditText <EditText
android:id="@+id/password" android:id="@+id/dialog_password"
android:visibility="gone" android:visibility="gone"
android:background="@drawable/resizable_textfield" android:background="@drawable/resizable_textfield"
android:textColor="@color/colorB" android:textColor="@color/colorB"
@ -37,7 +46,64 @@
android:maxLines="1"/> android:maxLines="1"/>
<LinearLayout <LinearLayout
android:id="@+id/doNotAskAgainLayout" android:id="@+id/dialog_zrtp_layout"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
android:layout_margin="5dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:text="@string/zrtp_local_sas"
android:textAppearance="@style/dialog_zrtp_white_font"
android:textAlignment="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/zrtp_sas_local"
android:layout_marginLeft="5dp"
android:textAppearance="@style/dialog_zrtp_colored_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:text="@string/zrtp_remote_sas"
android:textAppearance="@style/dialog_zrtp_white_font"
android:textAlignment="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/zrtp_sas_remote"
android:layout_marginLeft="5dp"
android:textAppearance="@style/dialog_zrtp_colored_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/dialog_do_not_ask_again_layout"
android:visibility="gone" android:visibility="gone"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -70,7 +136,7 @@
android:layout_margin="15dp"> android:layout_margin="15dp">
<Button <Button
android:id="@+id/cancel" android:id="@+id/dialog_cancel_button"
android:text="@string/cancel" android:text="@string/cancel"
android:background="@drawable/resizable_assistant_button" android:background="@drawable/resizable_assistant_button"
style="@style/font8" style="@style/font8"
@ -80,7 +146,7 @@
android:padding="10dp"/> android:padding="10dp"/>
<Button <Button
android:id="@+id/delete_button" android:id="@+id/dialog_delete_button"
android:text="@string/delete" android:text="@string/delete"
android:background="@drawable/resizable_assistant_button" android:background="@drawable/resizable_assistant_button"
android:backgroundTint="@color/colorI" android:backgroundTint="@color/colorI"
@ -91,7 +157,7 @@
android:padding="10dp"/> android:padding="10dp"/>
<Button <Button
android:id="@+id/ok_button" android:id="@+id/dialog_ok_button"
android:visibility="gone" android:visibility="gone"
android:text="@string/ok" android:text="@string/ok"
android:background="@drawable/resizable_assistant_button" android:background="@drawable/resizable_assistant_button"

View file

@ -254,8 +254,9 @@
<string name="no_current_call">No active call</string> <string name="no_current_call">No active call</string>
<string name="call_paused_by_remote">Your caller paused the call</string> <string name="call_paused_by_remote">Your caller paused the call</string>
<string name="couldnt_accept_call">An error occurred while accepting the call</string> <string name="couldnt_accept_call">An error occurred while accepting the call</string>
<string name="zrtp_dialog1">Confirm the following SAS with peer:\nSay: %s</string> <string name="zrtp_local_sas">Say:</string>
<string name="zrtp_dialog2">\nYour caller should say: %s</string> <string name="zrtp_remote_sas">Confirm that your interlocutor says:</string>
<string name="zrtp_dialog_title">Communication security</string>
<string name="zrtp_notification_title">SAS</string> <string name="zrtp_notification_title">SAS</string>
<string name="zrtp_notification_message">Confirm the previous SAS code with your correspondant</string> <string name="zrtp_notification_message">Confirm the previous SAS code with your correspondant</string>
<string name="unknown_incoming_call_name">Unknown</string> <string name="unknown_incoming_call_name">Unknown</string>

View file

@ -174,4 +174,27 @@
<item name="android:lineSpacingExtra">16.7sp</item> <item name="android:lineSpacingExtra">16.7sp</item>
</style> </style>
<style name="dialog_title_font" parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">@color/colorH</item>
<item name="android:textSize">21.7sp</item>
<item name="android:textStyle">bold</item>
<item name="android:fontFamily">sans-serif</item>
<item name="android:lineSpacingExtra">6.7sp</item>
</style>
<style name="dialog_zrtp_colored_font" parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">@color/colorL</item>
<item name="android:textSize">20sp</item>
<item name="android:textStyle">bold</item>
<item name="android:fontFamily">sans-serif</item>
<item name="android:lineSpacingExtra">8.3sp</item>
</style>
<style name="dialog_zrtp_white_font" parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">@color/colorH</item>
<item name="android:textSize">20sp</item>
<item name="android:fontFamily">sans-serif</item>
<item name="android:lineSpacingExtra">8.3sp</item>
</style>
</resources> </resources>

View file

@ -1531,16 +1531,16 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
LinphonePreferences.instance().setLinkPopupTime(String.valueOf(newDate)); LinphonePreferences.instance().setLinkPopupTime(String.valueOf(newDate));
final Dialog dialog = LinphoneActivity.instance().displayDialog(String.format(getString(R.string.link_account_popup), LinphoneManager.getLc().getDefaultProxyConfig().getIdentityAddress().asStringUriOnly())); final Dialog dialog = LinphoneActivity.instance().displayDialog(String.format(getString(R.string.link_account_popup), LinphoneManager.getLc().getDefaultProxyConfig().getIdentityAddress().asStringUriOnly()));
Button delete = dialog.findViewById(R.id.delete_button); Button delete = dialog.findViewById(R.id.dialog_delete_button);
delete.setVisibility(View.GONE); delete.setVisibility(View.GONE);
Button ok = dialog.findViewById(R.id.ok_button); Button ok = dialog.findViewById(R.id.dialog_ok_button);
ok.setText(getString(R.string.link)); ok.setText(getString(R.string.link));
ok.setVisibility(View.VISIBLE); ok.setVisibility(View.VISIBLE);
Button cancel = dialog.findViewById(R.id.cancel); Button cancel = dialog.findViewById(R.id.dialog_cancel_button);
cancel.setText(getString(R.string.maybe_later)); cancel.setText(getString(R.string.maybe_later));
dialog.findViewById(R.id.doNotAskAgainLayout).setVisibility(View.VISIBLE); dialog.findViewById(R.id.dialog_do_not_ask_again_layout).setVisibility(View.VISIBLE);
final CheckBox doNotAskAgain = dialog.findViewById(R.id.doNotAskAgain); final CheckBox doNotAskAgain = dialog.findViewById(R.id.dialog_do_not_ask_again_layout);
dialog.findViewById(R.id.doNotAskAgainLabel).setOnClickListener(new View.OnClickListener() { dialog.findViewById(R.id.doNotAskAgainLabel).setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {

View file

@ -979,9 +979,8 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
public void displayChatRoomError() { public void displayChatRoomError() {
final Dialog dialog = LinphoneActivity.instance().displayDialog(getString(R.string.chat_room_creation_failed)); final Dialog dialog = LinphoneActivity.instance().displayDialog(getString(R.string.chat_room_creation_failed));
Button delete = dialog.findViewById(R.id.delete_button); dialog.findViewById(R.id.dialog_delete_button).setVisibility(View.GONE);
Button cancel = dialog.findViewById(R.id.cancel); Button cancel = dialog.findViewById(R.id.dialog_cancel_button);
delete.setVisibility(View.GONE);
cancel.setText(getString(R.string.ok)); cancel.setText(getString(R.string.ok));
cancel.setOnClickListener(new View.OnClickListener() { cancel.setOnClickListener(new View.OnClickListener() {
@Override @Override
@ -1002,7 +1001,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
dialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT); dialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
dialog.getWindow().setBackgroundDrawable(d); dialog.getWindow().setBackgroundDrawable(d);
TextView customText = dialog.findViewById(R.id.customText); TextView customText = dialog.findViewById(R.id.dialog_message);
customText.setText(text); customText.setText(text);
return dialog; return dialog;
} }

View file

@ -1124,13 +1124,15 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
TextView customText = dialog.findViewById(R.id.customText); TextView customText = dialog.findViewById(R.id.customText);
customText.setText(getResources().getString(R.string.add_video_dialog)); customText.setText(getResources().getString(R.string.add_video_dialog));
Button delete = dialog.findViewById(R.id.delete_button); dialog.findViewById(R.id.dialog_delete_button).setVisibility(View.GONE);
delete.setText(R.string.accept); Button accept = dialog.findViewById(R.id.dialog_ok_button);
Button cancel = dialog.findViewById(R.id.cancel); accept.setVisibility(View.VISIBLE);
accept.setText(R.string.accept);
Button cancel = dialog.findViewById(R.id.dialog_cancel_button);
cancel.setText(R.string.decline); cancel.setText(R.string.decline);
isVideoAsk = true; isVideoAsk = true;
delete.setOnClickListener(new OnClickListener() { accept.setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
int camera = getPackageManager().checkPermission(Manifest.permission.CAMERA, getPackageName()); int camera = getPackageManager().checkPermission(Manifest.permission.CAMERA, getPackageName());

View file

@ -684,15 +684,15 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
private void showSecurityDialog(boolean oneParticipantOneDevice) { private void showSecurityDialog(boolean oneParticipantOneDevice) {
final Dialog dialog = LinphoneActivity.instance().displayDialog(getString(R.string.lime_security_popup)); final Dialog dialog = LinphoneActivity.instance().displayDialog(getString(R.string.lime_security_popup));
Button delete = dialog.findViewById(R.id.delete_button); Button delete = dialog.findViewById(R.id.dialog_delete_button);
delete.setVisibility(View.GONE); delete.setVisibility(View.GONE);
Button ok = dialog.findViewById(R.id.ok_button); Button ok = dialog.findViewById(R.id.dialog_ok_button);
ok.setText(oneParticipantOneDevice ? getString(R.string.call) : getString(R.string.ok)); ok.setText(oneParticipantOneDevice ? getString(R.string.call) : getString(R.string.ok));
ok.setVisibility(View.VISIBLE); ok.setVisibility(View.VISIBLE);
Button cancel = dialog.findViewById(R.id.cancel); Button cancel = dialog.findViewById(R.id.dialog_cancel_button);
cancel.setText(getString(R.string.cancel)); cancel.setText(getString(R.string.cancel));
dialog.findViewById(R.id.doNotAskAgainLayout).setVisibility(View.VISIBLE); dialog.findViewById(R.id.dialog_do_not_ask_again_layout).setVisibility(View.VISIBLE);
final CheckBox doNotAskAgain = dialog.findViewById(R.id.doNotAskAgain); final CheckBox doNotAskAgain = dialog.findViewById(R.id.doNotAskAgain);
dialog.findViewById(R.id.doNotAskAgainLabel).setOnClickListener(new View.OnClickListener() { dialog.findViewById(R.id.doNotAskAgainLabel).setOnClickListener(new View.OnClickListener() {
@Override @Override
@ -962,9 +962,9 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
final Dialog dialog = LinphoneActivity.instance().displayDialog( final Dialog dialog = LinphoneActivity.instance().displayDialog(
getString(R.string.message_cant_be_decrypted) getString(R.string.message_cant_be_decrypted)
.replace("%s", (contact != null) ? contact.getFullName() : from.getUsername())); .replace("%s", (contact != null) ? contact.getFullName() : from.getUsername()));
Button delete = dialog.findViewById(R.id.delete_button); Button delete = dialog.findViewById(R.id.dialog_delete_button);
delete.setText(getString(R.string.call)); delete.setText(getString(R.string.call));
Button cancel = dialog.findViewById(R.id.cancel); Button cancel = dialog.findViewById(R.id.dialog_cancel_button);
cancel.setText(getString(R.string.ok)); cancel.setText(getString(R.string.ok));
delete.setOnClickListener(new View.OnClickListener() { delete.setOnClickListener(new View.OnClickListener() {
@Override @Override

View file

@ -176,9 +176,9 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
final Dialog dialog = LinphoneActivity.instance().displayDialog(getString(R.string.chat_room_leave_dialog)); final Dialog dialog = LinphoneActivity.instance().displayDialog(getString(R.string.chat_room_leave_dialog));
Button delete = dialog.findViewById(R.id.delete_button); Button delete = dialog.findViewById(R.id.dialog_delete_button);
delete.setText(getString(R.string.chat_room_leave_button)); delete.setText(getString(R.string.chat_room_leave_button));
Button cancel = dialog.findViewById(R.id.cancel); Button cancel = dialog.findViewById(R.id.dialog_cancel_button);
delete.setOnClickListener(new View.OnClickListener() { delete.setOnClickListener(new View.OnClickListener() {
@Override @Override
@ -405,9 +405,8 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
if (mAdminStateChangedDialog != null) mAdminStateChangedDialog.dismiss(); if (mAdminStateChangedDialog != null) mAdminStateChangedDialog.dismiss();
mAdminStateChangedDialog = LinphoneActivity.instance().displayDialog(getString(mIsEditionEnabled ? R.string.chat_room_you_are_now_admin : R.string.chat_room_you_are_no_longer_admin)); mAdminStateChangedDialog = LinphoneActivity.instance().displayDialog(getString(mIsEditionEnabled ? R.string.chat_room_you_are_now_admin : R.string.chat_room_you_are_no_longer_admin));
Button delete = mAdminStateChangedDialog.findViewById(R.id.delete_button); Button cancel = mAdminStateChangedDialog.findViewById(R.id.dialog_cancel_button);
Button cancel = mAdminStateChangedDialog.findViewById(R.id.cancel); mAdminStateChangedDialog.findViewById(R.id.dialog_delete_button).setVisibility(View.GONE);
delete.setVisibility(View.GONE);
cancel.setText(getString(R.string.ok)); cancel.setText(getString(R.string.ok));
cancel.setOnClickListener(new View.OnClickListener() { cancel.setOnClickListener(new View.OnClickListener() {
@Override @Override

View file

@ -303,8 +303,8 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
} }
if (id == R.id.deleteContact) { if (id == R.id.deleteContact) {
final Dialog dialog = LinphoneActivity.instance().displayDialog(getString(R.string.delete_text)); final Dialog dialog = LinphoneActivity.instance().displayDialog(getString(R.string.delete_text));
Button delete = dialog.findViewById(R.id.delete_button); Button delete = dialog.findViewById(R.id.dialog_delete_button);
Button cancel = dialog.findViewById(R.id.cancel); Button cancel = dialog.findViewById(R.id.dialog_cancel_button);
delete.setOnClickListener(new OnClickListener() { delete.setOnClickListener(new OnClickListener() {
@Override @Override

View file

@ -241,8 +241,8 @@ public class ContactEditorFragment extends Fragment {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
final Dialog dialog = LinphoneActivity.instance().displayDialog(getString(R.string.delete_text)); final Dialog dialog = LinphoneActivity.instance().displayDialog(getString(R.string.delete_text));
Button delete = dialog.findViewById(R.id.delete_button); Button delete = dialog.findViewById(R.id.dialog_delete_button);
Button cancel = dialog.findViewById(R.id.cancel); Button cancel = dialog.findViewById(R.id.dialog_cancel_button);
delete.setOnClickListener(new OnClickListener() { delete.setOnClickListener(new OnClickListener() {
@Override @Override

View file

@ -434,29 +434,31 @@ public class StatusFragment extends Fragment {
//Screen is locked //Screen is locked
LinphoneService.instance().displaySasNotification(call.getAuthenticationToken()); LinphoneService.instance().displaySasNotification(call.getAuthenticationToken());
} }
TextView customText = ZRTPdialog.findViewById(R.id.customText);
String newText = getString(R.string.zrtp_dialog1).replace("%s", zrtpToRead) TextView localSas = ZRTPdialog.findViewById(R.id.zrtp_sas_local);
+ getString(R.string.zrtp_dialog2).replace("%s", zrtpToListen); localSas.setText(zrtpToRead);
customText.setText(newText); TextView remoteSas = ZRTPdialog.findViewById(R.id.zrtp_sas_remote);
Button delete = ZRTPdialog.findViewById(R.id.delete_button); remoteSas.setText(zrtpToListen);
delete.setText(R.string.accept); TextView message = ZRTPdialog.findViewById(R.id.dialog_message);
Button cancel = ZRTPdialog.findViewById(R.id.cancel); message.setVisibility(View.GONE);
cancel.setText(R.string.deny); ZRTPdialog.findViewById(R.id.dialog_zrtp_layout).setVisibility(View.VISIBLE);
TextView title = ZRTPdialog.findViewById(R.id.dialog_title);
title.setText(getString(R.string.zrtp_dialog_title));
Button delete = ZRTPdialog.findViewById(R.id.dialog_delete_button);
delete.setText(R.string.deny);
Button cancel = ZRTPdialog.findViewById(R.id.dialog_cancel_button);
cancel.setVisibility(View.GONE);
Button accept = ZRTPdialog.findViewById(R.id.dialog_ok_button);
accept.setVisibility(View.VISIBLE);
accept.setText(R.string.accept);
ImageView icon = ZRTPdialog.findViewById(R.id.dialog_icon);
icon.setVisibility(View.VISIBLE);
icon.setImageResource(R.drawable.security_2_indicator);
delete.setOnClickListener(new OnClickListener() { delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
call.setAuthenticationTokenVerified(true);
if (encryption != null) {
encryption.setImageResource(R.drawable.security_ok);
}
isZrtpAsk = false;
ZRTPdialog.dismiss();
LinphoneService.instance().removeSasNotification();
}
});
cancel.setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
if (call != null) { if (call != null) {
@ -470,6 +472,19 @@ public class StatusFragment extends Fragment {
LinphoneService.instance().removeSasNotification(); LinphoneService.instance().removeSasNotification();
} }
}); });
accept.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
call.setAuthenticationTokenVerified(true);
if (encryption != null) {
encryption.setImageResource(R.drawable.security_ok);
}
isZrtpAsk = false;
ZRTPdialog.dismiss();
LinphoneService.instance().removeSasNotification();
}
});
ZRTPdialog.show(); ZRTPdialog.show();
} }
} }

View file

@ -90,8 +90,8 @@ public class ListSelectionHelper {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
final Dialog dialog = LinphoneActivity.instance().displayDialog(mContext.getString(mDialogDeleteMessageResourceId)); final Dialog dialog = LinphoneActivity.instance().displayDialog(mContext.getString(mDialogDeleteMessageResourceId));
Button delete = dialog.findViewById(R.id.delete_button); Button delete = dialog.findViewById(R.id.dialog_delete_button);
Button cancel = dialog.findViewById(R.id.cancel); Button cancel = dialog.findViewById(R.id.dialog_cancel_button);
delete.setOnClickListener(new View.OnClickListener() { delete.setOnClickListener(new View.OnClickListener() {
@Override @Override

View file

@ -98,8 +98,8 @@ public class SelectableHelper {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
final Dialog dialog = LinphoneActivity.instance().displayDialog(mContext.getString(mDialogDeleteMessageResourceId)); final Dialog dialog = LinphoneActivity.instance().displayDialog(mContext.getString(mDialogDeleteMessageResourceId));
Button delete = dialog.findViewById(R.id.delete_button); Button delete = dialog.findViewById(R.id.dialog_delete_button);
Button cancel = dialog.findViewById(R.id.cancel); Button cancel = dialog.findViewById(R.id.dialog_cancel_button);
delete.setOnClickListener(new View.OnClickListener() { delete.setOnClickListener(new View.OnClickListener() {
@Override @Override