diff --git a/app/src/androidTest/java/it/reyboz/bustorino/data/gtfs/ParcelableTest.java b/app/src/androidTest/java/it/reyboz/bustorino/data/gtfs/ParcelableTest.java new file mode 100644 --- /dev/null +++ b/app/src/androidTest/java/it/reyboz/bustorino/data/gtfs/ParcelableTest.java @@ -0,0 +1,64 @@ +package it.reyboz.bustorino.data.gtfs; + +import android.os.Parcel; +import it.reyboz.bustorino.backend.Palina; +import it.reyboz.bustorino.backend.Passaggio; +import it.reyboz.bustorino.backend.Route; +import it.reyboz.bustorino.backend.Stop; +import org.junit.Test; +import static org.junit.Assert.*; + +import java.util.ArrayList; +import java.util.List; + +public class ParcelableTest { + + @Test + public void testPalinaParcelableTransfer() { + + Palina p = new Palina("32", "TestPalina", "myname", "Via madre di dio", 9.211,-8.92, "gtt:none"); + ArrayList pass1,pass2; + pass1 = new ArrayList<>(); + pass2 = new ArrayList<>(); + for (int i = 0; i < 4; i++) { + pass1.add(Passaggio.newInstance(20, 9+5*i,true, Passaggio.Source.MatoAPI, 0)); + pass1.add(Passaggio.newInstance(20, 9+7*i,true, Passaggio.Source.MatoAPI, 0)); + } + Route r; + r= new Route("Mas","destinazione",pass1,Route.Type.BUS,"maiam"); + p.addRoute(r); + r = new Route("18","Max",pass2,Route.Type.TRAM,"descr"); + p.addRoute(r); + + Parcel parcel = Parcel.obtain(); + p.writeToParcel(parcel, p.describeContents()); + + parcel.setDataPosition(0); + + Palina p2 = Palina.CREATOR.createFromParcel(parcel); + + parcel.recycle(); + + assertEquals(p2.ID, p.ID); + assertEquals(p2.gtfsID, p.gtfsID); + assertEquals(p.location, p2.location); + assertEquals("Via madre di dio", p.location); + assertEquals(p.type, p2.type); + assertEquals(p.getLatitude(),p2.getLatitude()); + assertEquals(p.getLongitude(),p2.getLongitude()); + assertEquals(p.getTotalNumberOfPassages(),p2.getTotalNumberOfPassages()); + List rl1, rl2; + rl1 = p.queryAllRoutes(); + rl2 = p.queryAllRoutes(); + assertEquals(rl1.size(), rl2.size()); + Route x,y; + for (int i = 0; i < rl1.size(); i++) { + x = rl1.get(i); + y = rl2.get(i); + assertEquals(x.destinazione,y.destinazione); + assertEquals(x.type,y.type); + assertEquals(x.description,y.description); + assertEquals(x.getPassaggiToString(),y.getPassaggiToString()); + } + } +} diff --git a/app/src/main/java/it/reyboz/bustorino/backend/Palina.java b/app/src/main/java/it/reyboz/bustorino/backend/Palina.java --- a/app/src/main/java/it/reyboz/bustorino/backend/Palina.java +++ b/app/src/main/java/it/reyboz/bustorino/backend/Palina.java @@ -26,11 +26,9 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import java.io.Serializable; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; -import java.util.Comparator; import java.util.List; import it.reyboz.bustorino.util.LinesNameSorter; @@ -500,7 +498,7 @@ } @Override - public void writeToParcel(Parcel dest, int flags) { + public void writeToParcel(@NonNull Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeTypedList(routes); dest.writeByte((byte) (routesModified ? 1 : 0)); diff --git a/app/src/main/java/it/reyboz/bustorino/data/AppDataProvider.java b/app/src/main/java/it/reyboz/bustorino/data/AppDataProvider.java --- a/app/src/main/java/it/reyboz/bustorino/data/AppDataProvider.java +++ b/app/src/main/java/it/reyboz/bustorino/data/AppDataProvider.java @@ -21,9 +21,11 @@ import android.database.Cursor; import android.database.sqlite.SQLiteConstraintException; import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteDatabaseLockedException; import android.net.Uri; import android.util.Log; +import androidx.annotation.Nullable; import it.reyboz.bustorino.BuildConfig; import it.reyboz.bustorino.backend.DBStatusManager; import it.reyboz.bustorino.backend.Stop; @@ -204,6 +206,7 @@ } @Override + @Nullable public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) throws UnsupportedOperationException,IllegalArgumentException { //IMPORTANT @@ -211,7 +214,15 @@ if(preferences.isDBUpdating(true)) //throw new UnsupportedOperationException("DB is updating"); return null; - SQLiteDatabase db = appDBHelper.getReadableDatabase(); + SQLiteDatabase db; + try{ + //try to get a readable database + db = appDBHelper.getReadableDatabase(); + } catch (SQLiteDatabaseLockedException ex){ + Log.e(DEBUG_TAG,"Database is locked",ex); + return null; + } + List parts = uri.getPathSegments(); switch (sUriMatcher.match(uri)){ case LOCATION_SEARCH: diff --git a/app/src/main/java/it/reyboz/bustorino/fragments/FragmentHelper.java b/app/src/main/java/it/reyboz/bustorino/fragments/FragmentHelper.java --- a/app/src/main/java/it/reyboz/bustorino/fragments/FragmentHelper.java +++ b/app/src/main/java/it/reyboz/bustorino/fragments/FragmentHelper.java @@ -253,7 +253,7 @@ public void showToastMessage(int messageID, boolean short_lenght) { final int length = short_lenght ? Toast.LENGTH_SHORT : Toast.LENGTH_LONG; if (context != null) - Toast.makeText(context, messageID, length).show(); + Toast.makeText(context, messageID, length).show(); } private void showShortToast(int messageID){ showToastMessage(messageID, true);