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());
}
// 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<>();
@ -283,7 +281,7 @@ public class AddSubkeyDialogFragment extends DialogFragment {
// For EC keys, add a curve
if (algorithm == Algorithm.ECDH || algorithm == Algorithm.ECDSA) {
curve = ((Choice<Curve>) mCurveSpinner.getSelectedItem()).getId();
// Otherwise, get a keysize
// Otherwise, get a keysize
} else {
keySize = getProperKeyLength(algorithm, getSelectedKeyLength());
}

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,62 +100,65 @@ 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);
Calendar todayCal = Calendar.getInstance(TimeZone.getDefault());
if (creationCal.after(todayCal)) {
// Note: This is just for the rare cases where creation is _after_ today
// 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.init(
creationCalPlusOne.get(Calendar.YEAR),
creationCalPlusOne.get(Calendar.MONTH),
creationCalPlusOne.get(Calendar.DAY_OF_MONTH),
null
);
} else {
// normally, just init with today
datePicker.init(
todayCal.get(Calendar.YEAR),
todayCal.get(Calendar.MONTH),
todayCal.get(Calendar.DAY_OF_MONTH),
null
);
}
currentExpiry.setText(R.string.btn_no_date);
} else {
noExpiry.setChecked(false);
datePicker.setVisibility(View.VISIBLE);
expiryLayout.setVisibility(View.VISIBLE);
// set date picker to current expiry
// 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
// Min Date: Creation date + 1 day
Calendar creationCalPlusOne = (Calendar) creationCal.clone();
creationCalPlusOne.add(Calendar.DAY_OF_YEAR, 1);
datePicker.setMinDate(creationCalPlusOne.getTime().getTime());
datePicker.init(
expiryCal.get(Calendar.YEAR),
expiryCal.get(Calendar.MONTH),
expiryCal.get(Calendar.DAY_OF_MONTH),
creationCalPlusOne.get(Calendar.YEAR),
creationCalPlusOne.get(Calendar.MONTH),
creationCalPlusOne.get(Calendar.DAY_OF_MONTH),
null
);
} else {
// 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),
todayCal.get(Calendar.DAY_OF_MONTH),
null
);
}
datePicker.setMinDate(creationCal.getTime().getTime());
alert.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {

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,23 +16,49 @@
android:layout_height="wrap_content"
android:text="@string/btn_no_date" />
<!--
Use Spinner style DatePicker, not the full calendar view
Android < 5:
android:spinnersShown="true"
android:calendarViewShown="false"
Android >= 5:
<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:
android:spinnersShown="true"
android:calendarViewShown="false"
Android >= 5:
android:datePickerMode="spinner"
-->
<!-- Hide calendarView in tablets because of the unix warparound bug. -->
<DatePicker
android:id="@+id/edit_subkey_expiry_date_picker"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="UnusedAttribute"
android:datePickerMode="spinner"
-->
<!-- Hide calendarView in tablets because of the unix warparound bug. -->
<DatePicker
android:id="@+id/edit_subkey_expiry_date_picker"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="UnusedAttribute"
android:datePickerMode="spinner"
android:spinnersShown="true"
android:calendarViewShown="false" />
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>
@ -1027,7 +1028,7 @@
<string name="msg_vl_clear_meta_file">"Filename: %s"</string>
<string name="msg_vl_clear_meta_mime">"MIME type: %s"</string>
<string name="msg_vl_clear_meta_time">"Modification time: %s"</string>
<string name="msg_vl_clear_meta_size">"Filesize: %s"</string>
<string name="msg_vl_clear_meta_size">"File size: %s"</string>
<string name="msg_vl_clear_signature_check">"Verifying signature data"</string>
<string name="msg_vl_error_integrity_check">"Integrity check error!"</string>
<string name="msg_vl_ok">"OK"</string>