Drop support for Lollipop and Lollipop MR1

pull/996/head
Alex Baker 6 years ago
parent 79ca62cbea
commit fbeef45bb9

@ -134,18 +134,10 @@ public class AndroidUtilities {
return (int) (dp * displayMetrics.density + 0.5f);
}
public static boolean preMarshmallow() {
return !atLeastMarshmallow();
}
public static boolean preOreo() {
return !atLeastOreo();
}
public static boolean atLeastMarshmallow() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
}
public static boolean atLeastNougat() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N;
}

@ -3,7 +3,6 @@ package com.todoroo.astrid.activity;
import static android.content.Intent.ACTION_SEND;
import static android.content.Intent.ACTION_SEND_MULTIPLE;
import static com.google.common.collect.Lists.newArrayList;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastMarshmallow;
import static org.tasks.files.FileHelper.copyToUri;
import static org.tasks.files.FileHelper.getFilename;
import static org.tasks.intents.TaskIntents.getTaskListIntent;
@ -68,7 +67,7 @@ public final class ShareLinkActivity extends InjectingAppCompatActivity {
Intent intent = getIntent();
String action = intent.getAction();
if (atLeastMarshmallow() && Intent.ACTION_PROCESS_TEXT.equals(action)) {
if (Intent.ACTION_PROCESS_TEXT.equals(action)) {
CharSequence text = intent.getCharSequenceExtra(Intent.EXTRA_PROCESS_TEXT);
if (text != null) {
Task task = taskCreator.createWithValues(text.toString());

@ -36,7 +36,7 @@ import org.tasks.data.CaldavDao;
import org.tasks.databinding.ActivityCaldavAccountSettingsBinding;
import org.tasks.dialogs.DialogBuilder;
import org.tasks.injection.ThemedInjectingAppCompatActivity;
import org.tasks.security.Encryption;
import org.tasks.security.KeyStoreEncryption;
import org.tasks.ui.DisplayableException;
import timber.log.Timber;
@ -46,7 +46,7 @@ public abstract class BaseCaldavAccountSettingsActivity extends ThemedInjectingA
public static final String EXTRA_CALDAV_DATA = "caldavData"; // $NON-NLS-1$
protected static final String PASSWORD_MASK = "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022";
@Inject protected CaldavDao caldavDao;
@Inject protected Encryption encryption;
@Inject protected KeyStoreEncryption encryption;
@Inject DialogBuilder dialogBuilder;
@Inject TaskDeleter taskDeleter;
@Inject Inventory inventory;

@ -45,7 +45,7 @@ import org.tasks.data.CaldavAccount;
import org.tasks.data.CaldavCalendar;
import org.tasks.injection.ForApplication;
import org.tasks.preferences.Preferences;
import org.tasks.security.Encryption;
import org.tasks.security.KeyStoreEncryption;
import org.tasks.ui.DisplayableException;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
@ -54,7 +54,7 @@ import timber.log.Timber;
public class CaldavClient {
private final Encryption encryption;
private final KeyStoreEncryption encryption;
private final Preferences preferences;
private final DebugNetworkInterceptor interceptor;
private final OkHttpClient httpClient;
@ -66,7 +66,7 @@ public class CaldavClient {
@Inject
CaldavClient(
@ForApplication Context context,
Encryption encryption,
KeyStoreEncryption encryption,
Preferences preferences,
DebugNetworkInterceptor interceptor) {
this.context = context;
@ -80,7 +80,7 @@ public class CaldavClient {
private CaldavClient(
Context context,
Encryption encryption,
KeyStoreEncryption encryption,
Preferences preferences,
DebugNetworkInterceptor interceptor,
String url,

@ -9,7 +9,7 @@ import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.Ignore;
import androidx.room.PrimaryKey;
import org.tasks.security.Encryption;
import org.tasks.security.KeyStoreEncryption;
@Entity(tableName = "caldav_accounts")
public class CaldavAccount implements Parcelable {
@ -129,7 +129,7 @@ public class CaldavAccount implements Parcelable {
this.password = password;
}
public String getPassword(Encryption encryption) {
public String getPassword(KeyStoreEncryption encryption) {
return encryption.decrypt(password);
}
@ -141,7 +141,7 @@ public class CaldavAccount implements Parcelable {
this.encryptionKey = encryptionKey;
}
public String getEncryptionPassword(Encryption encryption) {
public String getEncryptionPassword(KeyStoreEncryption encryption) {
return encryption.decrypt(encryptionKey);
}

@ -18,15 +18,12 @@ import butterknife.ButterKnife
import butterknife.OnClick
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.todoroo.andlib.utility.AndroidUtilities
import com.todoroo.andlib.utility.AndroidUtilities.atLeastMarshmallow
import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.dao.TaskDao
import com.todoroo.astrid.data.Task
import org.tasks.R
import org.tasks.databinding.DialogDateTimePickerBinding
import org.tasks.date.DateTimeUtils.newDateTime
import org.tasks.dialogs.MyDatePickerDialog.newDatePicker
import org.tasks.dialogs.MyTimePickerDialog.newTimePicker
import org.tasks.injection.DialogFragmentComponent
import org.tasks.injection.InjectingBottomSheetDialogFragment
@ -70,9 +67,7 @@ class DateTimePicker : InjectingBottomSheetDialogFragment() {
private const val EXTRA_AUTO_CLOSE = "extra_auto_close"
private const val EXTRA_SELECTED = "extra_selected"
private const val REQUEST_TIME = 10101
private const val REQUEST_DATE = 10102
private const val FRAG_TAG_TIME_PICKER = "frag_tag_time_picker"
private const val FRAG_TAG_DATE_PICKER = "frag_tag_date_picker"
fun newDateTimePicker(task: Long, current: Long, autoClose: Boolean): DateTimePicker {
val bundle = Bundle()
@ -97,9 +92,6 @@ class DateTimePicker : InjectingBottomSheetDialogFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
binding = DialogDateTimePickerBinding.inflate(theme.getLayoutInflater(context))
if (AndroidUtilities.preMarshmallow()) {
binding.shortcuts.pickDateButton.visibility = View.VISIBLE
}
morning = preferences.dateShortcutMorning + 1000
afternoon = preferences.dateShortcutAfternoon + 1000
evening = preferences.dateShortcutEvening + 1000
@ -111,7 +103,6 @@ class DateTimePicker : InjectingBottomSheetDialogFragment() {
ButterKnife.bind(this, binding.root)
binding.shortcuts.nextWeekButton.text =
getString(R.string.next, DateUtilities.getWeekdayShort(newDateTime().plusWeeks(1), locale.locale))
if (atLeastMarshmallow()) {
binding.calendarView.setOnDateChangeListener { _, y, m, d ->
selected = DateTime(y, m + 1, d, selected?.hourOfDay ?: 0, selected?.minuteOfHour
?: 0, selected?.secondOfMinute ?: 0)
@ -122,7 +113,6 @@ class DateTimePicker : InjectingBottomSheetDialogFragment() {
if (firstDayOfWeek in 1..7) {
binding.calendarView.firstDayOfWeek = firstDayOfWeek
}
}
val timestamp = savedInstanceState?.getLong(EXTRA_SELECTED)
?: requireArguments().getLong(EXTRA_TIMESTAMP)
selected = if (timestamp > 0) DateTime(timestamp) else null
@ -176,7 +166,7 @@ class DateTimePicker : InjectingBottomSheetDialogFragment() {
} else {
binding.shortcuts.timeGroup.check(R.id.no_time)
}
if (atLeastMarshmallow() && selected != null) {
if (selected != null) {
binding.calendarView.setDate(selected!!.millis, true, true)
}
}
@ -220,12 +210,6 @@ class DateTimePicker : InjectingBottomSheetDialogFragment() {
.show(parentFragmentManager, FRAG_TAG_TIME_PICKER)
}
@OnClick(R.id.pick_date_button)
fun pickDate() {
newDatePicker(this, REQUEST_DATE, selected?.millis ?: today.millis)
.show(parentFragmentManager, FRAG_TAG_DATE_PICKER)
}
private fun returnSelectedTime(millisOfDay: Int) {
if (selected == null) {
selected = today.withMillisOfDay(millisOfDay)
@ -336,13 +320,6 @@ class DateTimePicker : InjectingBottomSheetDialogFragment() {
} else {
refreshButtons()
}
} else if (requestCode == REQUEST_DATE) {
if (resultCode == RESULT_OK) {
val timestamp = data!!.getLongExtra(MyDatePickerDialog.EXTRA_TIMESTAMP, today.millis)
returnDate(timestamp)
} else {
refreshButtons()
}
} else {
super.onActivityResult(requestCode, resultCode, data)
}

@ -28,7 +28,7 @@ import org.tasks.data.CaldavAccount;
import org.tasks.databinding.ActivityEtesyncEncryptionSettingsBinding;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.ThemedInjectingAppCompatActivity;
import org.tasks.security.Encryption;
import org.tasks.security.KeyStoreEncryption;
import org.tasks.ui.DisplayableException;
import timber.log.Timber;
@ -40,7 +40,7 @@ public class EncryptionSettingsActivity extends ThemedInjectingAppCompatActivity
public static final String EXTRA_DERIVED_KEY = "extra_derived_key";
@Inject EteSyncClient client;
@Inject Encryption encryption;
@Inject KeyStoreEncryption encryption;
private ActivityEtesyncEncryptionSettingsBinding binding;
private UserInfo userInfo;

@ -46,7 +46,7 @@ import org.tasks.data.CaldavAccount;
import org.tasks.data.CaldavCalendar;
import org.tasks.injection.ForApplication;
import org.tasks.preferences.Preferences;
import org.tasks.security.Encryption;
import org.tasks.security.KeyStoreEncryption;
import timber.log.Timber;
public class EteSyncClient {
@ -55,7 +55,7 @@ public class EteSyncClient {
private static final int MAX_FETCH = 50;
private static final int MAX_PUSH = 30;
private final Encryption encryption;
private final KeyStoreEncryption encryption;
private final Preferences preferences;
private final DebugNetworkInterceptor interceptor;
private final String username;
@ -70,7 +70,7 @@ public class EteSyncClient {
@Inject
public EteSyncClient(
@ForApplication Context context,
Encryption encryption,
KeyStoreEncryption encryption,
Preferences preferences,
DebugNetworkInterceptor interceptor) {
this.context = context;
@ -87,7 +87,7 @@ public class EteSyncClient {
private EteSyncClient(
Context context,
Encryption encryption,
KeyStoreEncryption encryption,
Preferences preferences,
DebugNetworkInterceptor interceptor,
String url,

@ -1,7 +1,5 @@
package org.tasks.injection;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastMarshmallow;
import android.content.Context;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.TaskDao;
@ -28,9 +26,6 @@ import org.tasks.locale.Locale;
import org.tasks.location.Geocoder;
import org.tasks.location.MapboxGeocoder;
import org.tasks.notifications.NotificationDao;
import org.tasks.security.Encryption;
import org.tasks.security.KeyStoreEncryption;
import org.tasks.security.NoEncryption;
@Module
class ApplicationModule {
@ -138,12 +133,6 @@ class ApplicationModule {
return database.getDeletionDao();
}
@Provides
@ApplicationScope
public Encryption getEncryption() {
return atLeastMarshmallow() ? new KeyStoreEncryption() : new NoEncryption();
}
@Provides
BillingClient getBillingClient(Inventory inventory, Tracker tracker) {
return new BillingClientImpl(context, inventory, tracker);

@ -1,6 +1,5 @@
package org.tasks.jobs;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastMarshmallow;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastOreo;
import static com.todoroo.andlib.utility.DateUtilities.now;
import static io.reactivex.Single.just;
@ -200,11 +199,7 @@ public class WorkManager {
}
} else {
PendingIntent pendingIntent = getNotificationPendingIntent();
if (atLeastMarshmallow()) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, time, pendingIntent);
} else {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, time, pendingIntent);
}
}
}

@ -12,7 +12,6 @@ import android.speech.tts.TextToSpeech
import androidx.preference.Preference
import androidx.preference.SwitchPreferenceCompat
import com.todoroo.andlib.utility.AndroidUtilities
import com.todoroo.andlib.utility.AndroidUtilities.atLeastMarshmallow
import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.voice.VoiceOutputAssistant
import org.tasks.LocalBroadcastManager
@ -143,12 +142,10 @@ class Notifications : InjectingPreferenceFragment() {
}
private fun checkBatteryOptimizations() {
if (atLeastMarshmallow()) {
val powerManager = requireContext().getSystemService(POWER_SERVICE) as PowerManager
findPreference(R.string.disable_battery_optimizations).isVisible =
!powerManager.isIgnoringBatteryOptimizations(getString(R.string.app_package))
}
}
override fun onDestroy() {
super.onDestroy()

@ -1,7 +1,5 @@
package org.tasks.scheduling;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastMarshmallow;
import android.annotation.SuppressLint;
import android.app.PendingIntent;
import android.content.Context;
@ -23,11 +21,7 @@ public class AlarmManager {
@SuppressLint("NewApi")
public void wakeup(long time, PendingIntent pendingIntent) {
if (atLeastMarshmallow()) {
alarmManager.setExactAndAllowWhileIdle(
android.app.AlarmManager.RTC_WAKEUP, time, pendingIntent);
} else {
alarmManager.setExact(android.app.AlarmManager.RTC_WAKEUP, time, pendingIntent);
}
}
}

@ -1,8 +0,0 @@
package org.tasks.security;
public interface Encryption {
String encrypt(String text);
String decrypt(String text);
}

@ -29,10 +29,11 @@ import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.GCMParameterSpec;
import javax.inject.Inject;
import org.tasks.injection.ApplicationScope;
import timber.log.Timber;
@RequiresApi(api = VERSION_CODES.M)
public class KeyStoreEncryption implements Encryption {
@ApplicationScope
public class KeyStoreEncryption {
private static final String ANDROID_KEYSTORE = "AndroidKeyStore";
private static final String ALIAS = "passwords";
@ -52,7 +53,6 @@ public class KeyStoreEncryption implements Encryption {
}
}
@Override
public String encrypt(String text) {
byte[] iv = new byte[GCM_IV_LENGTH];
new SecureRandom().nextBytes(iv);
@ -69,7 +69,6 @@ public class KeyStoreEncryption implements Encryption {
}
}
@Override
public String decrypt(String text) {
if (Strings.isNullOrEmpty(text)) {
return null;

@ -1,14 +0,0 @@
package org.tasks.security;
public class NoEncryption implements Encryption {
@Override
public String encrypt(String text) {
return text;
}
@Override
public String decrypt(String text) {
return text;
}
}

@ -1,6 +1,5 @@
package org.tasks.themes;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastMarshmallow;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastOreo;
import android.app.Activity;
@ -247,11 +246,9 @@ public class ThemeColor implements Pickable {
public void setStatusBarColor(DrawerLayout drawerLayout) {
drawerLayout.setStatusBarBackgroundColor(colorPrimaryVariant);
if (atLeastMarshmallow()) {
int systemUiVisibility = applyLightStatusBarFlag(drawerLayout.getSystemUiVisibility());
drawerLayout.setSystemUiVisibility(systemUiVisibility);
}
}
public void setStatusBarColor(CollapsingToolbarLayout layout) {
layout.setContentScrimColor(colorPrimary);
@ -268,12 +265,10 @@ public class ThemeColor implements Pickable {
}
public void applyToStatusBarIcons(Activity activity) {
if (atLeastMarshmallow()) {
View decorView = activity.getWindow().getDecorView();
int systemUiVisibility = applyLightStatusBarFlag(decorView.getSystemUiVisibility());
decorView.setSystemUiVisibility(systemUiVisibility);
}
}
public void applyToNavigationBar(Activity activity) {
activity.getWindow().setNavigationBarColor(getPrimaryColor());
@ -285,7 +280,6 @@ public class ThemeColor implements Pickable {
}
}
@RequiresApi(api = VERSION_CODES.M)
private int applyLightStatusBarFlag(int flag) {
return isDark
? flag | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<size
android:height="24dp"
android:width="24dp" />
<solid android:color="#FF000000" />
</shape>
</item>
<item>
<shape android:shape="oval">
<size
android:height="25dp"
android:width="25dp" />
<solid android:color="@android:color/transparent" />
<stroke
android:color="@color/text_tertiary"
android:width="1dp" />
</shape>
</item>
</layer-list>

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<size
android:height="24dp"
@ -8,3 +9,19 @@
<solid android:color="#FF000000" />
</shape>
</item>
<item>
<shape android:shape="oval">
<size
android:height="25dp"
android:width="25dp" />
<solid android:color="@android:color/transparent" />
<stroke
android:color="@color/text_tertiary"
android:width="1dp" />
</shape>
</item>
</layer-list>

@ -51,17 +51,6 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tomorrow_button" />
<com.google.android.material.button.MaterialButton
android:id="@+id/pick_date_button"
style="@style/DateTimeShortcuts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/shortcut_pick_date"
android:visibility="gone"
app:icon="@drawable/ic_outline_today_24px"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/next_week_button" />
<com.google.android.material.button.MaterialButton
android:id="@+id/no_date_button"
style="@style/DateTimeShortcuts"
@ -69,7 +58,7 @@
app:icon="@drawable/ic_outline_not_interested_24px"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/pick_date_button" />
app:layout_constraintTop_toBottomOf="@+id/next_week_button" />
</com.google.android.material.button.MaterialButtonToggleGroup>
<androidx.constraintlayout.widget.Guideline

@ -22,8 +22,7 @@
android:id="@+id/calendar_view"
android:layout_below="@id/shortcuts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="@integer/calendar_view_visible"/>
android:layout_height="wrap_content"/>
</RelativeLayout>

@ -561,7 +561,6 @@
<string name="chip_appearance_text_and_icon">Text und Symbol</string>
<string name="chip_appearance_text_only">Nur Text</string>
<string name="chip_appearance_icon_only">Nur Symbol</string>
<string name="shortcut_pick_date">Wählen Sie ein Datum</string>
<string name="shortcut_pick_time">Wählen Sie eine Uhrzeit</string>
<string name="no_time">Ohne Uhrzeit</string>
<string name="no_date">Kein Datum</string>

@ -566,7 +566,6 @@
<string name="chip_appearance_text_and_icon">Texto e ícono</string>
<string name="chip_appearance_text_only">Sólo texto</string>
<string name="chip_appearance_icon_only">Icono sólo</string>
<string name="shortcut_pick_date">Elija la fecha</string>
<string name="shortcut_pick_time">Elija la hora</string>
<string name="no_time">No hay tiempo</string>
<string name="no_date">No hay fecha</string>

@ -568,7 +568,6 @@
<string name="chip_appearance_text_and_icon">Testua eta ikonoa</string>
<string name="chip_appearance_text_only">Testua soilik</string>
<string name="chip_appearance_icon_only">Ikonoa soilik</string>
<string name="shortcut_pick_date">Hautatu data</string>
<string name="shortcut_pick_time">Hautatu ordua</string>
<string name="no_time">Ordurik ez</string>
<string name="no_date">Datarik ez</string>

@ -414,7 +414,6 @@
<string name="calendar_event_created">Kalenterimerkintä luotu %s varten</string>
<string name="auto_dismiss_datetime_summary">Päivämäärän ja kellonajan valitsimet sulkeutuvat itsestään valittuasi aika</string>
<string name="auto_dismiss_datetime">Sulje päivän ja ajan valitsin itsestään</string>
<string name="shortcut_pick_date">Aseta päivämäärä</string>
<string name="shortcut_pick_time">Aseta kellonaika</string>
<string name="no_time">Ei kellonaikaa</string>
<string name="no_date">Ei päivämäärää</string>

@ -561,7 +561,6 @@
<string name="chip_appearance_text_and_icon">Texte et icône</string>
<string name="chip_appearance_text_only">Texte seulement</string>
<string name="chip_appearance_icon_only">Icône seulement</string>
<string name="shortcut_pick_date">Choisissez la date</string>
<string name="shortcut_pick_time">Choisissez l\'heure</string>
<string name="no_time">Aucune heure</string>
<string name="no_date">Aucune date</string>

@ -564,7 +564,6 @@
<string name="chip_appearance_text_and_icon">Szöveg és ikon</string>
<string name="chip_appearance_text_only">Csak szöveg</string>
<string name="chip_appearance_icon_only">Csak ikon</string>
<string name="shortcut_pick_date">Dátum kiválasztása</string>
<string name="shortcut_pick_time">Időpont kiválasztása</string>
<string name="no_time">Időpont nélkül</string>
<string name="no_date">Dátum nélkül</string>

@ -488,7 +488,6 @@
<string name="calendar_event_created">Creato evento nel calendario per %s</string>
<string name="auto_dismiss_datetime_summary">Chiudi selezionatore data e ora dopo averne selezionato una</string>
<string name="auto_dismiss_datetime">Chiudi automaticamente selezionatore data e ora</string>
<string name="shortcut_pick_date">Scegli una data</string>
<string name="shortcut_pick_time">Scegli un\'ora</string>
<string name="no_time">Senza ora</string>
<string name="no_date">Senza data</string>

@ -528,7 +528,6 @@
<string name="select_all">모두 선택</string>
<string name="no_time">마감시간 없음</string>
<string name="no_date">마감일 없음</string>
<string name="shortcut_pick_date">날짜 선택</string>
<string name="shortcut_pick_time">시간 선택</string>
<string name="chip_appearance_icon_only">아이콘만</string>
<string name="chip_appearance_text_only">글자만</string>

@ -556,7 +556,6 @@
<string name="custom_filter_or">ELLER</string>
<string name="custom_filter_and">OG</string>
<string name="auto_dismiss_datetime_widget">Miniprogram</string>
<string name="shortcut_pick_date">Velg dato</string>
<string name="shortcut_pick_time">Velg tidspunkt</string>
<string name="no_time">Ingen tid</string>
<string name="no_date">Ingen dato</string>

@ -561,7 +561,6 @@
<string name="chip_appearance_text_and_icon">Tekst en icon</string>
<string name="chip_appearance_text_only">Alleen tekst</string>
<string name="chip_appearance_icon_only">Alleen icon</string>
<string name="shortcut_pick_date">Kies een datum</string>
<string name="shortcut_pick_time">Kies een tijd</string>
<string name="no_time">Geen tijd</string>
<string name="no_date">Geen datum</string>

@ -567,7 +567,6 @@
<string name="desaturate_colors">Desaturuj kolory</string>
<string name="desaturate_colors_summary_on">Kolory będą desaturowane w ciemnych motywach</string>
<string name="desaturate_colors_summary_off">Kolory nie będą desaturowane w ciemnych motywach</string>
<string name="shortcut_pick_date">Wybierz datę</string>
<string name="shortcut_pick_time">Wybierz czas</string>
<string name="no_time">Brak czasu</string>
<string name="no_date">Brak daty</string>

@ -573,7 +573,6 @@
<string name="desaturate_colors">Уменьшить насыщенность цветов</string>
<string name="desaturate_colors_summary_on">Цвета будут менее насыщенными в темных темах</string>
<string name="desaturate_colors_summary_off">Цвета не будут менее насыщенными в темных темах</string>
<string name="shortcut_pick_date">Выбрать дату</string>
<string name="shortcut_pick_time">Выбрать время</string>
<string name="no_time">Без времени</string>
<string name="no_date">Без даты</string>

@ -567,7 +567,6 @@
<string name="shortcut_pick_time">Zaman seç</string>
<string name="no_time">Zaman yok</string>
<string name="calendar_event_created">%s için takvim olayı oluşturuldu</string>
<string name="shortcut_pick_date">Tarih seç</string>
<string name="no_date">Tarih yok</string>
<string name="chip_appearance_icon_only">Yalnızca simge</string>
<string name="chip_appearance_text_only">Yalnızca metin</string>

@ -559,7 +559,6 @@
<string name="calendar_event_created">В календарі створено подію для %s</string>
<string name="auto_dismiss_datetime_summary">Закривати вибір дати та часу після встановлення дати чи часу</string>
<string name="auto_dismiss_datetime">Автоматично закривати вибір дати та часу</string>
<string name="shortcut_pick_date">Оберіть дату</string>
<string name="shortcut_pick_time">Оберіть час</string>
<string name="no_time">Без часу</string>
<string name="no_date">Без дати</string>

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="calendar_view_visible">0</integer> <!-- View.VISIBLE -->
</resources>

@ -555,7 +555,6 @@
<string name="add_place">添加地点</string>
<string name="auto_dismiss_datetime_summary">在选择一个日期或时间后关闭日期时间选择器</string>
<string name="auto_dismiss_datetime">自动关闭日期时间选择器</string>
<string name="shortcut_pick_date">挑选日期</string>
<string name="shortcut_pick_time">挑选时间</string>
<string name="no_time">无时间</string>
<string name="no_date">无日期</string>

@ -7,5 +7,4 @@
<integer name="default_afternoon">46800000</integer> <!-- 13:00 -->
<integer name="default_evening">61200000</integer> <!-- 17:00 -->
<integer name="default_night">72000000</integer> <!-- 20:00 -->
<integer name="calendar_view_visible">2</integer> <!-- View.GONE -->
</resources>

@ -586,7 +586,6 @@ File %1$s contained %2$s.\n\n
<string name="no_date">No date</string>
<string name="no_time">No time</string>
<string name="shortcut_pick_time">Pick time</string>
<string name="shortcut_pick_date">Pick date</string>
<string name="auto_dismiss_datetime">Autoclose date time picker</string>
<string name="auto_dismiss_datetime_list">Task list</string>
<string name="auto_dismiss_datetime_list_summary">Autoclose when picking from task list</string>

@ -1,7 +1,7 @@
object Versions {
const val kotlin = "1.3.71"
const val targetSdk = 29
const val minSdk = 21
const val minSdk = 23
const val dagger = "2.27"
const val butterknife = "10.2.1"
const val work = "2.3.4"

Loading…
Cancel
Save