Page MenuHomeGitPull.it

D131.1729712654.diff
No OneTemporary

Size
52 KB
Referenced Files
None
Subscribers
None

D131.1729712654.diff

diff --git a/app/build.gradle b/app/build.gradle
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -54,7 +54,6 @@
dependencies {
//new libraries
-
}
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- >
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
@@ -13,18 +12,18 @@
<queries>
<intent>
- <action android:name="android.intent.action.VIEW" />
- <data android:scheme="http" />
+ <action android:name="android.intent.action.VIEW"/>
+ <data android:scheme="http"/>
</intent>
<intent>
- <action android:name="android.intent.action.VIEW" />
- <data android:scheme="https" />
+ <action android:name="android.intent.action.VIEW"/>
+ <data android:scheme="https"/>
</intent>
<intent>
- <action android:name="com.google.zxing.client.android.SCAN" />
+ <action android:name="com.google.zxing.client.android.SCAN"/>
</intent>
<intent>
- <action android:name="com.google.zxing.client.android.ENCODE" />
+ <action android:name="com.google.zxing.client.android.ENCODE"/>
</intent>
</queries>
@@ -36,7 +35,6 @@
android:networkSecurityConfig="@xml/networks_security_config"
android:roundIcon="@mipmap/ic_launcher_round"
android:theme="@style/AppTheme.NoActionBar">
-
<activity
android:name=".ActivityExperiments"
android:label="@string/experiments"
@@ -44,10 +42,10 @@
</activity>
<activity
android:name=".ActivityPrincipal"
+ android:exported="true"
android:label="@string/app_name"
android:screenOrientation="portrait"
- android:windowSoftInputMode="adjustResize"
- android:exported="true">
+ android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
@@ -105,7 +103,6 @@
android:enabled="true"
android:exported="false">
</provider>
-
<!-- Don't show the additional frame on samsung phones -->
<meta-data
android:name="com.samsung.android.icon_container.has_icon_container"
diff --git a/app/src/main/java/it/reyboz/bustorino/adapters/ArrivalsStopAdapter.java b/app/src/main/java/it/reyboz/bustorino/adapters/ArrivalsStopAdapter.java
--- a/app/src/main/java/it/reyboz/bustorino/adapters/ArrivalsStopAdapter.java
+++ b/app/src/main/java/it/reyboz/bustorino/adapters/ArrivalsStopAdapter.java
@@ -42,7 +42,7 @@
public class ArrivalsStopAdapter extends RecyclerView.Adapter<ArrivalsStopAdapter.ViewHolder> implements SharedPreferences.OnSharedPreferenceChangeListener {
private final static int layoutRes = R.layout.arrivals_nearby_card;
//private List<Stop> stops;
- private @Nullable Location userPosition;
+ private @NonNull GPSPoint userPosition;
private FragmentListenerMain listener;
private List< Pair<Stop, Route> > routesPairList;
private final Context context;
@@ -52,7 +52,7 @@
private NameCapitalize capit;
- public ArrivalsStopAdapter(@Nullable List< Pair<Stop, Route> > routesPairList, FragmentListenerMain fragmentListener, Context con, @Nullable Location pos) {
+ public ArrivalsStopAdapter(@Nullable List< Pair<Stop, Route> > routesPairList, FragmentListenerMain fragmentListener, Context con, @NonNull GPSPoint pos) {
listener = fragmentListener;
userPosition = pos;
this.routesPairList = routesPairList;
@@ -85,7 +85,7 @@
if(stopRoutePair!=null && stopRoutePair.first!=null){
final Stop stop = stopRoutePair.first;
final Route r = stopRoutePair.second;
- final Double distance = stop.getDistanceFromLocation(userPosition);
+ final Double distance = stop.getDistanceFromLocation(userPosition.getLatitude(), userPosition.longitude);
if(distance!=Double.POSITIVE_INFINITY){
holder.distancetextView.setText(distance.intValue()+" m");
} else {
@@ -181,11 +181,11 @@
}
}
- public void setUserPosition(@Nullable Location userPosition) {
+ public void setUserPosition(@Nullable GPSPoint userPosition) {
this.userPosition = userPosition;
}
- public void setRoutesPairListAndPosition(List<Pair<Stop, Route>> mRoutesPairList, @Nullable Location pos) {
+ public void setRoutesPairListAndPosition(List<Pair<Stop, Route>> mRoutesPairList, @Nullable GPSPoint pos) {
if(pos!=null){
this.userPosition = pos;
}
@@ -260,7 +260,7 @@
/**
* Sort and remove the repetitions in the list
*/
- private static void sortAndRemoveDuplicates(List< Pair<Stop, Route> > routesPairList, Location positionToSort ){
+ private static void sortAndRemoveDuplicates(List< Pair<Stop, Route> > routesPairList, GPSPoint positionToSort ){
Collections.sort(routesPairList,new RoutePositionSorter(positionToSort));
//All of this to get only the first occurrences of a line (name & direction)
ListIterator<Pair<Stop,Route>> iterator = routesPairList.listIterator();
diff --git a/app/src/main/java/it/reyboz/bustorino/adapters/SquareStopAdapter.java b/app/src/main/java/it/reyboz/bustorino/adapters/SquareStopAdapter.java
--- a/app/src/main/java/it/reyboz/bustorino/adapters/SquareStopAdapter.java
+++ b/app/src/main/java/it/reyboz/bustorino/adapters/SquareStopAdapter.java
@@ -26,6 +26,7 @@
import android.view.ViewGroup;
import android.widget.TextView;
import it.reyboz.bustorino.R;
+import it.reyboz.bustorino.backend.GPSPoint;
import it.reyboz.bustorino.backend.Stop;
import it.reyboz.bustorino.util.StopSorterByDistance;
import it.reyboz.bustorino.fragments.FragmentListenerMain;
@@ -36,11 +37,11 @@
public class SquareStopAdapter extends RecyclerView.Adapter<SquareStopAdapter.SquareViewHolder> {
private final static int layoutRes = R.layout.stop_card;
//private List<Stop> stops;
- private @Nullable Location userPosition;
+ private @Nullable GPSPoint userPosition;
private FragmentListenerMain listener;
private List<Stop> stops;
- public SquareStopAdapter(@Nullable List<Stop> stopList, FragmentListenerMain fragmentListener, @Nullable Location pos) {
+ public SquareStopAdapter(@Nullable List<Stop> stopList, FragmentListenerMain fragmentListener, @Nullable GPSPoint pos) {
listener = fragmentListener;
userPosition = pos;
stops = stopList;
@@ -116,7 +117,7 @@
this.stops = stops;
}
- public void setUserPosition(@Nullable Location userPosition) {
+ public void setUserPosition(@Nullable GPSPoint userPosition) {
this.userPosition = userPosition;
}
/*
diff --git a/app/src/main/java/it/reyboz/bustorino/backend/GPSPoint.java b/app/src/main/java/it/reyboz/bustorino/backend/GPSPoint.java
new file mode 100644
--- /dev/null
+++ b/app/src/main/java/it/reyboz/bustorino/backend/GPSPoint.java
@@ -0,0 +1,34 @@
+package it.reyboz.bustorino.backend;
+
+import org.osmdroid.api.IGeoPoint;
+
+public class GPSPoint implements IGeoPoint {
+
+ public final double latitude;
+ public final double longitude;
+
+ public GPSPoint(double latitude, double longitude) {
+ this.latitude = latitude;
+ this.longitude = longitude;
+ }
+
+ @Override
+ public int getLatitudeE6() {
+ return (int) (latitude*1e6d);
+ }
+
+ @Override
+ public int getLongitudeE6() {
+ return (int) (longitude*1e6d);
+ }
+
+ @Override
+ public double getLatitude() {
+ return latitude;
+ }
+
+ @Override
+ public double getLongitude() {
+ return longitude;
+ }
+}
diff --git a/app/src/main/java/it/reyboz/bustorino/backend/Stop.java b/app/src/main/java/it/reyboz/bustorino/backend/Stop.java
--- a/app/src/main/java/it/reyboz/bustorino/backend/Stop.java
+++ b/app/src/main/java/it/reyboz/bustorino/backend/Stop.java
@@ -23,6 +23,7 @@
import androidx.annotation.Nullable;
import it.reyboz.bustorino.util.LinesNameSorter;
+import org.osmdroid.api.IGeoPoint;
import java.net.URLEncoder;
import java.util.Collections;
@@ -297,9 +298,11 @@
}
- public Double getDistanceFromLocation(Location loc){
+ public Double getDistanceFromLocation(IGeoPoint loc){
+ return getDistanceFromLocation(loc.getLatitude(), loc.getLongitude());
+ }
+ public Double getDistanceFromLocation(double latitude, double longitude){
if(this.lat!=null && this.lon !=null)
- return utils.measuredistanceBetween(this.lat,this.lon,loc.getLatitude(),loc.getLongitude());
+ return utils.measuredistanceBetween(this.lat,this.lon,latitude, longitude);
else return Double.POSITIVE_INFINITY;
- }
-}
+ }}
diff --git a/app/src/main/java/it/reyboz/bustorino/backend/utils.java b/app/src/main/java/it/reyboz/bustorino/backend/utils.java
--- a/app/src/main/java/it/reyboz/bustorino/backend/utils.java
+++ b/app/src/main/java/it/reyboz/bustorino/backend/utils.java
@@ -25,12 +25,9 @@
import android.net.Uri;
import android.util.Log;
import android.util.TypedValue;
-import android.view.View;
import androidx.annotation.Nullable;
import androidx.preference.PreferenceManager;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
@@ -44,7 +41,7 @@
import it.reyboz.bustorino.fragments.SettingsFragment;
public abstract class utils {
- private static final double EarthRadius = 6371e3;
+ private static final double EARTH_RADIUS = 6371.009e3;
public static Double measuredistanceBetween(double lat1,double long1,double lat2,double long2){
@@ -58,11 +55,11 @@
Math.cos(phi1)*Math.cos(phi2)*Math.sin(deltaTheta/2)*Math.sin(deltaTheta/2);
final double c = 2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));
- return Math.abs(EarthRadius*c);
+ return Math.abs(EARTH_RADIUS *c);
}
public static Double angleRawDifferenceFromMeters(double distanceInMeters){
- return Math.toDegrees(distanceInMeters/EarthRadius);
+ return Math.toDegrees(distanceInMeters/ EARTH_RADIUS);
}
public static int convertDipToPixelsInt(Context con,double dips)
@@ -70,6 +67,28 @@
return (int) (dips * con.getResources().getDisplayMetrics().density + 0.5f);
}
+ /**
+ * Convert distance in meters on Earth in degrees of latitude, keeping the same longitude
+ * @param distanceMeters distance in meters
+ * @return angle in degrees
+ */
+ public static Double latitudeDelta(Double distanceMeters){
+ final double angleRad = distanceMeters/EARTH_RADIUS;
+ return Math.toDegrees(angleRad);
+ }
+
+ /**
+ * Convert distance in meters on Earth in degrees of longitude, keeping the same latitude
+ * @param distanceMeters distance in meters
+ * @param latitude the latitude that is fixed
+ * @return angle in degrees
+ */
+ public static Double longitudeDelta(Double distanceMeters, Double latitude){
+ final double theta = Math.toRadians(latitude);
+ final double denom = Math.abs(Math.cos(theta));
+ final double angleRad = 2*Math.asin(Math.sin(distanceMeters / EARTH_RADIUS) / denom);
+ return Math.toDegrees(angleRad);
+ }
public static float convertDipToPixels(Context con, float dp){
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,con.getResources().getDisplayMetrics());
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
@@ -27,6 +27,7 @@
import it.reyboz.bustorino.BuildConfig;
import it.reyboz.bustorino.backend.DBStatusManager;
import it.reyboz.bustorino.backend.Stop;
+import it.reyboz.bustorino.backend.utils;
import it.reyboz.bustorino.data.NextGenDB.Contract.*;
import java.util.List;
@@ -219,15 +220,19 @@
if(parts.size()>=4 && "location".equals(parts.get(1))){
Double latitude = Double.parseDouble(parts.get(2));
Double longitude = Double.parseDouble(parts.get(3));
- //converting distance to a float to not lose precision
- float distance = parts.size()>=5 ? Float.parseFloat(parts.get(4))/1000 : 0.02f;
+ //distance in meters
+ final double distance = parts.size()>=5 ? Double.parseDouble(parts.get(4)) : 50;
//if(parts.size()>=5)
//Log.d("LocationSearch"," given distance to search is "+parts.get(4)+" m");
- Double distasAngle = (distance/6371)*180/Math.PI; //small angles approximation, still valid for about 500 metres
+ Double latDelta = utils.latitudeDelta(distance);
+ Double longDelta = utils.longitudeDelta(distance, latitude);
+ Log.d(DEBUG_TAG, "Location search around: "+latitude+" , "+longitude);
+ Log.d(DEBUG_TAG, "Location search: latitude {"+(latitude-latDelta)+", "+(latitude+latDelta)+
+ "} longitude {"+(longitude-longDelta)+", "+(longitude+longDelta)+"}");
- String whereClause = StopsTable.COL_LAT+ "< "+(latitude+distasAngle)+" AND "
- +StopsTable.COL_LAT +" > "+(latitude-distasAngle)+" AND "+
- StopsTable.COL_LONG+" < "+(longitude+distasAngle)+" AND "+StopsTable.COL_LONG+" > "+(longitude-distasAngle);
+ String whereClause = StopsTable.COL_LAT+ "< "+(latitude+latDelta)+" AND "
+ +StopsTable.COL_LAT +" > "+(latitude-latDelta)+" AND "+
+ StopsTable.COL_LONG+" < "+(longitude+longDelta)+" AND "+StopsTable.COL_LONG+" > "+(longitude-longDelta);
//Log.d("Provider-LOCSearch","Querying stops by position, query args: \n"+whereClause);
return db.query(StopsTable.TABLE_NAME,projection,whereClause,null,null,null,null);
}
diff --git a/app/src/main/java/it/reyboz/bustorino/data/OldDataRepository.kt b/app/src/main/java/it/reyboz/bustorino/data/OldDataRepository.kt
--- a/app/src/main/java/it/reyboz/bustorino/data/OldDataRepository.kt
+++ b/app/src/main/java/it/reyboz/bustorino/data/OldDataRepository.kt
@@ -20,6 +20,8 @@
import android.content.Context
import it.reyboz.bustorino.backend.Result
import it.reyboz.bustorino.backend.Stop
+import it.reyboz.bustorino.backend.utils
+import java.util.ArrayList
import java.util.concurrent.Executor
class OldDataRepository(private val executor: Executor, private val nextGenDB: NextGenDB) {
@@ -55,12 +57,25 @@
latitFrom, latitTo,
longitFrom, longitTo
)
- if (stops!=null)
- callback.onComplete(Result.success(stops))
+
+ callback.onComplete(Result.success(stops))
}
}
+ /**
+ * Request all the stops in position [latitude], [longitude], in the "square" with radius [distanceMeters]
+ * Returns nothing, [callback] will be called if the query succeeds
+ */
+ fun requestStopsWithinDistance(latitude: Double, longitude: Double, distanceMeters: Int, callback: Callback<ArrayList<Stop>>){
+
+ val latDelta = utils.latitudeDelta(distanceMeters.toDouble())
+ val longDelta = utils.longitudeDelta(distanceMeters.toDouble(), latitude)
+
+ requestStopsInArea(latitude-latDelta,
+ latitude+latDelta, longitude-longDelta, longitude+longDelta, callback)
+ }
+
fun interface Callback<T> {
diff --git a/app/src/main/java/it/reyboz/bustorino/fragments/ArrivalsFragment.java b/app/src/main/java/it/reyboz/bustorino/fragments/ArrivalsFragment.java
--- a/app/src/main/java/it/reyboz/bustorino/fragments/ArrivalsFragment.java
+++ b/app/src/main/java/it/reyboz/bustorino/fragments/ArrivalsFragment.java
@@ -65,8 +65,11 @@
import it.reyboz.bustorino.util.LinesNameSorter;
import it.reyboz.bustorino.util.ViewUtils;
+import static it.reyboz.bustorino.fragments.ScreenBaseFragment.setOption;
+
public class ArrivalsFragment extends ResultBaseFragment implements LoaderManager.LoaderCallbacks<Cursor> {
+ private static final String OPTION_SHOW_LEGEND = "show_legend";
private final static String KEY_STOP_ID = "stopid";
private final static String KEY_STOP_NAME = "stopname";
private final static String DEBUG_TAG_ALL = "BUSTOArrivalsFragment";
@@ -92,6 +95,9 @@
protected RecyclerView arrivalsRecyclerView;
private PalinaAdapter mListAdapter = null;
+ private TextView howDoesItWorkTextView;
+ private Button hideHintButton;
+
//private NestedScrollView theScrollView;
protected RecyclerView noArrivalsRecyclerView;
@@ -181,6 +187,11 @@
View root = inflater.inflate(R.layout.fragment_arrivals, container, false);
messageTextView = root.findViewById(R.id.messageTextView);
addToFavorites = root.findViewById(R.id.addToFavorites);
+ // "How does it work part"
+ howDoesItWorkTextView = root.findViewById(R.id.howDoesItWorkTextView);
+ hideHintButton = root.findViewById(R.id.hideHintButton);
+ hideHintButton.setOnClickListener(this::onHideHint);
+
//theScrollView = root.findViewById(R.id.arrivalsScrollView);
// recyclerview holding the arrival times
arrivalsRecyclerView = root.findViewById(R.id.arrivalsRecyclerView);
@@ -288,6 +299,10 @@
updateMessage();
}
+ if (ScreenBaseFragment.getOption(requireContext(),OPTION_SHOW_LEGEND, true)) {
+ showHints();
+ }
+
}
@@ -333,6 +348,23 @@
this.reloadOnResume = reloadOnResume;
}
+ // HINT "HOW TO USE"
+ private void showHints() {
+ howDoesItWorkTextView.setVisibility(View.VISIBLE);
+ hideHintButton.setVisibility(View.VISIBLE);
+ //actionHelpMenuItem.setVisible(false);
+ }
+
+ private void hideHints() {
+ howDoesItWorkTextView.setVisibility(View.GONE);
+ hideHintButton.setVisibility(View.GONE);
+ //actionHelpMenuItem.setVisible(true);
+ }
+
+ public void onHideHint(View v) {
+ hideHints();
+ setOption(requireContext(),OPTION_SHOW_LEGEND, false);
+ }
/**
* Give the fetchers
* @return the list of the fetchers
diff --git a/app/src/main/java/it/reyboz/bustorino/fragments/MainScreenFragment.java b/app/src/main/java/it/reyboz/bustorino/fragments/MainScreenFragment.java
--- a/app/src/main/java/it/reyboz/bustorino/fragments/MainScreenFragment.java
+++ b/app/src/main/java/it/reyboz/bustorino/fragments/MainScreenFragment.java
@@ -68,7 +68,6 @@
public class MainScreenFragment extends ScreenBaseFragment implements FragmentListenerMain{
- private static final String OPTION_SHOW_LEGEND = "show_legend";
private static final String SAVED_FRAGMENT="saved_fragment";
private static final String DEBUG_TAG = "BusTO - MainFragment";
@@ -82,8 +81,7 @@
private EditText busStopSearchByIDEditText;
private EditText busStopSearchByNameEditText;
private ProgressBar progressBar;
- private TextView howDoesItWorkTextView;
- private Button hideHintButton;
+
private MenuItem actionHelpMenuItem;
private FloatingActionButton floatingActionButton;
private FrameLayout resultFrameLayout;
@@ -279,8 +277,7 @@
busStopSearchByIDEditText = root.findViewById(R.id.busStopSearchByIDEditText);
busStopSearchByNameEditText = root.findViewById(R.id.busStopSearchByNameEditText);
progressBar = root.findViewById(R.id.progressBar);
- howDoesItWorkTextView = root.findViewById(R.id.howDoesItWorkTextView);
- hideHintButton = root.findViewById(R.id.hideHintButton);
+
swipeRefreshLayout = root.findViewById(R.id.listRefreshLayout);
floatingActionButton = root.findViewById(R.id.floatingActionButton);
resultFrameLayout = root.findViewById(R.id.resultFrame);
@@ -311,7 +308,6 @@
coordLayout = root.findViewById(R.id.coord_layout);
floatingActionButton.setOnClickListener((this::onToggleKeyboardLayout));
- hideHintButton.setOnClickListener(this::onHideHint);
AppCompatImageButton qrButton = root.findViewById(R.id.QRButton);
qrButton.setOnClickListener(this::onQRButtonClick);
@@ -527,11 +523,7 @@
barcodeLauncher.launch(scanOptions);
}
}
- public void onHideHint(View v) {
- hideHints();
- setOption(OPTION_SHOW_LEGEND, false);
- }
/**
* OK this is pure shit
*
@@ -618,18 +610,6 @@
busStopSearchByIDEditText.setSelection(busStopID.length());
}
- private void showHints() {
- howDoesItWorkTextView.setVisibility(View.VISIBLE);
- hideHintButton.setVisibility(View.VISIBLE);
- //actionHelpMenuItem.setVisible(false);
- }
-
- private void hideHints() {
- howDoesItWorkTextView.setVisibility(View.GONE);
- hideHintButton.setVisibility(View.GONE);
- //actionHelpMenuItem.setVisible(true);
- }
-
@Nullable
@org.jetbrains.annotations.Nullable
@Override
@@ -711,9 +691,6 @@
switch (fragmentType) {
case ARRIVALS:
prepareGUIForBusLines();
- if (getOption(OPTION_SHOW_LEGEND, true)) {
- showHints();
- }
break;
case STOPS:
prepareGUIForBusStops();
diff --git a/app/src/main/java/it/reyboz/bustorino/fragments/NearbyStopsFragment.java b/app/src/main/java/it/reyboz/bustorino/fragments/NearbyStopsFragment.java
--- a/app/src/main/java/it/reyboz/bustorino/fragments/NearbyStopsFragment.java
+++ b/app/src/main/java/it/reyboz/bustorino/fragments/NearbyStopsFragment.java
@@ -29,13 +29,13 @@
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
+import androidx.lifecycle.ViewModelProvider;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.CursorLoader;
import androidx.loader.content.Loader;
import androidx.core.util.Pair;
import androidx.preference.PreferenceManager;
import androidx.appcompat.widget.AppCompatButton;
-import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.work.WorkInfo;
@@ -51,21 +51,21 @@
import it.reyboz.bustorino.R;
import it.reyboz.bustorino.adapters.ArrivalsStopAdapter;
import it.reyboz.bustorino.backend.*;
-import it.reyboz.bustorino.backend.FiveTAPIFetcher.QueryType;
import it.reyboz.bustorino.backend.mato.MapiArrivalRequest;
import it.reyboz.bustorino.data.DatabaseUpdate;
import it.reyboz.bustorino.data.NextGenDB;
import it.reyboz.bustorino.middleware.AppLocationManager;
import it.reyboz.bustorino.data.AppDataProvider;
-import it.reyboz.bustorino.data.NextGenDB.Contract.*;
import it.reyboz.bustorino.adapters.SquareStopAdapter;
import it.reyboz.bustorino.middleware.AutoFitGridLayoutManager;
import it.reyboz.bustorino.util.LocationCriteria;
import it.reyboz.bustorino.util.StopSorterByDistance;
+import it.reyboz.bustorino.viewmodels.NearbyStopsViewModel;
+import org.jetbrains.annotations.NotNull;
import java.util.*;
-public class NearbyStopsFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {
+public class NearbyStopsFragment extends Fragment {
public enum FragType{
STOPS(1), ARRIVALS(2);
@@ -100,9 +100,9 @@
private SquareStopAdapter dataAdapter;
private AutoFitGridLayoutManager gridLayoutManager;
- private Location lastReceivedLocation = null;
+ private GPSPoint lastPosition = null;
private ProgressBar circlingProgressBar,flatProgressBar;
- private int distance;
+ private int distance = 10;
protected SharedPreferences globalSharedPref;
private SharedPreferences.OnSharedPreferenceChangeListener preferenceChangeListener;
private TextView messageTextView,titleTextView;
@@ -125,6 +125,9 @@
private ArrayList<Stop> currentNearbyStops = new ArrayList<>();
+ //ViewModel
+ private NearbyStopsViewModel viewModel;
+
public NearbyStopsFragment() {
// Required empty public constructor
}
@@ -153,7 +156,7 @@
setFragmentType(FragType.fromNum(getArguments().getInt(FRAGMENT_TYPE_KEY)));
}
locManager = AppLocationManager.getInstance(getContext());
- fragmentLocationListener = new FragmentLocationListener(this);
+ fragmentLocationListener = new FragmentLocationListener();
if (getContext()!=null) {
globalSharedPref = getContext().getSharedPreferences(getString(R.string.mainSharedPreferences), Context.MODE_PRIVATE);
globalSharedPref.registerOnSharedPreferenceChangeListener(preferenceChangeListener);
@@ -191,16 +194,33 @@
if (wi.getState() == WorkInfo.State.RUNNING && locManager.isRequesterRegistered(fragmentLocationListener)) {
locManager.removeLocationRequestFor(fragmentLocationListener);
dbUpdateRunning = true;
- } else if(!locManager.isRequesterRegistered(fragmentLocationListener)){
- locManager.addLocationRequestFor(fragmentLocationListener);
+ } else{
+ //start the request
+ if(!locManager.isRequesterRegistered(fragmentLocationListener))
+ locManager.addLocationRequestFor(fragmentLocationListener);
dbUpdateRunning = false;
}
}
});
+
+ //observe the livedata
+ viewModel.getStopsAtDistance().observe(getViewLifecycleOwner(), stops -> {
+ if (!dbUpdateRunning && (stops.size() < MIN_NUM_STOPS && distance <= MAX_DISTANCE)) {
+ distance = distance + 40;
+ viewModel.requestStopsAtDistance(distance, true);
+ //Log.d(DEBUG_TAG, "Doubling distance now!");
+ return;
+ }
+ if(!stops.isEmpty()) {
+ currentNearbyStops =stops;
+ showStopsInViews(currentNearbyStops, lastPosition);
+ }
+ });
return root;
}
+
/**
* Use this method to set the fragment type
* @param type the type, TYPE_ARRIVALS or TYPE_STOPS
@@ -221,7 +241,6 @@
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
- /// TODO: RISOLVERE PROBLEMA: il context qui e' l'Activity non il Fragment
if (context instanceof FragmentListenerMain) {
mListener = (FragmentListenerMain) context;
} else {
@@ -229,6 +248,7 @@
+ " must implement OnFragmentInteractionListener");
}
Log.d(DEBUG_TAG, "OnAttach called");
+ viewModel = new ViewModelProvider(this).get(NearbyStopsViewModel.class);
}
@Override
@@ -289,8 +309,7 @@
MIN_NUM_STOPS = 5;
}
if(BuildConfig.DEBUG)
- Log.d(DEBUG_TAG, "Max distance for stops: "+MAX_DISTANCE+
- ", Min number of stops: "+MIN_NUM_STOPS);
+ Log.d(DEBUG_TAG, "Max distance for stops: "+MAX_DISTANCE+ ", Min number of stops: "+MIN_NUM_STOPS);
}
@@ -308,73 +327,29 @@
if(arrivalsManager!=null) arrivalsManager.cancelAllRequests();
}
- @NonNull
- @Override
- public Loader<Cursor> onCreateLoader(int id, Bundle args) {
- //BUILD URI
- if (args!=null)
- lastReceivedLocation = args.getParcelable(BUNDLE_LOCATION);
- Uri.Builder builder = new Uri.Builder();
- builder.scheme("content").authority(AppDataProvider.AUTHORITY)
- .appendPath("stops").appendPath("location")
- .appendPath(String.valueOf(lastReceivedLocation.getLatitude()))
- .appendPath(String.valueOf(lastReceivedLocation.getLongitude()))
- .appendPath(String.valueOf(distance)); //distance
- CursorLoader cl = new CursorLoader(getContext(),builder.build(),NextGenDB.QUERY_COLUMN_stops_all,null,null,null);
- cl.setUpdateThrottle(2000);
- return cl;
- }
-
-
- @Override
- public void onLoadFinished(@NonNull Loader<Cursor> loader, Cursor cursor) {
- if (0 > MAX_DISTANCE) throw new AssertionError();
- //Cursor might be null
- if (cursor == null) {
- Log.e(DEBUG_TAG, "Null cursor, something really wrong happened");
- return;
- }
- Log.d(DEBUG_TAG, "Num stops found: " + cursor.getCount() + ", Current distance: " + distance);
-
- if (!dbUpdateRunning && (cursor.getCount() < MIN_NUM_STOPS && distance <= MAX_DISTANCE)) {
- distance = distance * 2;
- Bundle d = new Bundle();
- d.putParcelable(BUNDLE_LOCATION, lastReceivedLocation);
- getLoaderManager().restartLoader(LOADER_ID, d, this);
- //Log.d(DEBUG_TAG, "Doubling distance now!");
- return;
- }
- Log.d("LoadFromCursor", "Number of nearby stops: " + cursor.getCount());
- ////////
- if(cursor.getCount()>0)
- currentNearbyStops = NextGenDB.getStopsFromCursorAllFields(cursor);
-
- showCurrentStops();
- }
-
/**
* Display the stops, or run new set of requests for arrivals
*/
- private void showCurrentStops(){
- if (currentNearbyStops.isEmpty()) {
+ private void showStopsInViews(ArrayList<Stop> stops, GPSPoint location){
+ if (stops.isEmpty()) {
setNoStopsLayout();
return;
}
double minDistance = Double.POSITIVE_INFINITY;
- for(Stop s: currentNearbyStops){
- minDistance = Math.min(minDistance, s.getDistanceFromLocation(lastReceivedLocation));
+ for(Stop s: stops){
+ minDistance = Math.min(minDistance, s.getDistanceFromLocation(location.getLatitude(), location.getLongitude()));
}
//quick trial to hopefully always get the stops in the correct order
- Collections.sort(currentNearbyStops,new StopSorterByDistance(lastReceivedLocation));
+ Collections.sort(stops,new StopSorterByDistance(location));
switch (fragment_type){
case STOPS:
- showStopsInRecycler(currentNearbyStops);
+ showStopsInRecycler(stops);
break;
case ARRIVALS:
- arrivalsManager = new ArrivalsManager(currentNearbyStops);
+ arrivalsManager = new ArrivalsManager(stops);
flatProgressBar.setVisibility(View.VISIBLE);
flatProgressBar.setProgress(0);
flatProgressBar.setIndeterminate(false);
@@ -386,10 +361,6 @@
}
- @Override
- public void onLoaderReset(@NonNull Loader<Cursor> loader) {
- }
-
/**
* To enable targeting from the Button
*/
@@ -420,7 +391,7 @@
fragmentLocationListener.lastUpdateTime = -1;
//locManager.removeLocationRequestFor(fragmentLocationListener);
//locManager.addLocationRequestFor(fragmentLocationListener);
- showCurrentStops();
+ showStopsInViews(currentNearbyStops, lastPosition);
}
//useful methods
@@ -429,12 +400,12 @@
private void showStopsInRecycler(List<Stop> stops){
if(firstLocForStops) {
- dataAdapter = new SquareStopAdapter(stops, mListener, lastReceivedLocation);
+ dataAdapter = new SquareStopAdapter(stops, mListener, lastPosition);
gridRecyclerView.setAdapter(dataAdapter);
firstLocForStops = false;
}else {
dataAdapter.setStops(stops);
- dataAdapter.setUserPosition(lastReceivedLocation);
+ dataAdapter.setUserPosition(lastPosition);
}
dataAdapter.notifyDataSetChanged();
@@ -449,7 +420,7 @@
}
private void showArrivalsInRecycler(List<Palina> palinas){
- Collections.sort(palinas,new StopSorterByDistance(lastReceivedLocation));
+ Collections.sort(palinas,new StopSorterByDistance(lastPosition));
final ArrayList<Pair<Stop,Route>> routesPairList = new ArrayList<>(10);
//int maxNum = Math.min(MAX_STOPS, stopList.size());
@@ -467,11 +438,11 @@
return;
}
if(firstLocForArrivals){
- arrivalsStopAdapter = new ArrivalsStopAdapter(routesPairList,mListener,getContext(),lastReceivedLocation);
+ arrivalsStopAdapter = new ArrivalsStopAdapter(routesPairList,mListener,getContext(),lastPosition);
gridRecyclerView.setAdapter(arrivalsStopAdapter);
firstLocForArrivals = false;
} else {
- arrivalsStopAdapter.setRoutesPairListAndPosition(routesPairList,lastReceivedLocation);
+ arrivalsStopAdapter.setRoutesPairListAndPosition(routesPairList,lastPosition);
}
//arrivalsStopAdapter.notifyDataSetChanged();
@@ -583,27 +554,31 @@
*/
class FragmentLocationListener implements AppLocationManager.LocationRequester{
- LoaderManager.LoaderCallbacks<Cursor> callbacks;
private int oldLocStatus = -2;
private LocationCriteria cr;
private long lastUpdateTime = -1;
- public FragmentLocationListener(LoaderManager.LoaderCallbacks<Cursor> callbacks) {
- this.callbacks = callbacks;
- }
@Override
public void onLocationChanged(Location location) {
//set adapter
- float accuracy = location.getAccuracy();
- if(accuracy<100 && !dbUpdateRunning) {
- distance = 20;
- final Bundle msgBundle = new Bundle();
- msgBundle.putParcelable(BUNDLE_LOCATION,location);
- getLoaderManager().restartLoader(LOADER_ID,msgBundle,callbacks);
+
+ if(location==null){
+ Log.e(DEBUG_TAG, "Location is null, cannot request stops");
+ return;
+ } else if(viewModel==null){
+ return;
+ }
+ if(location.getAccuracy()<100 && !dbUpdateRunning) {
+ if(viewModel.getDistanceMtLiveData().getValue()==null){
+ //never run request
+ distance = 40;
+ }
+ lastPosition = new GPSPoint(location.getLatitude(), location.getLongitude());
+ viewModel.requestStopsAtDistance(location.getLatitude(), location.getLongitude(), distance, true);
}
lastUpdateTime = System.currentTimeMillis();
- Log.d("BusTO:NearPositListen","can start loader "+ !dbUpdateRunning);
+ Log.d("BusTO:NearPositListen","can start request for stops: "+ !dbUpdateRunning);
}
@Override
@@ -623,9 +598,9 @@
}
@Override
- public LocationCriteria getLocationCriteria() {
+ public @NotNull LocationCriteria getLocationCriteria() {
- return new LocationCriteria(120,TIME_INTERVAL_REQUESTS);
+ return new LocationCriteria(200,TIME_INTERVAL_REQUESTS);
}
@Override
diff --git a/app/src/main/java/it/reyboz/bustorino/fragments/ScreenBaseFragment.java b/app/src/main/java/it/reyboz/bustorino/fragments/ScreenBaseFragment.java
--- a/app/src/main/java/it/reyboz/bustorino/fragments/ScreenBaseFragment.java
+++ b/app/src/main/java/it/reyboz/bustorino/fragments/ScreenBaseFragment.java
@@ -16,7 +16,7 @@
public abstract class ScreenBaseFragment extends Fragment {
- protected final String PREF_FILE= BuildConfig.APPLICATION_ID+".fragment_prefs";
+ protected final static String PREF_FILE= BuildConfig.APPLICATION_ID+".fragment_prefs";
protected void setOption(String optionName, boolean value) {
Context mContext = getContext();
@@ -27,8 +27,8 @@
protected boolean getOption(String optionName, boolean optDefault) {
Context mContext = getContext();
- SharedPreferences preferences = mContext.getSharedPreferences(PREF_FILE, MODE_PRIVATE);
- return preferences.getBoolean(optionName, optDefault);
+ assert mContext != null;
+ return getOption(mContext, optionName, optDefault);
}
protected void showToastMessage(int messageID, boolean short_lenght) {
@@ -52,4 +52,14 @@
*/
@Nullable
public abstract View getBaseViewForSnackBar();
+
+ public static boolean getOption(Context context, String optionName, boolean optDefault){
+ SharedPreferences preferences = context.getSharedPreferences(PREF_FILE, MODE_PRIVATE);
+ return preferences.getBoolean(optionName, optDefault);
+ }
+ public static void setOption(Context context,String optionName, boolean value) {
+ SharedPreferences.Editor editor = context.getSharedPreferences(PREF_FILE, MODE_PRIVATE).edit();
+ editor.putBoolean(optionName, value);
+ editor.apply();
+ }
}
diff --git a/app/src/main/java/it/reyboz/bustorino/util/RoutePositionSorter.java b/app/src/main/java/it/reyboz/bustorino/util/RoutePositionSorter.java
--- a/app/src/main/java/it/reyboz/bustorino/util/RoutePositionSorter.java
+++ b/app/src/main/java/it/reyboz/bustorino/util/RoutePositionSorter.java
@@ -25,26 +25,31 @@
import it.reyboz.bustorino.backend.Route;
import it.reyboz.bustorino.backend.Stop;
import it.reyboz.bustorino.backend.utils;
+import org.osmdroid.api.IGeoPoint;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class RoutePositionSorter implements Comparator<Pair<Stop, Route>> {
- private final Location loc;
+ private final double latPos, longPos;
private final double minutialmetro = 6.0/100; //v = 5km/h
private final double distancemultiplier = 2./3;
- public RoutePositionSorter(Location loc) {
- this.loc = loc;
+ public RoutePositionSorter(double latitude, double longitude){
+ latPos = latitude;
+ longPos = longitude;
+ }
+ public RoutePositionSorter(IGeoPoint position){
+ this(position.getLatitude(), position.getLongitude());
}
@Override
public int compare(Pair<Stop, Route> pair1, Pair<Stop, Route> pair2) throws NullPointerException{
int delta = 0;
final Stop stop1 = pair1.first, stop2 = pair2.first;
- double dist1 = utils.measuredistanceBetween(loc.getLatitude(),loc.getLongitude(),
+ double dist1 = utils.measuredistanceBetween(latPos,longPos,
stop1.getLatitude(),stop1.getLongitude());
- double dist2 = utils.measuredistanceBetween(loc.getLatitude(),loc.getLongitude(),
+ double dist2 = utils.measuredistanceBetween(latPos,longPos,
stop2.getLatitude(),stop2.getLongitude());
final List<Passaggio> passaggi1 = pair1.second.passaggi,
passaggi2 = pair2.second.passaggi;
diff --git a/app/src/main/java/it/reyboz/bustorino/util/StopSorterByDistance.java b/app/src/main/java/it/reyboz/bustorino/util/StopSorterByDistance.java
--- a/app/src/main/java/it/reyboz/bustorino/util/StopSorterByDistance.java
+++ b/app/src/main/java/it/reyboz/bustorino/util/StopSorterByDistance.java
@@ -18,19 +18,21 @@
package it.reyboz.bustorino.util;
import android.location.Location;
+import it.reyboz.bustorino.backend.GPSPoint;
import it.reyboz.bustorino.backend.Stop;
import java.util.Comparator;
public class StopSorterByDistance implements Comparator<Stop> {
- private final Location locToCompare;
+ private final double latitude;
+ private final double longitude;
- public StopSorterByDistance(Location locToCompare) {
- this.locToCompare = locToCompare;
+ public StopSorterByDistance(GPSPoint geoPoint) {
+ latitude = geoPoint.getLatitude();
+ longitude = geoPoint.getLongitude();
}
-
@Override
public int compare(Stop o1, Stop o2) {
- return (int) (o1.getDistanceFromLocation(locToCompare)-o2.getDistanceFromLocation(locToCompare));
+ return (int) (o1.getDistanceFromLocation(latitude, longitude)-o2.getDistanceFromLocation(latitude, longitude));
}
}
diff --git a/app/src/main/java/it/reyboz/bustorino/viewmodels/NearbyStopsViewModel.kt b/app/src/main/java/it/reyboz/bustorino/viewmodels/NearbyStopsViewModel.kt
new file mode 100644
--- /dev/null
+++ b/app/src/main/java/it/reyboz/bustorino/viewmodels/NearbyStopsViewModel.kt
@@ -0,0 +1,75 @@
+package it.reyboz.bustorino.viewmodels
+
+import android.app.Application
+import android.location.Location
+import android.util.Log
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.MutableLiveData
+import it.reyboz.bustorino.backend.GPSPoint
+import it.reyboz.bustorino.backend.Stop
+import it.reyboz.bustorino.data.OldDataRepository
+import java.util.ArrayList
+import java.util.concurrent.Executors
+
+class NearbyStopsViewModel(application: Application): AndroidViewModel(application) {
+
+ private val executor = Executors.newFixedThreadPool(2)
+ private val oldRepo = OldDataRepository(executor, application)
+
+
+ val locationLiveData = MutableLiveData<GPSPoint>()
+ val distanceMtLiveData = MutableLiveData<Int>(40)
+
+
+ val stopsAtDistance = MutableLiveData<ArrayList<Stop>>()
+
+ private val callback =
+ OldDataRepository.Callback<ArrayList<Stop>> { res ->
+ if(res.isSuccess){
+ stopsAtDistance.postValue(res.result)
+ Log.d(DEBUG_TAG, "Setting value of stops in bounding box")
+ }
+ }
+
+ /**
+ * Request stop in location [latitude], [longitude], at distance [distanceMeters]
+ * If [saveValues] is true, store the position and the distance used
+ */
+ fun requestStopsAtDistance(latitude: Double, longitude: Double, distanceMeters: Int, saveValues: Boolean){
+ if(saveValues){
+ locationLiveData.postValue(GPSPoint(latitude, longitude))
+ distanceMtLiveData.postValue(distanceMeters)
+ }
+ oldRepo.requestStopsWithinDistance(latitude, longitude, distanceMeters, callback)
+ }
+
+ /**
+ * Request stops using the previously saved location
+ */
+ fun requestStopsAtDistance(distanceMeters: Int, saveValue: Boolean){
+ if(saveValue){
+ distanceMtLiveData.postValue(distanceMeters)
+ }
+ oldRepo.requestStopsWithinDistance(
+ locationLiveData.value!!.latitude,
+ locationLiveData.value!!.longitude, distanceMeters, callback)
+ }
+
+
+ fun setLocation(location: Location){
+ locationLiveData.postValue(GPSPoint(location.latitude, location.longitude))
+ }
+ fun setLocation(location: GPSPoint){
+ locationLiveData.postValue(location)
+ }
+ fun setLastDistance(distanceMeters: Int){
+ distanceMtLiveData.postValue(distanceMeters)
+ }
+
+
+
+
+ companion object{
+ private const val DEBUG_TAG = "BusTO-NearbyStopVwModel"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/top_bottom_border_radius.xml b/app/src/main/res/drawable/top_bottom_border_radius.xml
new file mode 100644
--- /dev/null
+++ b/app/src/main/res/drawable/top_bottom_border_radius.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <solid android:color="@color/black" />
+ <corners
+ android:bottomLeftRadius="10dp"
+ android:bottomRightRadius="10dp"
+ android:topLeftRadius="10dp"
+ android:topRightRadius="10dp" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/top_bottom_border_radius_with_border.xml b/app/src/main/res/drawable/top_bottom_border_radius_with_border.xml
new file mode 100644
--- /dev/null
+++ b/app/src/main/res/drawable/top_bottom_border_radius_with_border.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <solid android:color="@color/black" />
+ <stroke
+ android:width="2dip"
+ android:color="@color/black_900" />
+ <corners
+ android:bottomLeftRadius="10dp"
+ android:bottomRightRadius="10dp"
+ android:topLeftRadius="10dp"
+ android:topRightRadius="10dp" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_arrivals.xml b/app/src/main/res/layout/fragment_arrivals.xml
--- a/app/src/main/res/layout/fragment_arrivals.xml
+++ b/app/src/main/res/layout/fragment_arrivals.xml
@@ -5,7 +5,41 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
- android:paddingTop="8dp">
+ android:paddingTop="8dp"
+ android:animateLayoutChanges="true">
+ <TextView
+ android:id="@+id/howDoesItWorkTextView"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="16dp"
+ android:layout_marginEnd="16dp"
+ android:layout_marginLeft="16dip"
+ android:layout_marginRight="16dp"
+ android:layout_marginStart="16dip"
+ android:layout_marginTop="10dp"
+ android:layout_toLeftOf="@+id/hideHintButton"
+ android:layout_toStartOf="@+id/hideHintButton"
+ android:text="@string/howDoesItWork"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textColor="@color/blue_500"
+ android:visibility="gone" android:layout_alignParentTop="true"/>
+
+ <Button
+ android:id="@+id/hideHintButton"
+ style="?android:attr/buttonStyleSmall"
+ android:layout_width="85dip"
+ android:layout_height="wrap_content"
+ android:layout_alignBottom="@+id/howDoesItWorkTextView"
+ android:layout_alignParentEnd="true"
+ android:layout_alignParentRight="true"
+ android:layout_marginEnd="16dp"
+ android:layout_marginRight="16dp"
+ android:layout_marginBottom="5dp"
+ android:background="@drawable/route_background_bus"
+ android:text="@string/hint_button"
+ android:textColor="@color/grey_100"
+ android:textSize="19sp"
+ android:visibility="gone" />
<androidx.cardview.widget.CardView
android:id="@+id/messageCardView"
@@ -13,6 +47,9 @@
android:layout_height="wrap_content"
app:cardCornerRadius="5dp"
app:cardElevation="2dp"
+ android:layout_below="@id/howDoesItWorkTextView"
+ android:layout_marginStart="5dp"
+ android:layout_marginEnd="5dp"
>
<TextView
diff --git a/app/src/main/res/layout/fragment_lines_detail.xml b/app/src/main/res/layout/fragment_lines_detail.xml
--- a/app/src/main/res/layout/fragment_lines_detail.xml
+++ b/app/src/main/res/layout/fragment_lines_detail.xml
@@ -34,7 +34,7 @@
android:id="@+id/routeDescrTextView"
app:layout_constraintStart_toStartOf="parent"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
- android:textColor="@color/grey_600"
+ android:textColor="?android:attr/textColorPrimary"
android:gravity="center_vertical"
android:textSize="18sp"
android:layout_marginLeft="10dp"
diff --git a/app/src/main/res/layout/fragment_main_screen.xml b/app/src/main/res/layout/fragment_main_screen.xml
--- a/app/src/main/res/layout/fragment_main_screen.xml
+++ b/app/src/main/res/layout/fragment_main_screen.xml
@@ -97,38 +97,7 @@
android:indeterminateOnly="true"
android:visibility="gone" />
- <TextView
- android:id="@+id/howDoesItWorkTextView"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="5dp"
- android:layout_marginEnd="16dp"
- android:layout_marginLeft="16dip"
- android:layout_marginRight="16dp"
- android:layout_marginStart="16dip"
- android:layout_marginTop="10dp"
- android:layout_toLeftOf="@+id/hideHintButton"
- android:layout_toStartOf="@+id/hideHintButton"
- android:text="@string/howDoesItWork"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="@color/blue_500"
- android:visibility="gone" android:layout_below="@+id/searchButton"/>
- <Button
- android:id="@+id/hideHintButton"
- style="?android:attr/buttonStyleSmall"
- android:layout_width="85dip"
- android:layout_height="wrap_content"
- android:layout_alignBottom="@+id/howDoesItWorkTextView"
- android:layout_alignParentEnd="true"
- android:layout_alignParentRight="true"
- android:layout_marginEnd="16dp"
- android:layout_marginRight="16dp"
- android:background="@drawable/route_background_bus"
- android:text="@string/hint_button"
- android:textColor="@color/grey_100"
- android:textSize="19sp"
- android:visibility="gone" />
<androidx.coordinatorlayout.widget.CoordinatorLayout
@@ -139,7 +108,7 @@
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_gravity="bottom|end"
- android:layout_below="@+id/howDoesItWorkTextView"
+ android:layout_below="@+id/searchButton"
>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -3,7 +3,7 @@
<color name="orange_500">#ff9800</color>
<color name="orange_700">#F57C00</color>
- <color name="orange_700_40light"> #cc6600</color>
+ <color name="orange_700_40light">#cc6600</color>
<color name="orange_700_30light">#994d00</color>
<color name="blue_500">#2196F3</color>
<color name="blue_620">#2a65e8</color>
@@ -43,5 +43,13 @@
<color name="line_drawn_poly">@color/red_dark</color>
<color name="bus_marker_color">@color/blue_extra</color>
+ <color name="light_blue_600">#FF039BE5</color>
+ <color name="light_blue_900">#FF01579B</color>
+ <color name="light_blue_A200">#FF40C4FF</color>
+ <color name="light_blue_A400">#FF00B0FF</color>
+ <color name="black_overlay">#66000000</color>
+
+
+ <color name="colorTransparent">#00000000</color>
</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -51,5 +51,25 @@
<item name="editTextPreferenceStyle">@style/Preference.DialogPreference.EditTextPreference</item>
<item name="preferenceFragmentListStyle">@style/PreferenceFragmentList</item>
</style>
+ <style name="Widget.AppTheme.NoActionBar.ActionBar.Fullscreen" parent="Widget.AppCompat.ActionBar">
+ <item name="android:background">@color/black_overlay</item>
+ </style>
+
+ <style name="Widget.AppTheme.NoActionBar.ButtonBar.Fullscreen" parent="">
+ <item name="android:background">@color/black_overlay</item>
+ <item name="android:buttonBarStyle">?android:attr/buttonBarStyle</item>
+ </style>
+
+ <!-- styles that support night mode -->
+ <style name="AppThemeDayNight" parent="Theme.MaterialComponents.DayNight">
+ </style>
+
+ <style name="AppThemeDayNight.NoActionBar" parent="AppThemeDayNight">
+
+ <item name="android:windowTranslucentStatus">false</item>
+
+ <item name="windowActionBar">false</item>
+ <item name="windowNoTitle">true</item>
+ </style>
</resources>
\ No newline at end of file

File Metadata

Mime Type
text/plain
Expires
Wed, Oct 23, 21:44 (12 h, 22 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
642103
Default Alt Text
D131.1729712654.diff (52 KB)

Event Timeline