diff --git a/.gitignore b/.gitignore index c1854210..731d4019 100644 --- a/.gitignore +++ b/.gitignore @@ -54,6 +54,9 @@ captures/ .idea/caches/ .idea/assetWizardSettings.xml +# Android Studio +.idea/deploymentTargetDropDown.xml + # Keystore files *.jks *.keystore @@ -68,3 +71,6 @@ google-services.json freeline.py freeline/ freeline_project_description.json + +# macos +.DS_Store \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 61a9130c..fb7f4a8a 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index d5d35ec4..5efd2f94 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,23 @@ - + + + + diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml deleted file mode 100644 index 7f68460d..00000000 --- a/.idea/runConfigurations.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 13714b4f..9f2ee76d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,22 +25,19 @@ apply plugin: 'com.google.android.gms.oss-licenses-plugin' apply plugin: 'com.google.firebase.crashlytics' android { - lintOptions { - abortOnError false - } signingConfigs { release } buildFeatures { dataBinding = true } - compileSdkVersion 29 + compileSdkVersion 30 defaultConfig { applicationId "org.gophillygo.app" - minSdkVersion 19 - targetSdkVersion 29 - versionCode 24 - versionName "1.3.0" + minSdkVersion 21 + targetSdkVersion 30 + versionCode 25 + versionName "1.4.0" vectorDrawables.useSupportLibrary = true multiDexEnabled = true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -57,6 +54,7 @@ android { shrinkResources false } release { + crunchPngs false minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' @@ -67,11 +65,11 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } - aaptOptions { - cruncherEnabled = false - } productFlavors { } + lint { + abortOnError false + } } dependencies { @@ -134,7 +132,7 @@ dependencies { implementation 'com.squareup.okhttp3:logging-interceptor:4.7.2' // Dagger 2 - def daggerVersion = '2.28' + def daggerVersion = '2.35.1' implementation "com.google.dagger:dagger:$daggerVersion" annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion" implementation "com.google.dagger:dagger-android:$daggerVersion" diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 06742cb5..59cc766b 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -59,7 +59,6 @@ # Top-level functions that can only be used by Kotlin. -dontwarn retrofit2.KotlinExtensions --dontwarn retrofit2.KotlinExtensions$* # With R8 full mode, it sees no subtypes of Retrofit interfaces since they are created with a Proxy # and replaces all potential values with null. Explicitly keeping the interfaces prevents this. @@ -104,6 +103,3 @@ # Crashlytics -keep class com.google.android.gms.** { *; } -keep class com.crashlytics.android.** { *; } - -# Search --keep class android.support.v7.widget.SearchView { *; } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7769c24f..1c43dfdf 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,14 +12,10 @@ --> - - - - + @@ -51,7 +48,8 @@ android:name="android.app.searchable" android:resource="@xml/searchable" /> - + @@ -131,7 +129,8 @@ + android:theme="@style/GpgDarkTextTheme" + android:exported="true"> @@ -183,6 +182,11 @@ android:authorities="org.gophillygo.app.provider" android:enabled="true" android:exported="false" /> + + + diff --git a/app/src/main/java/org/gophillygo/app/activities/BaseAttractionActivity.java b/app/src/main/java/org/gophillygo/app/activities/BaseAttractionActivity.java index 1b6220b1..0c15a051 100644 --- a/app/src/main/java/org/gophillygo/app/activities/BaseAttractionActivity.java +++ b/app/src/main/java/org/gophillygo/app/activities/BaseAttractionActivity.java @@ -246,6 +246,7 @@ public Location getCurrentLocation() { */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == GpgLocationUtils.PERMISSION_REQUEST_ID) { if (grantResults.length > 0) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { diff --git a/app/src/main/java/org/gophillygo/app/activities/EventDetailActivity.java b/app/src/main/java/org/gophillygo/app/activities/EventDetailActivity.java index 62718ff8..671b2bb7 100644 --- a/app/src/main/java/org/gophillygo/app/activities/EventDetailActivity.java +++ b/app/src/main/java/org/gophillygo/app/activities/EventDetailActivity.java @@ -182,9 +182,9 @@ public void addToCalendar(View view) { .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, startTime) .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime) .putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, !event.isSingleDayEvent()); - if (intent.resolveActivity(getPackageManager()) != null) { + try { startActivity(intent); - } else { + } catch(Exception ex) { Toast.makeText(this, R.string.event_detail_no_calendar, Toast.LENGTH_SHORT).show(); } } diff --git a/app/src/main/java/org/gophillygo/app/activities/EventsListActivity.java b/app/src/main/java/org/gophillygo/app/activities/EventsListActivity.java index 574eb995..dffd6267 100644 --- a/app/src/main/java/org/gophillygo/app/activities/EventsListActivity.java +++ b/app/src/main/java/org/gophillygo/app/activities/EventsListActivity.java @@ -136,26 +136,22 @@ public boolean onCreateOptionsMenu(Menu menu) { public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); Intent intent; - switch (itemId) { - case R.id.action_event_place: - Log.d(LOG_LABEL, "Selected event place menu item"); - intent = new Intent(this, PlacesListActivity.class); - intent.putExtra(FILTER_KEY, filter); - startActivity(intent); - break; - case R.id.action_event_map: - Log.d(LOG_LABEL, "Selected map menu item"); - intent = new Intent(this, EventsMapsActivity.class); - intent.putExtra(FILTER_KEY, filter); - startActivity(intent); - break; - case R.id.action_event_search: - Log.d(LOG_LABEL, "Selected search menu item"); - super.onSearchRequested(); - break; - default: - Log.w(LOG_LABEL, "Unrecognized menu item selected: " + itemId); - return super.onOptionsItemSelected(item); + if (itemId == R.id.action_event_place) { + Log.d(LOG_LABEL, "Selected event place menu item"); + intent = new Intent(this, PlacesListActivity.class); + intent.putExtra(FILTER_KEY, filter); + startActivity(intent); + } else if (itemId == R.id.action_event_map) { + Log.d(LOG_LABEL, "Selected map menu item"); + intent = new Intent(this, EventsMapsActivity.class); + intent.putExtra(FILTER_KEY, filter); + startActivity(intent); + } else if (itemId == R.id.action_event_search) { + Log.d(LOG_LABEL, "Selected search menu item"); + super.onSearchRequested(); + } else { + Log.w(LOG_LABEL, "Unrecognized menu item selected: " + itemId); + return super.onOptionsItemSelected(item); } return true; } diff --git a/app/src/main/java/org/gophillygo/app/activities/EventsMapsActivity.java b/app/src/main/java/org/gophillygo/app/activities/EventsMapsActivity.java index b8262e3b..ce8ad670 100644 --- a/app/src/main/java/org/gophillygo/app/activities/EventsMapsActivity.java +++ b/app/src/main/java/org/gophillygo/app/activities/EventsMapsActivity.java @@ -65,25 +65,21 @@ public boolean onCreateOptionsMenu(Menu menu) { public boolean onOptionsItemSelected(MenuItem item) { Intent intent; int itemId = item.getItemId(); - switch (itemId) { - case R.id.events_map_action_view_places: - Log.d(LOG_LABEL, "Selected map events menu item"); - intent = new Intent(this, PlacesMapsActivity.class); - intent.putExtra(FILTER_KEY, filter); - startActivity(intent); - break; - case R.id.events_map_action_map_search: - Log.d(LOG_LABEL, "Selected map search menu item"); - break; - case R.id.events_map_action_view_list: - Log.d(LOG_LABEL, "Selected to go back to list view from map"); - intent = new Intent(this, EventsListActivity.class); - intent.putExtra(FILTER_KEY, filter); - startActivity(intent); - break; - default: - Log.w(LOG_LABEL, "Unrecognized menu item selected: " + itemId); - return super.onOptionsItemSelected(item); + if (itemId == R.id.events_map_action_view_places) { + Log.d(LOG_LABEL, "Selected map events menu item"); + intent = new Intent(this, PlacesMapsActivity.class); + intent.putExtra(FILTER_KEY, filter); + startActivity(intent); + } else if (itemId == R.id.events_map_action_map_search) { + Log.d(LOG_LABEL, "Selected map search menu item"); + } else if (itemId == R.id.events_map_action_view_list) { + Log.d(LOG_LABEL, "Selected to go back to list view from map"); + intent = new Intent(this, EventsListActivity.class); + intent.putExtra(FILTER_KEY, filter); + startActivity(intent); + } else { + Log.w(LOG_LABEL, "Unrecognized menu item selected: " + itemId); + return super.onOptionsItemSelected(item); } return true; } diff --git a/app/src/main/java/org/gophillygo/app/activities/HomeActivity.java b/app/src/main/java/org/gophillygo/app/activities/HomeActivity.java index 0e9c33fc..5425a130 100644 --- a/app/src/main/java/org/gophillygo/app/activities/HomeActivity.java +++ b/app/src/main/java/org/gophillygo/app/activities/HomeActivity.java @@ -138,7 +138,7 @@ public Destination getDestinationAt(int position) { Log.d(LOG_LABEL, "Clicked item at " + position); Destination destination = getNearestDestination(position); if (destination != null) { - goToPlace((long)destination.getId()); + goToPlace(destination.getId()); } }); } @@ -153,19 +153,15 @@ public boolean onCreateOptionsMenu(Menu menu) { @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); - - switch (itemId) { - case R.id.action_settings: - Log.d(LOG_LABEL, "Clicked settings action"); - Intent intent = new Intent(this, GpgPreferenceActivity.class); - startActivity(intent); - break; - case R.id.action_home_search: - Log.d(LOG_LABEL, "searching from home view"); - break; - default: - Log.w(LOG_LABEL, "Unrecognized menu option selected: " + itemId); - return super.onOptionsItemSelected(item); + if (itemId == R.id.action_settings) { + Log.d(LOG_LABEL, "Clicked settings action"); + Intent intent = new Intent(this, GpgPreferenceActivity.class); + startActivity(intent); + } else if (itemId == R.id.action_home_search) { + Log.d(LOG_LABEL, "searching from home view"); + } else { + Log.w(LOG_LABEL, "Unrecognized menu option selected: " + itemId); + return super.onOptionsItemSelected(item); } return true; diff --git a/app/src/main/java/org/gophillygo/app/activities/PlacesListActivity.java b/app/src/main/java/org/gophillygo/app/activities/PlacesListActivity.java index 87192cb3..10ef026c 100644 --- a/app/src/main/java/org/gophillygo/app/activities/PlacesListActivity.java +++ b/app/src/main/java/org/gophillygo/app/activities/PlacesListActivity.java @@ -163,26 +163,22 @@ public boolean onCreateOptionsMenu(Menu menu) { public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); Intent intent; - switch (itemId) { - case R.id.action_place_list_events: - Log.d(LOG_LABEL, "Selected events menu item"); - intent = new Intent(this, EventsListActivity.class); - intent.putExtra(FILTER_KEY, filter); - startActivity(intent); - break; - case R.id.action_place_list_map: - Log.d(LOG_LABEL, "Selected map menu item"); - intent = new Intent(this, PlacesMapsActivity.class); - intent.putExtra(FILTER_KEY, filter); - startActivity(intent); - break; - case R.id.action_place_list_search: - Log.d(LOG_LABEL, "Selected search menu item"); - super.onSearchRequested(); - break; - default: - Log.w(LOG_LABEL, "Unrecognized menu item selected: " + itemId); - return super.onOptionsItemSelected(item); + if (itemId == R.id.action_place_list_events) { + Log.d(LOG_LABEL, "Selected events menu item"); + intent = new Intent(this, EventsListActivity.class); + intent.putExtra(FILTER_KEY, filter); + startActivity(intent); + } else if (itemId == R.id.action_place_list_map) { + Log.d(LOG_LABEL, "Selected map menu item"); + intent = new Intent(this, PlacesMapsActivity.class); + intent.putExtra(FILTER_KEY, filter); + startActivity(intent); + } else if(itemId == R.id.action_place_list_search) { + Log.d(LOG_LABEL, "Selected search menu item"); + super.onSearchRequested(); + } else { + Log.w(LOG_LABEL, "Unrecognized menu item selected: " + itemId); + return super.onOptionsItemSelected(item); } return true; } diff --git a/app/src/main/java/org/gophillygo/app/activities/PlacesMapsActivity.java b/app/src/main/java/org/gophillygo/app/activities/PlacesMapsActivity.java index 7b3a1d09..54f717ad 100644 --- a/app/src/main/java/org/gophillygo/app/activities/PlacesMapsActivity.java +++ b/app/src/main/java/org/gophillygo/app/activities/PlacesMapsActivity.java @@ -42,26 +42,22 @@ public boolean onCreateOptionsMenu(Menu menu) { public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); Intent intent; - switch (itemId) { - case R.id.places_map_action_view_events: - Log.d(LOG_LABEL, "Selected map events menu item"); - intent = new Intent(this, EventsMapsActivity.class); - intent.putExtra(FILTER_KEY, filter); - startActivity(intent); - break; - case R.id.places_map_action_view_list: - Log.d(LOG_LABEL, "Selected to go back to list view from map"); - intent = new Intent(this, PlacesListActivity.class); - intent.putExtra(FILTER_KEY, filter); - startActivity(intent); - break; - case R.id.places_map_action_map_search: - Log.d(LOG_LABEL, "Selected search menu item"); - super.onSearchRequested(); - break; - default: - Log.w(LOG_LABEL, "Unrecognized menu item selected: " + itemId); - return super.onOptionsItemSelected(item); + if (itemId == R.id.places_map_action_view_events) { + Log.d(LOG_LABEL, "Selected map events menu item"); + intent = new Intent(this, EventsMapsActivity.class); + intent.putExtra(FILTER_KEY, filter); + startActivity(intent); + } else if (itemId == R.id.places_map_action_view_list) { + Log.d(LOG_LABEL, "Selected to go back to list view from map"); + intent = new Intent(this, PlacesListActivity.class); + intent.putExtra(FILTER_KEY, filter); + startActivity(intent); + } else if (itemId == R.id.places_map_action_map_search) { + Log.d(LOG_LABEL, "Selected search menu item"); + super.onSearchRequested(); + } else { + Log.w(LOG_LABEL, "Unrecognized menu item selected: " + itemId); + return super.onOptionsItemSelected(item); } return true; } diff --git a/app/src/main/java/org/gophillygo/app/data/models/AttractionInfo.java b/app/src/main/java/org/gophillygo/app/data/models/AttractionInfo.java index 9593894d..17621cfb 100644 --- a/app/src/main/java/org/gophillygo/app/data/models/AttractionInfo.java +++ b/app/src/main/java/org/gophillygo/app/data/models/AttractionInfo.java @@ -44,21 +44,16 @@ int getFlagImage() { public void updateAttractionFlag(@MenuRes int menuId) { AttractionFlag.Option option; - switch (menuId) { - case R.id.place_option_not_interested: - option = AttractionFlag.Option.NotInterested; - break; - case R.id.place_option_liked: - option = AttractionFlag.Option.Liked; - break; - case R.id.place_option_been: - option = AttractionFlag.Option.Been; - break; - case R.id.place_option_want_to_go: - option = AttractionFlag.Option.WantToGo; - break; - default: - option = AttractionFlag.Option.NotSelected; + if (menuId == R.id.place_option_not_interested) { + option = AttractionFlag.Option.NotInterested; + } else if (menuId == R.id.place_option_liked) { + option = AttractionFlag.Option.Liked; + } else if (menuId == R.id.place_option_been) { + option = AttractionFlag.Option.Been; + } else if (menuId == R.id.place_option_want_to_go) { + option = AttractionFlag.Option.WantToGo; + } else { + option = AttractionFlag.Option.NotSelected; } // When selecting the option already selected, toggle it off if (flag != null && flag.getOption() == option) { diff --git a/app/src/main/res/drawable-v21/toggle_button_checked.xml b/app/src/main/res/drawable-v21/toggle_button_checked.xml deleted file mode 100644 index e43a5d4f..00000000 --- a/app/src/main/res/drawable-v21/toggle_button_checked.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - diff --git a/app/src/main/res/drawable-v21/toggle_button_toolbar_checked.xml b/app/src/main/res/drawable-v21/toggle_button_toolbar_checked.xml deleted file mode 100644 index e446fdbb..00000000 --- a/app/src/main/res/drawable-v21/toggle_button_toolbar_checked.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - diff --git a/app/src/main/res/drawable-v21/toggle_button_toolbar_unchecked.xml b/app/src/main/res/drawable-v21/toggle_button_toolbar_unchecked.xml deleted file mode 100644 index 82b5463e..00000000 --- a/app/src/main/res/drawable-v21/toggle_button_toolbar_unchecked.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - diff --git a/app/src/main/res/drawable-v21/toggle_button_unchecked.xml b/app/src/main/res/drawable-v21/toggle_button_unchecked.xml deleted file mode 100644 index e446fdbb..00000000 --- a/app/src/main/res/drawable-v21/toggle_button_unchecked.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - diff --git a/app/src/main/res/drawable/toggle_button_checked.xml b/app/src/main/res/drawable/toggle_button_checked.xml index 0b1e7cee..ec23ab92 100644 --- a/app/src/main/res/drawable/toggle_button_checked.xml +++ b/app/src/main/res/drawable/toggle_button_checked.xml @@ -1,4 +1,12 @@ - - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/toggle_button_toolbar_checked.xml b/app/src/main/res/drawable/toggle_button_toolbar_checked.xml index 8e3f2fda..6e1bc8e2 100644 --- a/app/src/main/res/drawable/toggle_button_toolbar_checked.xml +++ b/app/src/main/res/drawable/toggle_button_toolbar_checked.xml @@ -1,5 +1,12 @@ - - - + + + + + + + + diff --git a/app/src/main/res/drawable/toggle_button_toolbar_unchecked.xml b/app/src/main/res/drawable/toggle_button_toolbar_unchecked.xml index 18f4e285..e65d1ff1 100644 --- a/app/src/main/res/drawable/toggle_button_toolbar_unchecked.xml +++ b/app/src/main/res/drawable/toggle_button_toolbar_unchecked.xml @@ -1,5 +1,12 @@ - - - + + + + + + + + diff --git a/app/src/main/res/drawable/toggle_button_unchecked.xml b/app/src/main/res/drawable/toggle_button_unchecked.xml index 8e3f2fda..6e1bc8e2 100644 --- a/app/src/main/res/drawable/toggle_button_unchecked.xml +++ b/app/src/main/res/drawable/toggle_button_unchecked.xml @@ -1,5 +1,12 @@ - - - + + + + + + + + diff --git a/app/src/main/res/layout/activity_app_info.xml b/app/src/main/res/layout/activity_app_info.xml index d59d5ee4..283f3705 100644 --- a/app/src/main/res/layout/activity_app_info.xml +++ b/app/src/main/res/layout/activity_app_info.xml @@ -24,8 +24,7 @@ android:id="@+id/app_info_toolbar" style="@style/ToolbarTransparent" android:background="@color/color_primary" - app:title="@string/title_activity_app_info" - tools:targetApi="lollipop" /> + app:title="@string/title_activity_app_info" /> + style="@style/ToolbarTransparent" /> + app:title="@string/events_list_title" /> + app:title="@string/title_activity_events_maps" /> diff --git a/app/src/main/res/layout/activity_place_detail.xml b/app/src/main/res/layout/activity_place_detail.xml index c418d280..b55f2bcd 100644 --- a/app/src/main/res/layout/activity_place_detail.xml +++ b/app/src/main/res/layout/activity_place_detail.xml @@ -63,8 +63,7 @@ android:id="@+id/place_detail_toolbar" style="@style/ToolbarTransparent" app:layout_constraintTop_toTopOf="parent" - app:layout_constraintStart_toStartOf="parent" - tools:targetApi="lollipop" /> + app:layout_constraintStart_toStartOf="parent" /> + app:title="@string/places_list_title" /> + app:title="@string/title_activity_places_maps" /> + app:title="@string/preferences" /> + app:title="@string/title_activity_search" /> - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 28279e68..0aedc255 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -51,6 +51,7 @@ -