Fix expiry dialog, reorder layouts

This commit is contained in:
Dominik Schürmann 2015-03-03 22:44:32 +01:00
parent 188559bbcd
commit 7b0e067f63
5 changed files with 92 additions and 62 deletions

View File

@ -137,12 +137,10 @@ public class AddSubkeyDialogFragment extends DialogFragment {
}
});
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
// date picker works based on default time zone
Calendar minDateCal = Calendar.getInstance(TimeZone.getDefault());
minDateCal.add(Calendar.DAY_OF_YEAR, 1); // at least one day after creation (today)
mExpiryDatePicker.setMinDate(minDateCal.getTime().getTime());
}
{
ArrayList<Choice<Algorithm>> choices = new ArrayList<>();

View File

@ -25,11 +25,14 @@ import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import android.support.v4.app.DialogFragment;
import android.text.format.DateFormat;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.DatePicker;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
@ -97,40 +100,57 @@ public class EditSubkeyExpiryDialogFragment extends DialogFragment {
final CheckBox noExpiry = (CheckBox) view.findViewById(R.id.edit_subkey_expiry_no_expiry);
final DatePicker datePicker = (DatePicker) view.findViewById(R.id.edit_subkey_expiry_date_picker);
final TextView currentExpiry = (TextView) view.findViewById(R.id.edit_subkey_expiry_current_expiry);
final LinearLayout expiryLayout = (LinearLayout) view.findViewById(R.id.edit_subkey_expiry_layout);
noExpiry.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
datePicker.setVisibility(View.GONE);
expiryLayout.setVisibility(View.GONE);
} else {
datePicker.setVisibility(View.VISIBLE);
expiryLayout.setVisibility(View.VISIBLE);
}
}
});
// init date picker with default selected date
if (expiry == 0L) {
noExpiry.setChecked(true);
datePicker.setVisibility(View.GONE);
expiryLayout.setVisibility(View.GONE);
currentExpiry.setText(R.string.btn_no_date);
} else {
noExpiry.setChecked(false);
expiryLayout.setVisibility(View.VISIBLE);
// convert from UTC to time zone of device
Calendar expiryCalTimeZone = (Calendar) expiryCal.clone();
expiryCalTimeZone.setTimeZone(TimeZone.getDefault());
currentExpiry.setText(DateFormat.getDateFormat(
getActivity()).format(expiryCalTimeZone.getTime()));
}
// date picker works based on default time zone
Calendar todayCal = Calendar.getInstance(TimeZone.getDefault());
if (creationCal.after(todayCal)) {
// Note: This is just for the rare cases where creation is _after_ today
// NOTE: This is just for the rare cases where creation is _after_ today
// Min Date: Creation date + 1 day
// set it to creation date +1 day (don't set it to creationCal, it would break crash
// datePicker.setMinDate() execution with IllegalArgumentException
Calendar creationCalPlusOne = (Calendar) creationCal.clone();
creationCalPlusOne.add(Calendar.DAY_OF_YEAR, 1);
datePicker.setMinDate(creationCalPlusOne.getTime().getTime());
datePicker.init(
creationCalPlusOne.get(Calendar.YEAR),
creationCalPlusOne.get(Calendar.MONTH),
creationCalPlusOne.get(Calendar.DAY_OF_MONTH),
null
);
} else {
// normally, just init with today
// Min Date: today + 1 day
// at least one day after creation (today)
todayCal.add(Calendar.DAY_OF_YEAR, 1);
datePicker.setMinDate(todayCal.getTime().getTime());
datePicker.init(
todayCal.get(Calendar.YEAR),
todayCal.get(Calendar.MONTH),
@ -138,20 +158,6 @@ public class EditSubkeyExpiryDialogFragment extends DialogFragment {
null
);
}
} else {
noExpiry.setChecked(false);
datePicker.setVisibility(View.VISIBLE);
// set date picker to current expiry
datePicker.init(
expiryCal.get(Calendar.YEAR),
expiryCal.get(Calendar.MONTH),
expiryCal.get(Calendar.DAY_OF_MONTH),
null
);
}
datePicker.setMinDate(creationCal.getTime().getTime());
alert.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override

View File

@ -92,7 +92,6 @@ public class SetPassphraseDialogFragment extends DialogFragment implements OnEdi
CustomAlertDialogBuilder alert = new CustomAlertDialogBuilder(activity);
alert.setTitle(title);
alert.setMessage(R.string.enter_passphrase_twice);
LayoutInflater inflater = activity.getLayoutInflater();
View view = inflater.inflate(R.layout.passphrase_repeat_dialog, null);

View File

@ -16,6 +16,31 @@
android:layout_height="wrap_content"
android:text="@string/btn_no_date" />
<LinearLayout
android:id="@+id/edit_subkey_expiry_layout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
style="@style/SectionHeader"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/section_current_expiry" />
<TextView
android:id="@+id/edit_subkey_expiry_current_expiry"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:padding="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
style="@style/SectionHeader"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/section_new_expiry" />
<!--
Use Spinner style DatePicker, not the full calendar view
Android < 5:
@ -34,5 +59,6 @@
android:datePickerMode="spinner"
android:spinnersShown="true"
android:calendarViewShown="false" />
</LinearLayout>
</LinearLayout>

View File

@ -67,6 +67,8 @@
<string name="section_certs">"Certificates"</string>
<string name="section_encrypt">"Encrypt"</string>
<string name="section_decrypt">"Decrypt"</string>
<string name="section_current_expiry">"Current expiry"</string>
<string name="section_new_expiry">"New expiry"</string>
<!-- button -->
<string name="btn_decrypt_verify_file">"Decrypt, verify, and save file"</string>
@ -226,7 +228,6 @@
<string name="no_file_selected">"Select a file first."</string>
<string name="encrypt_sign_successful">"Successfully signed and/or encrypted."</string>
<string name="encrypt_sign_clipboard_successful">"Successfully signed and/or encrypted to clipboard."</string>
<string name="enter_passphrase_twice">"Enter the passphrase twice."</string>
<string name="select_encryption_key">"Select at least one encryption key."</string>
<string name="select_encryption_or_signature_key">"Select at least one encryption key or a signature key."</string>
<string name="specify_file_to_encrypt_to">"Please specify which file to encrypt to.\nWARNING: File will be overwritten if it exists."</string>