Author: Adam Pioterek <adam.pioterek@protonmail.ch>
favourite fab hidden, searchbar hamburger hidden
app/src/main/java/ml/adamsprogs/bimba/activities/StopActivity.kt | 52 + app/src/main/java/ml/adamsprogs/bimba/models/StopSuggestion.kt | 3 app/src/main/java/ml/adamsprogs/bimba/models/Timetable.kt | 14 app/src/main/res/drawable/logo.xml | 40 app/src/main/res/drawable/logo_96.xml | 40 app/src/main/res/layout/activity_main.xml | 2 app/src/main/res/layout/activity_stop.xml | 8 app/src/main/res/values-pl/strings.xml | 1 app/src/main/res/values/strings.xml | 1 build.gradle | 2
diff --git a/app/src/main/java/ml/adamsprogs/bimba/activities/StopActivity.kt b/app/src/main/java/ml/adamsprogs/bimba/activities/StopActivity.kt index ba9207ae0256dc52b97fcb754903f41bd59f5093..33cce2f47bec51a56085f45083dc0b8fabe48452 100644 --- a/app/src/main/java/ml/adamsprogs/bimba/activities/StopActivity.kt +++ b/app/src/main/java/ml/adamsprogs/bimba/activities/StopActivity.kt @@ -1,26 +1,21 @@ package ml.adamsprogs.bimba.activities -import android.content.Intent -import android.content.IntentFilter +import java.util.* +import kotlin.collections.* + +import android.content.* +import android.os.Bundle +import android.view.* import android.support.design.widget.* import android.support.v7.app.AppCompatActivity -import android.support.v7.widget.Toolbar - +import android.support.v7.widget.* import android.support.v4.app.* -import android.support.v4.view.ViewPager -import android.os.Bundle +import android.support.v4.view.* import android.support.v4.content.res.ResourcesCompat -import android.support.v4.view.PagerAdapter -import android.view.* +import com.google.gson.Gson import ml.adamsprogs.bimba.models.* -import android.support.v7.widget.* -import ml.adamsprogs.bimba.MessageReceiver -import ml.adamsprogs.bimba.R -import ml.adamsprogs.bimba.VmClient -import java.util.* -import kotlin.collections.ArrayList -import kotlin.collections.HashMap +import ml.adamsprogs.bimba.* class StopActivity : AppCompatActivity(), MessageReceiver.OnVmListener { @@ -34,9 +29,10 @@ private lateinit var timetable: Timetable private val today = Calendar.getInstance() private lateinit var tabLayout: TabLayout private var timer = Timer() - private lateinit var timerTask:TimerTask + private lateinit var timerTask: TimerTask private val context = this - val receiver = MessageReceiver() + private val receiver = MessageReceiver() + private lateinit var sharedPreferences: SharedPreferences override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -46,6 +42,8 @@ stopSymbol = intent.getStringExtra("stopSymbol") val toolbar = findViewById(R.id.toolbar) as Toolbar setSupportActionBar(toolbar) + + sharedPreferences = this.getSharedPreferences("ml.adamsprogs.bimba.prefs", Context.MODE_PRIVATE) createTimerTask() @@ -68,10 +66,22 @@ scheduleRefresh() val fab = findViewById(R.id.fab) as FloatingActionButton - fab.setOnClickListener { view -> - Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) - .setAction("Action", null).show() - //todo favourites + fab.setOnClickListener { + var favouritesString = sharedPreferences.getString("favourites", "{}") + @Suppress("UNCHECKED_CAST") + val favourites = Gson().fromJson(favouritesString, HashMap::class.java) as HashMap<String, ArrayList<HashMap<String,String>>> + if (favourites[stopSymbol] == null) { + val items = ArrayList<HashMap<String, String>>() + timetable.getLines(stopId)?.forEach {items.add(mapOf("stop" to stopId, "line" to it) as HashMap<String, String>)} + favourites[stopSymbol] = items + favouritesString = Gson().toJson(favourites) + val editor = sharedPreferences.edit() + editor.putString("favourites", favouritesString) + editor.apply() + } else { + Snackbar.make(it, getString(R.string.stop_already_fav), Snackbar.LENGTH_LONG) + .setAction("Action", null).show() + } } } diff --git a/app/src/main/java/ml/adamsprogs/bimba/models/StopSuggestion.kt b/app/src/main/java/ml/adamsprogs/bimba/models/StopSuggestion.kt index 17575f35683703f5558f3aac2435b66982afb190..78a96302b0a4b9131a086c8b47e2a1dffad29263 100644 --- a/app/src/main/java/ml/adamsprogs/bimba/models/StopSuggestion.kt +++ b/app/src/main/java/ml/adamsprogs/bimba/models/StopSuggestion.kt @@ -6,11 +6,12 @@ import com.arlib.floatingsearchview.suggestions.model.SearchSuggestion class StopSuggestion(text: String, val id: String, val symbol: String) : SearchSuggestion { private val body: String = text + val CONTENTS_SUGGESTION = 0x0105 constructor(parcel: Parcel) : this(parcel.readString(), parcel.readString(), parcel.readString()) override fun describeContents(): Int { - TODO("not implemented") + return CONTENTS_SUGGESTION } override fun writeToParcel(dest: Parcel?, flags: Int) { diff --git a/app/src/main/java/ml/adamsprogs/bimba/models/Timetable.kt b/app/src/main/java/ml/adamsprogs/bimba/models/Timetable.kt index 378470947c073f310921580c205969b2f9dc958e..29a461fe6601c42513e9ddea85ca0febb445e3de 100644 --- a/app/src/main/java/ml/adamsprogs/bimba/models/Timetable.kt +++ b/app/src/main/java/ml/adamsprogs/bimba/models/Timetable.kt @@ -87,6 +87,20 @@ cursor.close() return departures } + fun getLines(stopId: String?): ArrayList<String>? { + if (db == null) + return null + val cursor = db!!.rawQuery(" select distinct line_id from timetables join " + + "stops on(stop_id = stops.id) where stops.id = ?;", + listOf(stopId).toTypedArray()) + val lines = ArrayList<String>() + while (cursor.moveToNext()) { + lines.add(cursor.getString(1)) + } + cursor.close() + return lines + } + fun close() { db?.close() } diff --git a/app/src/main/res/drawable/logo.xml b/app/src/main/res/drawable/logo.xml index b6e67b51959159b1bd4c38e9dab4cd2e2b568ab8..78cc2b9c53c070fceb97653bf55f8227f6635069 100644 --- a/app/src/main/res/drawable/logo.xml +++ b/app/src/main/res/drawable/logo.xml @@ -1,24 +1,18 @@ -<vector android:height="24dp" android:viewportHeight="512.0" - android:viewportWidth="512.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - <path android:fillAlpha="1" android:fillColor="#17ff00" - android:pathData="M0.1,0.1h511.7v511.7h-511.7z" - android:strokeAlpha="0" android:strokeColor="#ffffff" android:strokeWidth="0.26262632"/> - <path android:fillAlpha="1" android:fillColor="#ffff00" - android:pathData="M257.1,53.7m-40.6,0a40.6,40.6 49.3,1 1,81.3 0a40.6,40.6 49.3,1 1,-81.3 0" - android:strokeAlpha="0" android:strokeColor="#ffffff" android:strokeWidth="0.26458332"/> - <path android:fillAlpha="1" android:fillColor="#ffff00" - android:pathData="M262.9,450.9m-40.6,0a40.6,40.6 105.4,1 1,81.3 0a40.6,40.6 0,1 1,-81.3 0" - android:strokeAlpha="0" android:strokeColor="#ffffff" android:strokeWidth="0.26458332"/> - <path android:fillAlpha="1" android:fillColor="#ffff00" - android:pathData="M47.4,256.3l14.2,-14.2l211.1,211.1l-14.2,14.2z" - android:strokeAlpha="0" android:strokeColor="#ffffff" android:strokeWidth="0.08697488"/> - <path android:fillAlpha="1" android:fillColor="#ffff00" - android:pathData="M258.5,45.1l14.2,14.2l-211.1,211.1l-14.2,-14.2z" - android:strokeAlpha="0" android:strokeColor="#ffffff" android:strokeWidth="0.08697488"/> - <path android:fillAlpha="1" android:fillColor="#ffff00" - android:pathData="M469.6,256.3l-14.2,14.2l-211.1,-211.1l14.2,-14.2z" - android:strokeAlpha="0" android:strokeColor="#ffffff" android:strokeWidth="0.08697488"/> - <path android:fillAlpha="1" android:fillColor="#ffff00" - android:pathData="M258.5,467.4l-14.2,-14.2l211.1,-211.1l14.2,14.2z" - android:strokeAlpha="0" android:strokeColor="#ffffff" android:strokeWidth="0.08697488"/> +<vector android:height="48dp" android:viewportHeight="200.0" + android:viewportWidth="200.0" android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillAlpha="1" android:fillColor="#087f23" + android:pathData="M16,4L184,4A12,12 0,0 1,196 16L196,184A12,12 0,0 1,184 196L16,196A12,12 0,0 1,4 184L4,16A12,12 0,0 1,16 4z" + android:strokeAlpha="1" android:strokeColor="#00000000" android:strokeWidth="2.96499991"/> + <path android:fillAlpha="1" android:fillColor="#ffeb3b" + android:pathData="m90.79,14.19 l-1.44,0.12 1,11.88L87.22,26.19l0,3.33l1.35,0l0,3.04l3.92,0L14.39,109.11a3.73,3.73 122.85,0 0,-1.33 -0.25,3.73 3.73,118.9 0,0 -3.73,3.73 3.73,3.73 118.9,0 0,3.73 3.73,3.73 3.73,126.47 0,0 1.19,-0.2L77.96,174.18l-4.47,0l0,6.36l1.66,0l0,6.46l45.65,0l0,-6.46l1.71,0l0,-6.36l-2.63,0L182.57,117.04a3.73,3.73 53.96,0 0,0.37 0.02,3.73 3.73,0 0,0 3.73,-3.73 3.73,3.73 60.36,0 0,-3.73 -3.73,3.73 3.73,82.52 0,0 -1.63,0.38L102.3,32.55l5.41,0L107.72,29.51l1.06,0L108.78,26.19l-3.2,0l0.73,-11.66 -1.44,-0.09 -0.73,11.75l-12.32,0zM97.02,32.55l0.75,0L179.32,112.49a3.73,3.73 53.96,0 0,-0.1 0.85,3.73 3.73,64.83 0,0 0.56,1.96L115.17,174.18L82.67,174.18L16.54,113.91a3.73,3.73 122.85,0 0,0.24 -1.32,3.73 3.73,0 0,0 -0.2,-1.19z" + android:strokeAlpha="1" android:strokeColor="#00000000" android:strokeWidth="11.20629883"/> + <path android:fillAlpha="0.2" android:fillColor="#ffffff" + android:pathData="M15.91,3.9C9.26,3.9 3.9,9.25 3.9,15.9L3.9,20C3.9,13.35 9.26,8 15.91,8L184.09,8C190.74,8 196.1,13.35 196.1,20L196.1,15.9C196.1,9.25 190.74,3.9 184.09,3.9L15.91,3.9z" + android:strokeAlpha="1" android:strokeColor="#00000000" android:strokeWidth="11.21213341"/> + <path android:fillAlpha="0.2" android:fillColor="#000000" + android:pathData="M15.91,196C9.26,196 3.9,190.65 3.9,184v-4.1c0,6.65 5.36,12 12.01,12L184.09,191.9c6.65,0 12.01,-5.35 12.01,-12v4.1c0,6.65 -5.36,12 -12.01,12z" + android:strokeAlpha="1" android:strokeColor="#00000000" android:strokeWidth="2.96654367"/> + <path android:fillAlpha="0.2" android:fillColor="#FF000000" + android:pathData="M4,4h192v192h-192z" android:strokeAlpha="0.2" + android:strokeColor="#00000000" android:strokeWidth="2.96499991"/> </vector> diff --git a/app/src/main/res/drawable/logo_96.xml b/app/src/main/res/drawable/logo_96.xml index 854575ea8837fcbb29cf10b37abe26f29af11f17..1edda14094f509822bb341f7b73c5db2d3134208 100644 --- a/app/src/main/res/drawable/logo_96.xml +++ b/app/src/main/res/drawable/logo_96.xml @@ -1,24 +1,18 @@ -<vector android:height="96dp" android:viewportHeight="512.0" - android:viewportWidth="512.0" android:width="96dp" xmlns:android="http://schemas.android.com/apk/res/android"> - <path android:fillAlpha="1" android:fillColor="#17ff00" - android:pathData="M0.1,0.1h511.7v511.7h-511.7z" - android:strokeAlpha="0" android:strokeColor="#ffffff" android:strokeWidth="0.26262632"/> - <path android:fillAlpha="1" android:fillColor="#ffff00" - android:pathData="M257.1,53.7m-40.6,0a40.6,40.6 49.3,1 1,81.3 0a40.6,40.6 49.3,1 1,-81.3 0" - android:strokeAlpha="0" android:strokeColor="#ffffff" android:strokeWidth="0.26458332"/> - <path android:fillAlpha="1" android:fillColor="#ffff00" - android:pathData="M262.9,450.9m-40.6,0a40.6,40.6 105.4,1 1,81.3 0a40.6,40.6 0,1 1,-81.3 0" - android:strokeAlpha="0" android:strokeColor="#ffffff" android:strokeWidth="0.26458332"/> - <path android:fillAlpha="1" android:fillColor="#ffff00" - android:pathData="M47.4,256.3l14.2,-14.2l211.1,211.1l-14.2,14.2z" - android:strokeAlpha="0" android:strokeColor="#ffffff" android:strokeWidth="0.08697488"/> - <path android:fillAlpha="1" android:fillColor="#ffff00" - android:pathData="M258.5,45.1l14.2,14.2l-211.1,211.1l-14.2,-14.2z" - android:strokeAlpha="0" android:strokeColor="#ffffff" android:strokeWidth="0.08697488"/> - <path android:fillAlpha="1" android:fillColor="#ffff00" - android:pathData="M469.6,256.3l-14.2,14.2l-211.1,-211.1l14.2,-14.2z" - android:strokeAlpha="0" android:strokeColor="#ffffff" android:strokeWidth="0.08697488"/> - <path android:fillAlpha="1" android:fillColor="#ffff00" - android:pathData="M258.5,467.4l-14.2,-14.2l211.1,-211.1l14.2,14.2z" - android:strokeAlpha="0" android:strokeColor="#ffffff" android:strokeWidth="0.08697488"/> +<vector android:height="96dp" android:viewportHeight="200.0" + android:viewportWidth="200.0" android:width="96dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillAlpha="1" android:fillColor="#087f23" + android:pathData="M16,4L184,4A12,12 0,0 1,196 16L196,184A12,12 0,0 1,184 196L16,196A12,12 0,0 1,4 184L4,16A12,12 0,0 1,16 4z" + android:strokeAlpha="1" android:strokeColor="#00000000" android:strokeWidth="2.96499991"/> + <path android:fillAlpha="1" android:fillColor="#ffeb3b" + android:pathData="m90.79,14.19 l-1.44,0.12 1,11.88L87.22,26.19l0,3.33l1.35,0l0,3.04l3.92,0L14.39,109.11a3.73,3.73 122.85,0 0,-1.33 -0.25,3.73 3.73,118.9 0,0 -3.73,3.73 3.73,3.73 118.9,0 0,3.73 3.73,3.73 3.73,126.47 0,0 1.19,-0.2L77.96,174.18l-4.47,0l0,6.36l1.66,0l0,6.46l45.65,0l0,-6.46l1.71,0l0,-6.36l-2.63,0L182.57,117.04a3.73,3.73 53.96,0 0,0.37 0.02,3.73 3.73,0 0,0 3.73,-3.73 3.73,3.73 60.36,0 0,-3.73 -3.73,3.73 3.73,82.52 0,0 -1.63,0.38L102.3,32.55l5.41,0L107.72,29.51l1.06,0L108.78,26.19l-3.2,0l0.73,-11.66 -1.44,-0.09 -0.73,11.75l-12.32,0zM97.02,32.55l0.75,0L179.32,112.49a3.73,3.73 53.96,0 0,-0.1 0.85,3.73 3.73,64.83 0,0 0.56,1.96L115.17,174.18L82.67,174.18L16.54,113.91a3.73,3.73 122.85,0 0,0.24 -1.32,3.73 3.73,0 0,0 -0.2,-1.19z" + android:strokeAlpha="1" android:strokeColor="#00000000" android:strokeWidth="11.20629883"/> + <path android:fillAlpha="0.2" android:fillColor="#ffffff" + android:pathData="M15.91,3.9C9.26,3.9 3.9,9.25 3.9,15.9L3.9,20C3.9,13.35 9.26,8 15.91,8L184.09,8C190.74,8 196.1,13.35 196.1,20L196.1,15.9C196.1,9.25 190.74,3.9 184.09,3.9L15.91,3.9z" + android:strokeAlpha="1" android:strokeColor="#00000000" android:strokeWidth="11.21213341"/> + <path android:fillAlpha="0.2" android:fillColor="#000000" + android:pathData="M15.91,196C9.26,196 3.9,190.65 3.9,184v-4.1c0,6.65 5.36,12 12.01,12L184.09,191.9c6.65,0 12.01,-5.35 12.01,-12v4.1c0,6.65 -5.36,12 -12.01,12z" + android:strokeAlpha="1" android:strokeColor="#00000000" android:strokeWidth="2.96654367"/> + <path android:fillAlpha="0.2" android:fillColor="#FF000000" + android:pathData="M4,4h192v192h-192z" android:strokeAlpha="0.2" + android:strokeColor="#00000000" android:strokeWidth="2.96499991"/> </vector> diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index f8601b3ceeeacd90fea031f2d262ae969d0b8d68..c18b6115de3cd974a2f3fac976630ff35e48beab 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -17,7 +17,7 @@ android:id="@+id/search_view" android:layout_width="match_parent" android:layout_height="match_parent" app:floatingSearch_close_search_on_keyboard_dismiss="true" - app:floatingSearch_leftActionMode="showHamburger" + app:floatingSearch_leftActionMode="showSearch" app:floatingSearch_searchBarMarginLeft="16dp" app:floatingSearch_searchBarMarginRight="16dp" app:floatingSearch_searchBarMarginTop="16dp" diff --git a/app/src/main/res/layout/activity_stop.xml b/app/src/main/res/layout/activity_stop.xml index 86a729521afcd4b934b2a58541fba5bba648d932..b36285d541bc1d4833dbe2550150d8bc7630f925 100644 --- a/app/src/main/res/layout/activity_stop.xml +++ b/app/src/main/res/layout/activity_stop.xml @@ -16,17 +16,16 @@ android:layout_height="wrap_content" android:paddingTop="@dimen/appbar_padding_top" android:theme="@style/AppTheme.AppBarOverlay"> + <!--suppress AndroidDomInspection --> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:layout_weight="1" - android:background="?attr/colorPrimary" + android:background="@color/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/AppTheme.PopupOverlay" - app:title="@string/app_name"> - - </android.support.v7.widget.Toolbar> + app:title="@string/app_name" /> <android.support.design.widget.TabLayout android:id="@+id/tabs" @@ -66,6 +65,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end|bottom" android:layout_margin="@dimen/fab_margin" + android:visibility="gone" app:srcCompat="@drawable/ic_favourite" /> </android.support.design.widget.CoordinatorLayout> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 20ab2a24fb33ddcc4ee2667bac4d46107eccabd2..01718d6790b7e077858dbdceef2f2025c4097d4e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -21,4 +21,5 @@Timetable is up-to-date <string name="validity_failed">Downloaded timetable is corrupted – can’t update</string> <string name="error_try_later">Error. Try again later</string> <string name="now">Now</string> + <string name="stop_already_fav">This stop is already in favourites</string> </resources> diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 034ecb4ab5c139d457d199482a5352a125b6cbc3..3ab41cc7ffb8d0e04daa8ddc5362e1b1ae7bb473 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -18,4 +18,5 @@Pobrany rozkład jest uszkodzony – nie można zaktualizować <string name="no_connectivity">Brak połączenia z Internetem – nie można zaktualizować rozkładu</string> <string name="error_try_later">Błąd. Spróbuj ponownie później</string> <string name="now">Teraz</string> + <string name="stop_already_fav">Ten przystanek już jest pośród ulubionych</string> </resources> \ No newline at end of file diff --git a/build.gradle b/build.gradle index e1b541f3d33b5cc642d8981dfad18a4348b00246..a17181b4e20fe7923d7d694712f312bfb4f85801 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ maven { url 'https://maven.google.com' } google() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.0-alpha5' + classpath 'com.android.tools.build:gradle:3.0.0-alpha7' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong