Pārlūkot izejas kodu

FileDetailsSharing: Preserve selected date when recreating expiration date dialog

Signed-off-by: Álvaro Brey Vilas <alvaro.brey@nextcloud.com>
Álvaro Brey Vilas 3 gadi atpakaļ
vecāks
revīzija
7e31a71ba0

+ 19 - 5
app/src/main/java/com/owncloud/android/ui/dialog/ExpirationDatePickerDialogFragment.java

@@ -138,6 +138,16 @@ public class ExpirationDatePickerDialogFragment
         return dialog;
     }
 
+    public long getCurrentSelectionMillis() {
+        final Dialog dialog = getDialog();
+        if (dialog != null) {
+            final DatePickerDialog datePickerDialog = (DatePickerDialog) dialog;
+            final DatePicker picker = datePickerDialog.getDatePicker();
+            return yearMonthDayToMillis(picker.getYear(), picker.getMonth(), picker.getDayOfMonth());
+        }
+        return 0;
+    }
+
     /**
      * Called when the user chooses an expiration date.
      *
@@ -149,17 +159,21 @@ public class ExpirationDatePickerDialogFragment
     @Override
     public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
 
-        Calendar chosenDate = Calendar.getInstance();
-        chosenDate.set(Calendar.YEAR, year);
-        chosenDate.set(Calendar.MONTH, monthOfYear);
-        chosenDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
-        long chosenDateInMillis = chosenDate.getTimeInMillis();
+        long chosenDateInMillis = yearMonthDayToMillis(year, monthOfYear, dayOfMonth);
 
         if (onExpiryDateListener != null) {
             onExpiryDateListener.onDateSet(year, monthOfYear, dayOfMonth, chosenDateInMillis);
         }
     }
 
+    private long yearMonthDayToMillis(int year, int monthOfYear, int dayOfMonth) {
+        Calendar date = Calendar.getInstance();
+        date.set(Calendar.YEAR, year);
+        date.set(Calendar.MONTH, monthOfYear);
+        date.set(Calendar.DAY_OF_MONTH, dayOfMonth);
+        return date.getTimeInMillis();
+    }
+
     public interface OnExpiryDateListener {
         void onDateSet(int year, int monthOfYear, int dayOfMonth, long chosenDateInMillis);
 

+ 7 - 7
app/src/main/java/com/owncloud/android/ui/fragment/FileDetailsSharingProcessFragment.kt

@@ -28,7 +28,6 @@ import android.text.TextUtils
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
-import androidx.fragment.app.DialogFragment
 import androidx.fragment.app.Fragment
 import com.owncloud.android.R
 import com.owncloud.android.databinding.FileDetailsSharingProcessFragmentBinding
@@ -118,7 +117,7 @@ class FileDetailsSharingProcessFragment : Fragment(), ExpirationDatePickerDialog
     private var isReshareShown: Boolean = true // show or hide reshare option
     private var isExpDateShown: Boolean = true // show or hide expiry date option
 
-    private var datePickerFragment: DialogFragment? = null
+    private var expirationDatePickerFragment: ExpirationDatePickerDialogFragment? = null
 
     override fun onAttach(context: Context) {
         super.onAttach(context)
@@ -169,10 +168,11 @@ class FileDetailsSharingProcessFragment : Fragment(), ExpirationDatePickerDialog
         // Force recreation of dialog fragment when screen rotates
         // This is needed because the calendar layout should be different in portrait and landscape,
         // but as FDA persists through config changes, the dialog is not recreated automatically
-        val datePicker = datePickerFragment
+        val datePicker = expirationDatePickerFragment
         if (datePicker?.dialog?.isShowing == true) {
+            val currentSelectionMillis = datePicker.currentSelectionMillis
             datePicker.dismiss()
-            showExpirationDateDialog()
+            showExpirationDateDialog(currentSelectionMillis)
         }
     }
 
@@ -363,10 +363,10 @@ class FileDetailsSharingProcessFragment : Fragment(), ExpirationDatePickerDialog
         }
     }
 
-    private fun showExpirationDateDialog() {
-        val dialog = ExpirationDatePickerDialogFragment.newInstance(chosenExpDateInMills)
+    private fun showExpirationDateDialog(chosenDateInMillis: Long = chosenExpDateInMills) {
+        val dialog = ExpirationDatePickerDialogFragment.newInstance(chosenDateInMillis)
         dialog.setOnExpiryDateListener(this)
-        datePickerFragment = dialog
+        expirationDatePickerFragment = dialog
         fileActivity?.let {
             dialog.show(
                 it.supportFragmentManager,