From 297fc532e7867cd4bfb86afc2cd84ec7bed82999 Mon Sep 17 00:00:00 2001 From: Evgeny Timofeev Date: Sat, 4 Nov 2017 22:01:53 +0300 Subject: [PATCH] Fixed RecoverHelper, backup works from Downloads, external and internal storage. Made list view elements 2 lines. --- .../birdays/activities/SettingsActivity.java | 4 +- .../adapters/MonthFragmentAdapter.java | 7 ++- .../djonique/birdays/backup/ExportHelper.java | 2 + .../birdays/backup/RecoverHelper.java | 60 ++++++++++++++++++- .../dialogs/NewPersonDialogFragment.java | 2 +- app/src/main/res/layout/activity_detail.xml | 2 +- .../layout/description_famous_list_view.xml | 2 +- .../main/res/layout/description_list_view.xml | 2 +- app/src/main/res/values-be/strings.xml | 6 +- app/src/main/res/values-de/strings.xml | 4 +- app/src/main/res/values-en/strings.xml | 6 +- app/src/main/res/values-es/strings.xml | 6 +- app/src/main/res/values-kk/strings.xml | 6 +- app/src/main/res/values-ru/strings.xml | 6 +- app/src/main/res/values-sw600dp/dimens.xml | 1 - app/src/main/res/values-uk/strings.xml | 6 +- app/src/main/res/values/dimens.xml | 1 - app/src/main/res/values/strings.xml | 6 +- app/src/main/res/values/styles.xml | 4 +- 19 files changed, 96 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/com/djonique/birdays/activities/SettingsActivity.java b/app/src/main/java/com/djonique/birdays/activities/SettingsActivity.java index cf38b0f..03b5275 100644 --- a/app/src/main/java/com/djonique/birdays/activities/SettingsActivity.java +++ b/app/src/main/java/com/djonique/birdays/activities/SettingsActivity.java @@ -170,7 +170,7 @@ public void onRequestPermissionsResult(int requestCode, public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == FILE_MANAGER && resultCode == RESULT_OK) { - new RecoverHelper(this).recoverRecords(data.getData().getPath()); + new RecoverHelper(this).recoverRecords(this, data.getData()); } } @@ -405,7 +405,7 @@ public boolean onPreferenceClick(Preference preference) { public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == FILE_MANAGER && resultCode == RESULT_OK) { - new RecoverHelper(getActivity()).recoverRecords(data.getData().getPath()); + new RecoverHelper(getActivity()).recoverRecords(getActivity(), data.getData()); } } diff --git a/app/src/main/java/com/djonique/birdays/adapters/MonthFragmentAdapter.java b/app/src/main/java/com/djonique/birdays/adapters/MonthFragmentAdapter.java index fa30706..a3d8137 100644 --- a/app/src/main/java/com/djonique/birdays/adapters/MonthFragmentAdapter.java +++ b/app/src/main/java/com/djonique/birdays/adapters/MonthFragmentAdapter.java @@ -23,6 +23,7 @@ import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceManager; +import android.support.v4.content.ContextCompat; import android.support.v7.widget.CardView; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; @@ -217,14 +218,14 @@ private void changeCardViewBackgroundColor(long date, CardView cardView, TextVie boolean today = daysLeft.equals(context.getString(R.string.today)); if (Utils.isBirthdayPassed(date)) { textView.setVisibility(View.GONE); - cardView.setCardBackgroundColor(context.getResources().getColor(R.color.cardview_background)); + cardView.setCardBackgroundColor(ContextCompat.getColor(context, R.color.cardview_background)); } else { textView.setVisibility(View.VISIBLE); if (today) { - cardView.setCardBackgroundColor(context.getResources().getColor(R.color.cardview_birthday)); + cardView.setCardBackgroundColor(ContextCompat.getColor(context, R.color.cardview_birthday)); textView.setText(context.getString(R.string.today)); } else { - cardView.setCardBackgroundColor(context.getResources().getColor(R.color.cardview_background)); + cardView.setCardBackgroundColor(ContextCompat.getColor(context, R.color.cardview_background)); String summary = context.getString(R.string.days_left) + ": " + daysLeft; textView.setText(summary); } diff --git a/app/src/main/java/com/djonique/birdays/backup/ExportHelper.java b/app/src/main/java/com/djonique/birdays/backup/ExportHelper.java index 97adc60..e3a04e4 100644 --- a/app/src/main/java/com/djonique/birdays/backup/ExportHelper.java +++ b/app/src/main/java/com/djonique/birdays/backup/ExportHelper.java @@ -44,6 +44,7 @@ public class ExportHelper { + // XML constants private static final String RECORDS = "records"; private static final String PERSON = "person"; private static final String NAME = "name"; @@ -54,6 +55,7 @@ public class ExportHelper { private static final String BACKUP = "backup"; private static final String UTF_8 = "UTF-8"; + // Exceptions constants private static final String ILLEGAL_ARGUMENT_EXCEPTION = "IllegalArgumentException"; private static final String ILLEGAL_STATE_EXCEPTION = "IllegalStateException"; private static final String IO_EXCEPTION = "IOException"; diff --git a/app/src/main/java/com/djonique/birdays/backup/RecoverHelper.java b/app/src/main/java/com/djonique/birdays/backup/RecoverHelper.java index a183cdd..3a74691 100644 --- a/app/src/main/java/com/djonique/birdays/backup/RecoverHelper.java +++ b/app/src/main/java/com/djonique/birdays/backup/RecoverHelper.java @@ -16,7 +16,12 @@ package com.djonique.birdays.backup; +import android.content.ContentUris; import android.content.Context; +import android.database.Cursor; +import android.net.Uri; +import android.os.Environment; +import android.provider.DocumentsContract; import android.widget.Toast; import com.djonique.birdays.R; @@ -38,6 +43,7 @@ public class RecoverHelper { + // XML constants private static final String PERSON = "person"; private static final String NAME = "name"; private static final String DATE = "date"; @@ -45,17 +51,27 @@ public class RecoverHelper { private static final String PHONE_NUMBER = "phone_number"; private static final String EMAIL = "email"; + // Exceptions constants private static final String XML_PULL_PARSER_EXCEPTION = "XmlPullParserException"; private static final String FILE_NOT_FOUND_EXCEPTION = "FileNotFoundException"; private static final String IO_EXCEPTION = "IOException"; + // Path constants + private static final String PRIMARY = "primary"; + private static final String CONTENT_DOWNLOADS = "content://downloads/public_downloads"; + private static final String AUTHORITY_EXTERNAL_STORAGE = "com.android.externalstorage.documents"; + private static final String AUTHORITY_DOWNLOADS = "com.android.providers.downloads.documents"; + private static final String COLUMN_DATA = "_data"; + private Context context; public RecoverHelper(Context context) { this.context = context; } - public void recoverRecords(String path) { + public void recoverRecords(Context context, Uri uri) { + String path = getPath(context, uri); + if (path == null) path = uri.getPath(); XmlPullParserFactory pullParserFactory; try { pullParserFactory = XmlPullParserFactory.newInstance(); @@ -129,4 +145,46 @@ private void parseXml(XmlPullParser parser) { Toast.makeText(context, IO_EXCEPTION, Toast.LENGTH_LONG).show(); } } + + private String getPath(Context context, Uri uri) { + if (isExternalStorageDocument(uri)) { + String docId = DocumentsContract.getDocumentId(uri); + String[] split = docId.split(":"); + String type = split[0]; + + if (PRIMARY.equalsIgnoreCase(type)) { + return Environment.getExternalStorageDirectory() + "/" + split[1]; + } + } else if (isDownloadsDocument(uri)) { + String id = DocumentsContract.getDocumentId(uri); + Uri contentUri = ContentUris.withAppendedId(Uri.parse(CONTENT_DOWNLOADS), Long.valueOf(id)); + return getDataColumn(context, contentUri); + } + return null; + } + + private boolean isExternalStorageDocument(Uri uri) { + return uri.getAuthority().equals(AUTHORITY_EXTERNAL_STORAGE); + } + + private boolean isDownloadsDocument(Uri uri) { + return uri.getAuthority().equals(AUTHORITY_DOWNLOADS); + } + + private String getDataColumn(Context context, Uri uri) { + Cursor cursor = null; + String column = COLUMN_DATA; + String[] projection = {column}; + try { + cursor = context.getContentResolver().query(uri, projection, null, null, null); + if (cursor != null && cursor.moveToFirst()) { + int index = cursor.getColumnIndexOrThrow(column); + return cursor.getString(index); + } + } finally { + if (cursor != null) + cursor.close(); + } + return null; + } } \ No newline at end of file diff --git a/app/src/main/java/com/djonique/birdays/dialogs/NewPersonDialogFragment.java b/app/src/main/java/com/djonique/birdays/dialogs/NewPersonDialogFragment.java index 4552de4..22f5f61 100644 --- a/app/src/main/java/com/djonique/birdays/dialogs/NewPersonDialogFragment.java +++ b/app/src/main/java/com/djonique/birdays/dialogs/NewPersonDialogFragment.java @@ -84,7 +84,7 @@ public void onAttach(Activity activity) { public Dialog onCreateDialog(Bundle savedInstanceState) { final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - builder.setTitle(R.string.add_new_record); + builder.setTitle(R.string.new_record); calendar = Calendar.getInstance(); final Person person = new Person(); diff --git a/app/src/main/res/layout/activity_detail.xml b/app/src/main/res/layout/activity_detail.xml index 42cb823..82f02cc 100644 --- a/app/src/main/res/layout/activity_detail.xml +++ b/app/src/main/res/layout/activity_detail.xml @@ -94,7 +94,7 @@ + android:text="@string/birthday" /> diff --git a/app/src/main/res/layout/description_famous_list_view.xml b/app/src/main/res/layout/description_famous_list_view.xml index aba4531..0f75079 100644 --- a/app/src/main/res/layout/description_famous_list_view.xml +++ b/app/src/main/res/layout/description_famous_list_view.xml @@ -23,7 +23,7 @@ + android:maxLines="2" /> + android:maxLines="2" /> Удалить - Новая запись + Новая запись Добавить из контактов Это действие выполнить невозможно из-за особенностей устройства Имя @@ -68,7 +68,7 @@ Запись добавлена - День рождения + День рождения Дней осталось Сегодня Дней с момента рождения @@ -145,7 +145,7 @@ Экспортирование… Резервное копирование завершено, XML-файл находится в\u0020 Восстановить записи (Beta) - Выберите XML-файл с резервной копией во внешнем хранилище + Выберите XML-файл с резервной копией Невозможно выполнить действие, пожалуйста, установите диспетчер файлов Записи восстановлены diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index a3f64bf..968873f 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -55,7 +55,7 @@ Löschen - Neuer Eintrag + Neuer Eintrag Aus Kontakten hinzufügen Aktion kann wegen Geräteeigenschaften nicht ausgeführt werden Name @@ -68,7 +68,7 @@ Eintrag hinzugefügt - Geburtstag + Geburtstag Tage bis zum nächsten Geburtstag Heute Tage seit der Geburt diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index a2f1418..8dbb227 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -55,7 +55,7 @@ Delete - New record + New record Add from contacts Unable to perform action due to device features Name @@ -68,7 +68,7 @@ Record added - Birthday + Birthday Days until next birthday Today Days since birth @@ -145,7 +145,7 @@ Exporting records… Backup finished, XML file in the\u0020 Recover records (Beta) - Choose the XML file with backup in external storage + Choose the XML file with backup Unable to perform action, please install file manager Records recovered diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 428070f..b86bcaa 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -55,7 +55,7 @@ Eliminar - Nueva entrada + Nueva entrada Añadir desde contactos Es imposible realizar esta acción en este dispositivo Nombre @@ -68,7 +68,7 @@ Entrada añadida - Cumpleaños + Cumpleaños Días hasta el próximo cumpleaños Hoy Días desde su nacimiento @@ -145,7 +145,7 @@ Exporting records… Backup finished, XML file in the\u0020 Recover records (Beta) - Choose the XML file with backup in external storage + Choose the XML file with backup Unable to perform action, please install file manager Records recovered diff --git a/app/src/main/res/values-kk/strings.xml b/app/src/main/res/values-kk/strings.xml index 058b43c..51ed3be 100644 --- a/app/src/main/res/values-kk/strings.xml +++ b/app/src/main/res/values-kk/strings.xml @@ -55,7 +55,7 @@ Удалить - Новая запись + Новая запись Добавить из контактов Это действие выполнить невозможно из-за особенностей устройства Имя @@ -68,7 +68,7 @@ Запись добавлена - День рождения + День рождения Дней осталось Сегодня Дней с момента рождения @@ -145,7 +145,7 @@ Экспортирование… Резервное копирование завершено, XML-файл находится в\u0020 Восстановить записи (Beta) - Выберите XML-файл с резервной копией во внешнем хранилище + Выберите XML-файл с резервной копией Невозможно выполнить действие, пожалуйста, установите диспетчер файлов Записи восстановлены diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 058b43c..51ed3be 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -55,7 +55,7 @@ Удалить - Новая запись + Новая запись Добавить из контактов Это действие выполнить невозможно из-за особенностей устройства Имя @@ -68,7 +68,7 @@ Запись добавлена - День рождения + День рождения Дней осталось Сегодня Дней с момента рождения @@ -145,7 +145,7 @@ Экспортирование… Резервное копирование завершено, XML-файл находится в\u0020 Восстановить записи (Beta) - Выберите XML-файл с резервной копией во внешнем хранилище + Выберите XML-файл с резервной копией Невозможно выполнить действие, пожалуйста, установите диспетчер файлов Записи восстановлены diff --git a/app/src/main/res/values-sw600dp/dimens.xml b/app/src/main/res/values-sw600dp/dimens.xml index 4b79eba..0d2d77e 100644 --- a/app/src/main/res/values-sw600dp/dimens.xml +++ b/app/src/main/res/values-sw600dp/dimens.xml @@ -19,7 +19,6 @@ 24sp - 96sp 72sp 96sp diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index b9401b5..0e4c784 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -55,7 +55,7 @@ Видалити - Новий запис + Новий запис Додати з контактів Цю дію неможливо виконати через особливості пристрою Ім\'я @@ -68,7 +68,7 @@ Запис доданий - День народження + День народження Днів лишилось Сьогодні Днів із моменту народження @@ -145,7 +145,7 @@ Експортування… Резервне копіювання завершене, XML-файл знаходиться в\u0020 Відновити записи (Beta) - Виберіть XML-файл із резервною копією в зовнішньому сховищі + Виберіть XML-файл із резервною копією Неможливо виконати дію, будь ласка, встановіть диспетчер файлів Записи відновлені diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index e5b0225..071d338 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -19,7 +19,6 @@ 16sp - 72sp 56sp 72sp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 582f3a6..3b52b42 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -57,7 +57,7 @@ Delete - New record + New record Add from contacts Unable to perform action due to device features Name @@ -72,7 +72,7 @@ Record added - Birthday + Birthday Days until next birthday Today Days since birth @@ -178,7 +178,7 @@ Exporting records… Backup finished, XML file in the\u0020 Recover records (Beta) - Choose the XML file with backup in external storage + Choose the XML file with backup Unable to perform action, please install file manager Records recovered diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index e867d7c..e249aef 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -102,13 +102,13 @@