Skip to content

Commit c476575

Browse files
committed
Merge branch 'release-2.5.3'
* release-2.5.3: (22 commits) Update versionCode and versionName for 2.5.3 release Update translations AlarmScheduler: fix crash when alarms are received outside the window FingerprintHelper: properly check for Android version PinLockActivity: make fingerprint helper start when activity is resumed ScheduleTimetableFragment: externalize stray hardcoded string MedicinesSearchActivity: show soft keyboard and focus search bar when opening Get rid of settings.properties files in favor of build config fields Add screenshots for the 2.5 version (english) added German metadata (play store description) ScheduleTimetableFragment: wrap context for DatePickers Add metadata folder with store descriptions. proguard: Add rules for JSoup Database prefs: Ask for external write permission before download. MedicinesSearch: refresh barcode button visibility on resume StockCalculatorTest: add another case Suppress unchecked cast warnings for attachView on base MVP classes Update instance state bundle key Add StatefulPresenter and StatefulBaseActivityView settings: move common MVP functionality to CalendulaPrefsFragment ...
2 parents 39e6e96 + b618231 commit c476575

File tree

55 files changed

+587
-302
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+587
-302
lines changed

Calendula/build.gradle

+4-3
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ apply plugin: 'kotlin-android'
2626
apply plugin: 'kotlin-android-extensions'
2727
apply plugin: 'kotlin-kapt'
2828
apply plugin: 'idea'
29-
29+
// build config fields
30+
apply from: 'config.gradle'
3031

3132

