Support setting filter expirations (#2667)

* Show filter expiration in list

* Add support for setting and updating the duration of a filter

* Add tests for duration conversion math

* Refactor network wrapper code

* Mark updated mastodon api functions as suspend

* Avoid creating unnecessary Date objects

* Apply suggestions to filter dialog layout
This commit is contained in:
Levi Bard 2022-08-17 17:50:34 +02:00 committed by GitHub
commit c47d9ef6ac
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 197 additions and 100 deletions

View file

@ -4,32 +4,34 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="16dp">
android:padding="24dp">
<EditText
android:id="@+id/phraseEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingEnd="24dp"
android:paddingStart="24dp"
android:hint="@string/filter_add_description"
app:layout_constraintTop_toTopOf="parent"
/>
<Spinner
android:id="@+id/filterDurationSpinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/phraseEditText"
app:layout_constraintLeft_toLeftOf="parent"
/>
<CheckBox
android:id="@+id/phraseWholeWord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingEnd="24dp"
android:paddingStart="24dp"
android:text="@string/filter_dialog_whole_word"
app:layout_constraintTop_toBottomOf="@id/phraseEditText"
app:layout_constraintTop_toBottomOf="@id/filterDurationSpinner"
app:layout_constraintLeft_toLeftOf="parent"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingEnd="8dp"
android:paddingStart="8dp"
android:lineSpacingMultiplier="1.1"
app:layout_constraintTop_toBottomOf="@id/phraseWholeWord"
app:layout_constraintLeft_toLeftOf="parent"
android:text="@string/filter_dialog_whole_word_description"

View file

@ -190,6 +190,8 @@
<item>31536000</item>
</integer-array>
<string name="poll_percent_format"><!-- 15% --> &lt;b>%1$d%%&lt;/b></string>
<string-array name="mute_duration_names">
<item>@string/duration_indefinite</item>
<item>@string/duration_5_min</item>
@ -212,5 +214,25 @@
<item>604800</item>
</integer-array>
<string name="poll_percent_format"><!-- 15% --> &lt;b>%1$d%%&lt;/b></string>
<string-array name="filter_duration_names">
<item>@string/duration_indefinite</item>
<item>@string/duration_5_min</item>
<item>@string/duration_30_min</item>
<item>@string/duration_1_hour</item>
<item>@string/duration_6_hours</item>
<item>@string/duration_1_day</item>
<item>@string/duration_3_days</item>
<item>@string/duration_7_days</item>
</string-array>
<integer-array name="filter_duration_values"> <!-- values in seconds, corresponding to mute_duration_names -->
<item>0</item>
<item>300</item>
<item>1800</item>
<item>3600</item>
<item>21600</item>
<item>86400</item>
<item>259200</item>
<item>604800</item>
</integer-array>
</resources>

View file

@ -383,6 +383,7 @@
<string name="filter_dialog_whole_word">Whole word</string>
<string name="filter_dialog_whole_word_description">When the keyword or phrase is alphanumeric only, it will only be applied if it matches the whole word</string>
<string name="filter_add_description">Phrase to filter</string>
<string name="filter_expiration_format">%s (%s)</string>
<string name="add_account_name">Add Account</string>
<string name="add_account_description">Add new Mastodon Account</string>
@ -602,6 +603,7 @@
<string name="duration_90_days">90 days</string>
<string name="duration_180_days">180 days</string>
<string name="duration_365_days">365 days</string>
<string name="duration_no_change">(No change)</string>
<string name="add_poll_choice">Add choice</string>
<string name="poll_allow_multiple_choices">Multiple choices</string>
<string name="poll_new_choice_hint">Choice %d</string>