diff --git a/app/build.gradle b/app/build.gradle index 329b864..8127ba7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,7 +15,7 @@ android { } buildTypes { release { - minifyEnabled false + minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' applicationVariants.all { variant -> variant.outputs.all { diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index bd4c025..d96fc9c 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -19,9 +19,53 @@ # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile --keepattributes Signature --keepattributes Annotation --keep class de.galgtonold.jollydayandroid.* --keep interface de.galgtonold.jollydayandroid.* --dontwarn okhttp3. --dontwarn okio.** \ No newline at end of file + +# Requred by Jollyday library to prevent warnings (as mentioned on Jollyday website) +-keepattributes EnclosingMethod +-keepattributes InnerClasses + +# Requred by Jollyday library for APK minify +-keep class de.galgtonold.jollydayandroid.impl.XMLManager.** { *; } +-keep interface de.galgtonold.jollydayandroid.impl.XMLManager.** { *; } + +-keep class de.galgtonold.jollydayandroid.impl.** { *; } +-keep interface de.galgtonold.jollydayandroid.impl.** { *; } + +-keep class de.galgtonold.jollydayandroid.** { *; } +-keep interface de.galgtonold.jollydayandroid.** { *; } + + +-keep class de.galgtonold.jollydayandroid.util.XMLUtil.** { *; } +-keep interface de.galgtonold.jollydayandroid.util.XMLUtil.** { *; } + +-keep class de.galgtonold.jollydayandroid.util.** { *; } +-keep interface de.galgtonold.jollydayandroid.util.** { *; } + + +-keep class javax.xml.stream.** { *; } +-keep interface javax.xml.stream.** { *; } + +-keep class javax.xml.stream.events.** { *; } +-keep interface javax.xml.stream.events.** { *; } + + +-keep class org.simpleframework.xml.** { *; } +-keep interface org.simpleframework.xml.** { *; } + +-keep class org.simpleframework.xml.core.** { *; } +-keep interface org.simpleframework.xml.core.** { *; } + +-keep class org.simpleframework.xml.stream.** { *; } +-keep interface org.simpleframework.xml.stream.** { *; } + + +-keep class cz.jaro.alarmmorning.** { *; } + +# Remove log messages +-assumenosideeffects class android.util.Log { + public static *** v(...); + public static *** d(...); +} +# public static *** i(...); +# public static *** w(...); +# public static *** e(...); \ No newline at end of file diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json index 09bc65e..cc56bf3 100644 --- a/app/release/output-metadata.json +++ b/app/release/output-metadata.json @@ -10,9 +10,9 @@ { "type": "SINGLE", "filters": [], - "versionCode": 69, + "versionCode": 76, "versionName": "2.0.0", - "outputFile": "ridebus_v2.0.0-69.apk" + "outputFile": "ridebus_v2.0.0-76.apk" } ] } \ No newline at end of file diff --git a/app/src/main/java/org/xtimms/trackbus/activity/BookmarksActivity.java b/app/src/main/java/org/xtimms/trackbus/activity/BookmarksActivity.java index 76aace9..8b1490e 100644 --- a/app/src/main/java/org/xtimms/trackbus/activity/BookmarksActivity.java +++ b/app/src/main/java/org/xtimms/trackbus/activity/BookmarksActivity.java @@ -5,6 +5,8 @@ import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; +import android.view.View; +import android.widget.ProgressBar; import androidx.appcompat.widget.SearchView; import androidx.appcompat.widget.Toolbar; @@ -23,10 +25,8 @@ public class BookmarksActivity extends AppBaseActivity implements BookmarksActiv public final static String REQUEST_RESULT = "request_result"; private BookmarksSearchAdapter mBookmarksSearchAdapter; private RecyclerView mRecyclerView; - -// { -// new DatabaseObjectsListAsyncTask(this).execute(); -// } + private boolean mAdapterIsSet = false; + private ProgressBar mProgressBar; public static Intent newIntent(Context context) { return new Intent(context, BookmarksActivity.class); @@ -34,16 +34,21 @@ public static Intent newIntent(Context context) { @Override public void setAdapter(ArrayList databaseObjects) { - mBookmarksSearchAdapter = new BookmarksSearchAdapter(databaseObjects); - mRecyclerView.setAdapter(mBookmarksSearchAdapter); - mBookmarksSearchAdapter.setOnItemClickListener((parent, v, position, id) -> { - Intent intent = new Intent(); - Bundle bundleData = new Bundle(); - bundleData.putSerializable(REQUEST_RESULT, mBookmarksSearchAdapter.getStopsListFiltered().get(position)); - intent.putExtras(bundleData); - setResult(RESULT_OK, intent); - finish(); - }); + if (!mAdapterIsSet) { + mProgressBar.setVisibility(View.GONE); + mBookmarksSearchAdapter = new BookmarksSearchAdapter(databaseObjects); + mRecyclerView.setAdapter(mBookmarksSearchAdapter); + mBookmarksSearchAdapter.setOnItemClickListener((parent, v, position, id) -> { + Intent intent = new Intent(); + Bundle bundleData = new Bundle(); + bundleData.putSerializable(REQUEST_RESULT, mBookmarksSearchAdapter.getStopsListFiltered().get(position)); + intent.putExtras(bundleData); + setResult(RESULT_OK, intent); + finish(); + }); + } else { + mBookmarksSearchAdapter.dataChange(databaseObjects); + } } @Override @@ -58,6 +63,9 @@ protected void onCreate(Bundle savedInstanceState) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } + mProgressBar = findViewById(R.id.progress); + mProgressBar.setVisibility(View.VISIBLE); + mRecyclerView = findViewById(R.id.recyclerview_bookmarks_activity); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); BookmarksActivityPresenter presenter = new BookmarksActivityPresenter(this); diff --git a/app/src/main/java/org/xtimms/trackbus/activity/MainActivity.java b/app/src/main/java/org/xtimms/trackbus/activity/MainActivity.java index 1ed0dbd..622d088 100644 --- a/app/src/main/java/org/xtimms/trackbus/activity/MainActivity.java +++ b/app/src/main/java/org/xtimms/trackbus/activity/MainActivity.java @@ -18,7 +18,6 @@ import org.xtimms.trackbus.fragment.AppBaseFragment; import org.xtimms.trackbus.fragment.RateItDialogFragment; import org.xtimms.trackbus.R; -import org.xtimms.trackbus.activity.settings.SettingsHeadersActivity; import org.xtimms.trackbus.fragment.BookmarkFragment; import org.xtimms.trackbus.fragment.StopFragment; import org.xtimms.trackbus.fragment.TabRouteFragment; @@ -71,10 +70,10 @@ private void initOnHolidayDialog() { for (Holiday holiday : holidays) { if (holiday.getDate().equals(LocalDate.now())) { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this, style.Theme_AlertDialog); - builder.setTitle("Кажется сегодня праздничный день!") - .setMessage("Возможно, транспорт ходит с изменениями в маршруте или по расписанию выходного дня. За подробной информацией обратитесь в автопарк.") + builder.setTitle(getString(string.holiday_title)) + .setMessage(string.holiday_summary) .setCancelable(false) - .setNegativeButton("Понятно", + .setNegativeButton(android.R.string.ok, (dialog, id) -> dialog.cancel()); AlertDialog alert = builder.create(); alert.show(); diff --git a/app/src/main/java/org/xtimms/trackbus/activity/StopsActivity.java b/app/src/main/java/org/xtimms/trackbus/activity/StopsActivity.java index 87c0343..2370397 100644 --- a/app/src/main/java/org/xtimms/trackbus/activity/StopsActivity.java +++ b/app/src/main/java/org/xtimms/trackbus/activity/StopsActivity.java @@ -91,62 +91,6 @@ protected void onCreate(Bundle savedInstanceState) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } - /*TextView textTitle = findViewById(R.id.text_title_stopactivity); - textTitle.setText(mStop.getStopTitle()); - TextView subtitle = findViewById(R.id.subtitle_stopactivity); - subtitle.setText(mStop.getMark());*/ - -// mTimeText.setOnClickListener(v -> { -// Calendar mcurrentTime = Calendar.getInstance(); -// int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY); -// int minute = mcurrentTime.get(Calendar.MINUTE); -// TimePickerDialog mTimePicker; -// mTimePicker = new TimePickerDialog(StopsActivity.this, (timePicker, selectedHour, selectedMinute) -> { -// String newHourses = (selectedHour < 10) ? "0" + selectedHour : String.valueOf(selectedHour); -// String newMinutes = (selectedMinute < 10) ? "0" + selectedMinute : String.valueOf(selectedMinute); -// String newTime = newHourses + ":" + newMinutes; -// mTimeText.setText(newTime); -// dateTimeChange(); -// }, hour, minute, true);//Yes 24 hour time -// mTimePicker.setTitle(getString(R.string.time_picker_title)); -// mTimePicker.show(); -// -// }); -// -// mTimeText.addTextChangedListener(new TextWatcher() { -// @Override -// public void beforeTextChanged(CharSequence s, int start, int count, int after) { -// -// } -// -// @Override -// public void onTextChanged(CharSequence s, int start, int before, int count) { -// dateTimeChange(); -// } -// -// @Override -// public void afterTextChanged(Editable s) { -// -// } -// }); - - //mWeekDay.setOnClickListener(v -> { - // Calendar mcurrentDate = Calendar.getInstance(); - // int year = mcurrentDate.get(Calendar.YEAR); - // int month = mcurrentDate.get(Calendar.MONTH); - // int day = mcurrentDate.get(Calendar.DAY_OF_MONTH); - - // DatePickerDialog datePickerDialog = new DatePickerDialog(StopsActivity.this, (view, year1, monthOfYear, dayOfMonth) -> { - // Calendar newDate = Calendar.getInstance(); - // newDate.set(year1, monthOfYear, dayOfMonth); - // SimpleDateFormat sdf = new SimpleDateFormat("EEEE", Locale.getDefault()); - // //SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy", Locale.getDefault()); - // mWeekDay.setText(sdf.format(newDate.getTime())); - // dateTimeChange(); - // }, year, month, day); - // datePickerDialog.show(); - //}); - } @Override diff --git a/app/src/main/java/org/xtimms/trackbus/activity/settings/SettingsActivity.java b/app/src/main/java/org/xtimms/trackbus/activity/settings/SettingsActivity.java index 3abc214..6be7620 100644 --- a/app/src/main/java/org/xtimms/trackbus/activity/settings/SettingsActivity.java +++ b/app/src/main/java/org/xtimms/trackbus/activity/settings/SettingsActivity.java @@ -88,18 +88,18 @@ public boolean onPreferenceClick(Preference preference) { return true; } if ("checkdb".equals(preference.getKey())) { - if (!AppUtils.isValidSQLite("/data/data/org.xtimms.trackbus/databases/trackbus.db")) { + if (!AppUtils.isValidSQLite(getDatabasePath("trackbus.db").getAbsolutePath())) { new AlertDialog.Builder(this, R.style.Theme_AlertDialog) - .setTitle("Uh oh...") - .setMessage("База данных повреждена.") - .setPositiveButton("ОК", ((dialog, which) -> dialog.dismiss())) + .setTitle(getString(R.string.uh_oh)) + .setMessage(getString(R.string.database_corrupted)) + .setPositiveButton(android.R.string.ok, ((dialog, which) -> dialog.dismiss())) .show(); return false; } else { new AlertDialog.Builder(this, R.style.Theme_AlertDialog) - .setTitle("Отлично") - .setMessage("База данных прошла проверку целостности.") - .setPositiveButton("ОК", ((dialog, which) -> dialog.dismiss())) + .setTitle(getString(R.string.success)) + .setMessage(getString(R.string.db_integrity_check)) + .setPositiveButton(android.R.string.ok, ((dialog, which) -> dialog.dismiss())) .show(); return true; } @@ -107,16 +107,16 @@ public boolean onPreferenceClick(Preference preference) { if ("checkserver".equals(preference.getKey())) { if (!AppUtils.isURLReachable(this)) { new AlertDialog.Builder(this, R.style.Theme_AlertDialog) - .setTitle("Uh oh...") - .setMessage("Соединение с сервером недоступно.") - .setPositiveButton("ОК", ((dialog, which) -> dialog.dismiss())) + .setTitle(getString(R.string.uh_oh)) + .setMessage(getString(R.string.server_unavailable)) + .setPositiveButton(android.R.string.ok, ((dialog, which) -> dialog.dismiss())) .show(); return false; } else { new AlertDialog.Builder(this, R.style.Theme_AlertDialog) - .setTitle("Отлично") - .setMessage("Успешно получен ответ от сервера.") - .setPositiveButton("ОК", ((dialog, which) -> dialog.dismiss())) + .setTitle(getString(R.string.success)) + .setMessage(getString(R.string.succeed_response)) + .setPositiveButton(android.R.string.ok, ((dialog, which) -> dialog.dismiss())) .show(); return true; } diff --git a/app/src/main/java/org/xtimms/trackbus/adapter/BookmarksSearchAdapter.java b/app/src/main/java/org/xtimms/trackbus/adapter/BookmarksSearchAdapter.java index 1a8f660..07aa02a 100644 --- a/app/src/main/java/org/xtimms/trackbus/adapter/BookmarksSearchAdapter.java +++ b/app/src/main/java/org/xtimms/trackbus/adapter/BookmarksSearchAdapter.java @@ -18,6 +18,7 @@ import org.xtimms.trackbus.model.DatabaseObject; import org.xtimms.trackbus.model.Route; import org.xtimms.trackbus.model.Stop; +import org.xtimms.trackbus.object.StopActivityObject; import org.xtimms.trackbus.util.ColorUtils; import org.xtimms.trackbus.util.TransportId; @@ -27,7 +28,7 @@ public class BookmarksSearchAdapter extends RecyclerView.Adapter implements Filterable { - private final ArrayList mDataset; + private ArrayList mDataset; private ArrayList mDatabaseObjectFiltered; private AdapterView.OnItemClickListener onItemClickListener; @@ -153,6 +154,11 @@ protected void publishResults(CharSequence charSequence, FilterResults filterRes }; } + public void dataChange(ArrayList databaseObjects) { + mDataset = databaseObjects; + notifyDataSetChanged(); + } + public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { private final BookmarksSearchAdapter adapter; diff --git a/app/src/main/java/org/xtimms/trackbus/fragment/StopFragment.java b/app/src/main/java/org/xtimms/trackbus/fragment/StopFragment.java index 2c46f19..3dd5d45 100644 --- a/app/src/main/java/org/xtimms/trackbus/fragment/StopFragment.java +++ b/app/src/main/java/org/xtimms/trackbus/fragment/StopFragment.java @@ -24,7 +24,6 @@ import org.xtimms.trackbus.model.Route; import org.xtimms.trackbus.model.Stop; import org.xtimms.trackbus.presenter.StopFragmentPresenter; -import org.xtimms.trackbus.ui.WrapContentLinearLayoutManager; import java.util.ArrayList; diff --git a/app/src/main/java/org/xtimms/trackbus/task/DatabaseUpdateCheckingTask.java b/app/src/main/java/org/xtimms/trackbus/task/DatabaseUpdateCheckingTask.java index 751d47e..45b2348 100644 --- a/app/src/main/java/org/xtimms/trackbus/task/DatabaseUpdateCheckingTask.java +++ b/app/src/main/java/org/xtimms/trackbus/task/DatabaseUpdateCheckingTask.java @@ -111,8 +111,8 @@ protected void onPreExecute() { NotificationChannel updatedNotificationChannel = new NotificationChannel(UPDATED_NOTIFICATION_CHANNEL_ID, mContext.getResources().getString(R.string.database_updated_successfully), NotificationManager.IMPORTANCE_LOW); // Configure the notification channel. - updatingNotificationChannel.setDescription("Уведомление, сообщающее об обновлении расписания, если есть новая версия на сервере."); - updatedNotificationChannel.setDescription("Уведомление, сообщающее об успешном обновлении расписания."); + updatingNotificationChannel.setDescription(mContext.getResources().getString(R.string.notification_updating_description)); + updatedNotificationChannel.setDescription(mContext.getResources().getString(R.string.notification_updated_description)); mNotifyManager.createNotificationChannel(updatingNotificationChannel); mNotifyManager.createNotificationChannel(updatedNotificationChannel); diff --git a/app/src/main/res/layout-sw600dp/item_favorite.xml b/app/src/main/res/layout-sw600dp/item_favorite.xml index 6a01078..c60cb42 100644 --- a/app/src/main/res/layout-sw600dp/item_favorite.xml +++ b/app/src/main/res/layout-sw600dp/item_favorite.xml @@ -29,13 +29,12 @@ android:ellipsize="end" android:gravity="center" android:maxLines="2" - android:text="Нажмите для добавления в закладки" + android:text="@string/click_to_add_bookmark" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/circle" app:layout_constraintTop_toTopOf="@+id/linearLayout2" - tools:ignore="HardcodedText" - tools:text="@tools:sample/lorem/random" /> + tools:ignore="HardcodedText" /> + android:textAppearance="?attr/textAppearanceSubtitle1" /> + android:textColor="@color/mtrl_list_item_tint_secondary" /> diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index 7f51393..adda832 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -33,8 +33,6 @@ - - diff --git a/app/src/main/res/layout/content_bookmarks.xml b/app/src/main/res/layout/content_bookmarks.xml index 3a1ad14..48665f2 100644 --- a/app/src/main/res/layout/content_bookmarks.xml +++ b/app/src/main/res/layout/content_bookmarks.xml @@ -16,4 +16,14 @@ android:scrollbars="vertical" tools:listitem="@layout/item_bookmarks_search"/> + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_favorite.xml b/app/src/main/res/layout/item_favorite.xml index 9c27753..cb1c778 100644 --- a/app/src/main/res/layout/item_favorite.xml +++ b/app/src/main/res/layout/item_favorite.xml @@ -29,13 +29,12 @@ android:ellipsize="end" android:gravity="center" android:maxLines="2" - android:text="Нажмите для добавления в закладки" + android:text="@string/click_to_add_bookmark" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/circle" app:layout_constraintTop_toTopOf="@+id/linearLayout2" - tools:ignore="HardcodedText" - tools:text="@tools:sample/lorem/random" /> + tools:ignore="HardcodedText" /> + android:textAppearance="?attr/textAppearanceSubtitle1" /> + android:textColor="@color/mtrl_list_item_tint_secondary" /> diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 9df85f8..5e9425c 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -64,4 +64,15 @@ Праверка на выпадак, калі праграма нестабільна пры загрузцы базы дадзеных з дыска. Калі прыкладанне не можа абнавіць расклад з сервера. Прагледзець логі + Здаецца, сёння свята! + Магчыма, што транспарт ходзіць са зменамі ў маршруце або па раскладзе выхадных дзён. Для атрымання дадатковай інфармацыі, калі ласка, звяжыцеся з аўтобусным паркам. + О-о-о… + База дадзеных пашкоджана. + Поспех + База дадзеных прайшла праверку цэласнасці. + Падлучэнне да сервера недаступна. + Паспяхова атрыманы адказ ад сервера. + Апавяшчэнне, якое апавяшчае вас аб абнаўленні раскладу, калі на сэрвэры з\'явілася новая версія. + Апавяшчэнне аб паспяховым абнаўленні раскладу. + Націсніце, каб дадаць у закладкі \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index e3d0264..ff031b9 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -64,4 +64,15 @@ Проверка на случай, если приложение нестабильно при загрузке базы данных с диска. Если приложение не может обновить расписание с сервера. Просмотреть логи + Кажется, сегодня праздник! + Возможно, что транспорт ходит с изменениями в маршруте или по расписанию выходных дней. Для получения дополнительной информации, пожалуйста, свяжитесь с автобусным парком. + О-о-о… + База данных повреждена. + Успех + База данных прошла проверку целостности. + Подключение к серверу недоступно. + Успешно получен ответ от сервера. + Уведомление, уведомляющее вас об обновлении расписания, если на сервере появилась новая версия. + Уведомление об успешном обновлении расписания. + Нажмите, чтобы добавить в закладки \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7ec0faa..c841928 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -64,6 +64,17 @@ Check in case the application is unstable when loading the database from disk. If the application cannot update the schedule from the server. View log + It seems today is a holiday! + It is possible that the transport runs with changes in the route or according to the weekend schedule. For more information, please contact the bus fleet. + Uh oh… + The database is corrupted. + Success + The database passed the integrity check. + Connection to the server is unavailable. + Successfully received a response from the server. + A notification notifying you of the schedule update if there is a new version on the server. + A notification notifying you of a successful schedule update. + Click to add to bookmarks