3233
repositories {
@@ -76,8 +77,8 @@ android {
7677
defaultConfig {
7778
minSdkVersion 16
7879
targetSdkVersion 25
79-
versionCode 33
80-
versionName "2.5.2"
80+
versionCode 34
81+
versionName "2.5.3"
8182
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
8283
applicationId "es.usc.citius.servando.calendula"
8384
multiDexEnabled true
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,9 @@
1616
* along with this software. If not, see <http://www.gnu.org/licenses/>.
1717
*/
1818

19-
package es.usc.citius.servando.calendula.util;
20-
21-
22-
public class SettingsPropertiesKeys {
23-
24-
public static final String DATABASE_LOCATION = "db.url";
25-
public static final String GENERATE_TEST_DATA = "test.generate.testdata";
26-
27-
private SettingsPropertiesKeys() {
19+
android {
20+
defaultConfig {
21+
buildConfigField 'String', 'DB_DOWNLOAD_URL', '"http://tec.citius.usc.es/calendula/dbs/"'
22+
buildConfigField 'boolean', 'TEST_GENERATE_TESTDATA', 'false'
2823
}
29-
}
24+
}

Calendula/proguard/proguard-jsoup.pro

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
-keeppackagenames org.jsoup.nodes

Calendula/src/androidTest/java/es/usc/citius/servando/calendula/activities/MedicinesActivityEditTest.java

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.junit.Before;
2626
import org.junit.Test;
2727

28+
import es.usc.citius.servando.calendula.BuildConfig;
2829
import es.usc.citius.servando.calendula.CalendulaApp;
2930
import es.usc.citius.servando.calendula.R;
3031
import es.usc.citius.servando.calendula.database.DB;

Calendula/src/main/AndroidManifest.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
2323
<uses-permission android:name="android.permission.VIBRATE"/>
24-
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
24+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2525
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
2626
<uses-permission android:name="android.permission.INTERNET"/>
2727
<uses-permission android:name="android.permission.WAKE_LOCK"/>
@@ -81,7 +81,7 @@
8181
android:name=".activities.MedicinesSearchActivity"
8282
android:label="@string/title_activity_medicines_search"
8383
android:screenOrientation="portrait"
84-
android:windowSoftInputMode="adjustPan"/>
84+
android:windowSoftInputMode="stateVisible"/>
8585
<activity
8686
android:name=".activities.ScheduleCreationActivity"
8787
android:label="@string/title_activity_schedules"

Calendula/src/main/assets/settings.properties

-20
This file was deleted.

Calendula/src/main/java/es/usc/citius/servando/calendula/activities/MedicinesSearchActivity.java

+10-5
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,12 @@ public void handleDbInstalled(PersistenceEvents.DatabaseInstalledEvent event) {
185185
LogUtil.d(TAG, "handleDbInstalled() called with: event = [" + event + "]");
186186
// enable barcode scan
187187

188+
refreshViews();
189+
190+
}
191+
192+
private void refreshViews() {
193+
// TODO: 23/02/18 the current DBVersionMgr should tell us if the DB can handle barcodes
188194
if (!PreferenceUtils.getString(PreferenceKeys.DRUGDB_CURRENT_DB, CalendulaApp.getContext().getString(R.string.database_none_id))
189195
.equals(CalendulaApp.getContext().getString(R.string.database_none_id))) {
190196
runOnUiThread(new Runnable() {
@@ -194,7 +200,6 @@ public void run() {
194200
}
195201
});
196202
}
197-
198203
}
199204

200205

@@ -268,6 +273,7 @@ public void afterTextChanged(Editable s) {
268273
final String search = getIntent().getStringExtra(EXTRA_SEARCH_TERM);
269274
if (search != null) {
270275
searchEditText.setText(search);
276+
searchEditText.setSelection(search.length());
271277
}
272278

273279
searchList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@@ -302,10 +308,8 @@ public boolean onTouch(View v, MotionEvent event) {
302308
if (!PreferenceUtils.getString(PreferenceKeys.DRUGDB_CURRENT_DB, CalendulaApp.getContext().getString(R.string.database_none_id))
303309
.equals(CalendulaApp.getContext().getString(R.string.database_none_id))) {
304310
enableBarcodeScan();
305-
} else {
306-
if (!PreferenceUtils.getBoolean(PreferenceKeys.MEDICINES_USE_PRESCRIPTIONS_SHOWN, false)) {
307-
askForDatabase();
308-
}
311+
} else if (!PreferenceUtils.getBoolean(PreferenceKeys.MEDICINES_USE_PRESCRIPTIONS_SHOWN, false)) {
312+
askForDatabase();
309313
}
310314

311315

@@ -379,6 +383,7 @@ protected void addCustomMed() {
379383
protected void onResume() {
380384
super.onResume();
381385
EventBus.getDefault().register(this);
386+
refreshViews();
382387
}
383388

384389
@Override

Calendula/src/main/java/es/usc/citius/servando/calendula/drugdb/download/DBVersionManager.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,13 @@
3333
import java.util.List;
3434
import java.util.Map;
3535

36+
import es.usc.citius.servando.calendula.BuildConfig;
3637
import es.usc.citius.servando.calendula.R;
3738
import es.usc.citius.servando.calendula.database.DatabaseHelper;
3839
import es.usc.citius.servando.calendula.util.HttpDownloadUtil;
3940
import es.usc.citius.servando.calendula.util.LogUtil;
4041
import es.usc.citius.servando.calendula.util.PreferenceKeys;
4142
import es.usc.citius.servando.calendula.util.PreferenceUtils;
42-
import es.usc.citius.servando.calendula.util.SettingsProperties;
43-
import es.usc.citius.servando.calendula.util.SettingsPropertiesKeys;
4443

4544

4645
public class DBVersionManager {
@@ -56,7 +55,7 @@ public class DBVersionManager {
5655
* @return the newest working version
5756
*/
5857
public static String getLastDBVersion(String databaseID) {
59-
final String downloadUrl = SettingsProperties.instance().get(SettingsPropertiesKeys.DATABASE_LOCATION);
58+
final String downloadUrl = BuildConfig.DB_DOWNLOAD_URL;
6059
final String url = downloadUrl + VERSION_FILE;
6160

6261
try {

Calendula/src/main/java/es/usc/citius/servando/calendula/drugdb/download/DownloadDatabaseHelper.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,14 @@
3535
import java.io.File;
3636
import java.net.URI;
3737

38+
import es.usc.citius.servando.calendula.BuildConfig;
3839
import es.usc.citius.servando.calendula.R;
3940
import es.usc.citius.servando.calendula.drugdb.DBRegistry;
4041
import es.usc.citius.servando.calendula.drugdb.PrescriptionDBMgr;
4142
import es.usc.citius.servando.calendula.util.LogUtil;
4243
import es.usc.citius.servando.calendula.util.NetworkUtils;
4344
import es.usc.citius.servando.calendula.util.PreferenceKeys;
4445
import es.usc.citius.servando.calendula.util.PreferenceUtils;
45-
import es.usc.citius.servando.calendula.util.SettingsProperties;
46-
import es.usc.citius.servando.calendula.util.SettingsPropertiesKeys;
4746

4847
public class DownloadDatabaseHelper {
4948

@@ -197,7 +196,7 @@ protected Boolean doInBackground(String... params) {
197196
final DownloadManager manager = (DownloadManager) ctx.getSystemService(Context.DOWNLOAD_SERVICE);
198197

199198

200-
final String downloadUrl = SettingsProperties.instance().get(SettingsPropertiesKeys.DATABASE_LOCATION);
199+
final String downloadUrl = BuildConfig.DB_DOWNLOAD_URL;
201200
final String dbName = mgr.id();
202201

203202
try {//get version

Calendula/src/main/java/es/usc/citius/servando/calendula/fragments/ScheduleTimetableFragment.java

+42-5
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,21 @@
2020

2121
import android.app.AlertDialog;
2222
import android.app.DatePickerDialog;
23+
import android.content.ContextWrapper;
2324
import android.content.DialogInterface;
25+
import android.content.res.Resources;
2426
import android.graphics.Color;
2527
import android.graphics.Typeface;
2628
import android.graphics.drawable.GradientDrawable;
2729
import android.graphics.drawable.StateListDrawable;
2830
import android.os.Bundle;
31+
import android.support.annotation.NonNull;
2932
import android.support.v4.app.Fragment;
3033
import android.support.v4.app.FragmentManager;
3134
import android.text.Html;
3235
import android.text.Spanned;
3336
import android.text.format.Time;
37+
import android.util.Log;
3438
import android.view.LayoutInflater;
3539
import android.view.MotionEvent;
3640
import android.view.View;
@@ -66,6 +70,7 @@
6670
import java.util.ArrayList;
6771
import java.util.Arrays;
6872
import java.util.Collections;
73+
import java.util.IllegalFormatConversionException;
6974
import java.util.List;
7075

7176
import es.usc.citius.servando.calendula.R;
@@ -204,7 +209,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
204209

205210
setupScheduleSpinner();
206211
setupDaySelectionListeners(rootView);
207-
setupHourlyRepetitionLinsteners();
212+
setupHourlyRepetitionListeners();
208213
setupStartEndDatePickers(rootView);
209214
setupForCurrentSchedule(rootView);
210215
setupCycleSpinner();
@@ -288,7 +293,7 @@ public void onTimeSet(RadialTimePickerDialogFragment dialog, int hour, int minut
288293
schedule.setStartTime(new LocalTime(hour, minute));
289294
}
290295

291-
void setupHourlyRepetitionLinsteners() {
296+
void setupHourlyRepetitionListeners() {
292297
hourlyIntervalEditText.setOnClickListener(new View.OnClickListener() {
293298
@Override
294299
public void onClick(View v) {
@@ -320,6 +325,38 @@ public void onClick(View v) {
320325

321326
void setupStartEndDatePickers(View rootView) {
322327

328+
/*
329+
* Needed to fix crashes on samsung 5.0 devices.
330+
*
331+
* See: https://stackoverflow.com/q/28618405/4243049
332+
*/
333+
final ContextWrapper datePickerContext = new ContextWrapper(getActivity()) {
334+
335+
private Resources wrappedResources;
336+
337+
@Override
338+
public Resources getResources() {
339+
Resources r = super.getResources();
340+
if(wrappedResources == null) {
341+
wrappedResources = new Resources(r.getAssets(), r.getDisplayMetrics(), r.getConfiguration()) {
342+
@NonNull
343+
@Override
344+
public String getString(int id, Object... formatArgs) throws NotFoundException {
345+
try {
346+
return super.getString(id, formatArgs);
347+
} catch (IllegalFormatConversionException e) {
348+
Log.w(TAG, "Trying to fix resource exception", e);
349+
String template = super.getString(id);
350+
template = template.replaceAll("%" + e.getConversion(), "%s");
351+
return String.format(getConfiguration().locale, template, formatArgs);
352+
}
353+
}
354+
};
355+
}
356+
return wrappedResources;
357+
}
358+
};
359+
323360
if (schedule.start() == null) {
324361
schedule.setStart(LocalDate.now());
325362
}
@@ -331,7 +368,7 @@ void setupStartEndDatePickers(View rootView) {
331368
public void onClick(View v) {
332369

333370
DatePickerDialog dpd =
334-
new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
371+
new DatePickerDialog(datePickerContext, new DatePickerDialog.OnDateSetListener() {
335372
@Override
336373
public void onDateSet(DatePicker view, int year, int monthOfYear,
337374
int dayOfMonth) {
@@ -353,7 +390,7 @@ public void onClick(View v) {
353390
schedule.end() != null ? schedule.end() : scheduleStart.plusMonths(3);
354391

355392
DatePickerDialog dpd =
356-
new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
393+
new DatePickerDialog(datePickerContext, new DatePickerDialog.OnDateSetListener() {
357394
@Override
358395
public void onDateSet(DatePicker view, int year, int monthOfYear,
359396
int dayOfMonth) {
@@ -370,7 +407,7 @@ public void onDateSet(DatePicker view, int year, int monthOfYear,
370407
@Override
371408
public boolean onLongClick(View v) {
372409
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
373-
builder.setMessage("Do you want this schedule to continue indefinitely?")
410+
builder.setMessage(R.string.schedule_continue_indefinitely)
374411
.setCancelable(true)
375412
.setPositiveButton(getString(R.string.dialog_yes_option),
376413
new DialogInterface.OnClickListener() {

Calendula/src/main/java/es/usc/citius/servando/calendula/modules/modules/BaseModule.java

-8
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
import es.usc.citius.servando.calendula.util.PreferenceKeys;
4949
import es.usc.citius.servando.calendula.util.PreferenceUtils;
5050
import es.usc.citius.servando.calendula.util.PresentationsTypeface;
51-
import es.usc.citius.servando.calendula.util.SettingsProperties;
5251

5352

5453
public class BaseModule extends CalendulaModule {
@@ -97,13 +96,6 @@ public void setupUpdateDailyAgendaAlarm(Context ctx) {
9796
protected void onApplicationStartup(Context ctx) {
9897
PreferenceUtils.init(ctx);
9998

100-
101-
try {
102-
SettingsProperties.init(ctx);
103-
} catch (IOException e) {
104-
LogUtil.e(TAG, "onApplicationStartup: An exception happened when loading settings file");
105-
}
106-
10799
// initialize SQLite engine
108100
initializeDatabase(ctx);
109101

Calendula/src/main/java/es/usc/citius/servando/calendula/modules/modules/TestDataModule.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import java.util.Map;
3434
import java.util.concurrent.Callable;
3535

36+
import es.usc.citius.servando.calendula.BuildConfig;
3637
import es.usc.citius.servando.calendula.activities.PatientDetailActivity;
3738
import es.usc.citius.servando.calendula.database.DB;
3839
import es.usc.citius.servando.calendula.modules.CalendulaModule;
@@ -47,8 +48,6 @@
4748
import es.usc.citius.servando.calendula.util.LogUtil;
4849
import es.usc.citius.servando.calendula.util.PreferenceKeys;
4950
import es.usc.citius.servando.calendula.util.PreferenceUtils;
50-
import es.usc.citius.servando.calendula.util.SettingsProperties;
51-
import es.usc.citius.servando.calendula.util.SettingsPropertiesKeys;
5251

5352
public class TestDataModule extends CalendulaModule {
5453

@@ -73,7 +72,7 @@ protected void onApplicationStartup(final Context ctx) {
7372
final boolean testDataGenerated = PreferenceUtils.getBoolean(PreferenceKeys.TEST_DATA_GENERATED, false);
7473
if (testDataGenerated) {
7574
LogUtil.d(TAG, "onApplicationStartup: Test data already generated, skipping");
76-
} else if (!SettingsProperties.instance().get(SettingsPropertiesKeys.GENERATE_TEST_DATA).equals("yes")) {
75+
} else if (!BuildConfig.TEST_GENERATE_TESTDATA) {
7776
LogUtil.d(TAG, "onApplicationStartup: GENERATE_TEST_DATA is not set");
7877
} else {
7978
LogUtil.d(TAG, "onApplicationStartup: Generating test data");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* Calendula - An assistant for personal medication management.
3+
* Copyright (C) 2016 CITIUS - USC
4+
*
5+
* Calendula is free software; you can redistribute it and/or modify
6+
* it under the terms of the GNU General Public License as published by
7+
* the Free Software Foundation; either version 3 of the License, or
8+
* (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this software. If not, see <http://www.gnu.org/licenses/>.
17+
*/
18+
19+
package es.usc.citius.servando.calendula.mvp
20+
21+
import android.os.Bundle
22+
import es.usc.citius.servando.calendula.CalendulaActivity
23+
24+
25+
abstract class BaseActivityView<in V : IView, out P : IPresenter<V>> : CalendulaActivity(), IView {
26+
27+
abstract val presenter: P
28+
29+
override fun onCreate(savedInstanceState: Bundle?) {
30+
super.onCreate(savedInstanceState)
31+
@Suppress("UNCHECKED_CAST")
32+
presenter.attachView(this as V)
33+
}
34+
35+
override fun onDestroy() {
36+
presenter.detachView()
37+
super.onDestroy()
38+
}
39+
}

0 commit comments

Comments
 (0)