From fde3fdfab1e30ed06da1e8076280d19aee9f9fbb Mon Sep 17 00:00:00 2001 From: Tommaso Berlose Date: Tue, 31 Oct 2017 18:06:47 +0100 Subject: [PATCH] Add next alarm, add weather provider personal key --- app/build.gradle | 2 +- .../anotherwidget/object/Constants.kt | 2 + .../anotherwidget/ui/activity/MainActivity.kt | 29 +++++--- .../ui/activity/WeatherProviderActivity.kt | 21 ++++-- .../anotherwidget/ui/widget/TheWidget.kt | 32 +++++++-- .../tommasoberlose/anotherwidget/util/Util.kt | 68 ++++++++++++++++-- .../anotherwidget/util/WeatherUtil.kt | 40 +++-------- .../res/drawable-hdpi/ic_action_alarm.png | Bin 0 -> 1058 bytes .../res/drawable-mdpi/ic_action_alarm.png | Bin 0 -> 720 bytes .../res/drawable-xhdpi/ic_action_alarm.png | Bin 0 -> 1364 bytes .../res/drawable-xxhdpi/ic_action_alarm.png | Bin 0 -> 2277 bytes app/src/main/res/layout/activity_main.xml | 6 +- app/src/main/res/values-it-rIT/strings.xml | 7 +- app/src/main/res/values/strings.xml | 7 +- app/src/main/res/xml-v21/the_widget_info.xml | 13 ++++ app/src/main/res/xml/the_widget_info.xml | 11 ++- build.gradle | 2 +- 17 files changed, 171 insertions(+), 69 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/ic_action_alarm.png create mode 100644 app/src/main/res/drawable-mdpi/ic_action_alarm.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_action_alarm.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_alarm.png create mode 100644 app/src/main/res/xml-v21/the_widget_info.xml diff --git a/app/build.gradle b/app/build.gradle index e6e3de2..641501b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -41,7 +41,7 @@ dependencies { implementation 'com.mcxiaoke.volley:library:1.0.6@aar' implementation 'com.android.support:customtabs:26.1.0' implementation 'com.android.support:cardview-v7:26.1.0' - kapt 'com.android.databinding:compiler:2.3.3' + kapt 'com.android.databinding:compiler:3.0.0' implementation('com.crashlytics.sdk.android:crashlytics:2.7.0@aar') { transitive = true; } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/object/Constants.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/object/Constants.kt index cc7f617..ffc08ad 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/object/Constants.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/object/Constants.kt @@ -65,6 +65,8 @@ object Constants { val PREF_TEXT_SHADOW = "PREF_TEXT_SHADOW" val PREF_SHOW_DIFF_TIME = "PREF_SHOW_DIFF_TIME" val PREF_SHOW_DECLINED_EVENTS = "PREF_SHOW_DECLINED_EVENTS" + val PREF_OPEN_WEATHER_API_KEY = "PREF_OPEN_WEATHER_API_KEY" + val PREF_SECOND_ROW_INFORMATION = "PREF_SECOND_ROW_INFORMATION" val ACTION_EXTRA_OPEN_WEATHER_PROVIDER = "ACTION_EXTRA_OPEN_WEATHER_PROVIDER" diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activity/MainActivity.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activity/MainActivity.kt index 36bec50..8f096ec 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activity/MainActivity.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activity/MainActivity.kt @@ -30,6 +30,7 @@ import android.os.Build import android.support.design.widget.BottomSheetDialog import android.support.v4.content.ContextCompat import android.text.Html +import android.util.Log import android.util.TypedValue import android.widget.Toast import com.crashlytics.android.Crashlytics @@ -121,7 +122,8 @@ class MainActivity : AppCompatActivity() { if (mAppWidgetId > 0) { addNewWidget() } else { - super.onBackPressed() + setResult(Activity.RESULT_OK) + finish() } } @@ -260,7 +262,11 @@ class MainActivity : AppCompatActivity() { next_event_difference_time.visibility = View.GONE } - if (!e.address.equals("") && SP.getBoolean(Constants.PREF_SHOW_EVENT_LOCATION, false)) { + + if (SP.getInt(Constants.PREF_SECOND_ROW_INFORMATION, 0) == 2 && Util.getNextAlarm(this) != null) { + second_row_icon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_action_alarm)) + next_event_date.text = Util.getNextAlarm(this) + } else if (!e.address.equals("") && SP.getInt(Constants.PREF_SECOND_ROW_INFORMATION, 0) == 1) { second_row_icon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_action_location)) next_event_date.text = e.address } else { @@ -505,12 +511,16 @@ class MainActivity : AppCompatActivity() { updateAppWidget() } - show_location_label.text = if (SP.getBoolean(Constants.PREF_SHOW_EVENT_LOCATION, false)) getString(R.string.settings_show_location_subtitle_true) else getString(R.string.settings_show_location_subtitle_false) - action_show_location.setOnClickListener { - SP.edit().putBoolean(Constants.PREF_SHOW_EVENT_LOCATION, !SP.getBoolean(Constants.PREF_SHOW_EVENT_LOCATION, false)).commit() - Util.updateWidget(this) + second_row_info_label.text = getString(Util.getSecondRowInfoString(SP.getInt(Constants.PREF_SECOND_ROW_INFORMATION, 0))) + action_second_row_info.setOnClickListener { + SP.edit().putInt(Constants.PREF_SECOND_ROW_INFORMATION, when (SP.getInt(Constants.PREF_SECOND_ROW_INFORMATION, 0)) { + 0 -> 1 + 1 -> 2 + 2 -> 0 + else -> 0 + }).commit() updateSettings() - updateAppWidget() + sendBroadcast(Intent(Constants.ACTION_TIME_UPDATE)) } main_text_size_label.text = String.format("%.0f%s", SP.getFloat(Constants.PREF_TEXT_MAIN_SIZE, 24f), "sp") @@ -645,7 +655,10 @@ class MainActivity : AppCompatActivity() { label_weather_provider_api_key.text = getString(R.string.provider_google_awareness) alert_icon.visibility = View.GONE } else { - if (SP.getString(Constants.PREF_WEATHER_PROVIDER_API_KEY, "") == ("")) { + if (SP.getString(when (SP.getInt(Constants.PREF_WEATHER_PROVIDER, Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS)) { + Constants.WEATHER_PROVIDER_OPEN_WEATHER -> Constants.PREF_OPEN_WEATHER_API_KEY + else -> Constants.PREF_OPEN_WEATHER_API_KEY + }, "") == ("")) { label_weather_provider_api_key.text = getString(R.string.settings_weather_provider_api_key_subtitle_not_set) alert_icon.visibility = View.VISIBLE } else { diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activity/WeatherProviderActivity.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activity/WeatherProviderActivity.kt index e10d8f9..2a2ce54 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activity/WeatherProviderActivity.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activity/WeatherProviderActivity.kt @@ -41,7 +41,10 @@ class WeatherProviderActivity : AppCompatActivity() { action_save.setOnClickListener { SP.edit() - .putString(Constants.PREF_WEATHER_PROVIDER_API_KEY, api_key.text.toString()) + .putString(when (SP.getInt(Constants.PREF_WEATHER_PROVIDER, Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS)) { + Constants.WEATHER_PROVIDER_OPEN_WEATHER -> Constants.PREF_OPEN_WEATHER_API_KEY + else -> Constants.PREF_OPEN_WEATHER_API_KEY + }, api_key.text.toString()) .commit() setResult(Activity.RESULT_OK) finish() @@ -49,7 +52,11 @@ class WeatherProviderActivity : AppCompatActivity() { api_key.addTextChangedListener(object: TextWatcher { override fun afterTextChanged(text: Editable?) { - if (text.toString().equals("") || text.toString().equals(SP.getString(Constants.PREF_WEATHER_PROVIDER_API_KEY, ""))) { + if (text.toString().equals("") || text.toString().equals( + SP.getString(when (SP.getInt(Constants.PREF_WEATHER_PROVIDER, Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS)) { + Constants.WEATHER_PROVIDER_OPEN_WEATHER -> Constants.PREF_OPEN_WEATHER_API_KEY + else -> Constants.PREF_OPEN_WEATHER_API_KEY + }, ""))) { Util.collapse(button_container) } else { Util.expand(button_container) @@ -98,12 +105,18 @@ class WeatherProviderActivity : AppCompatActivity() { } Util.collapse(button_container) - api_key.setText(SP.getString(Constants.PREF_WEATHER_PROVIDER_API_KEY, "")) + api_key.setText(SP.getString(when (SP.getInt(Constants.PREF_WEATHER_PROVIDER, Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS)) { + Constants.WEATHER_PROVIDER_OPEN_WEATHER -> Constants.PREF_OPEN_WEATHER_API_KEY + else -> Constants.PREF_OPEN_WEATHER_API_KEY + }, "")) } override fun onBackPressed() { val SP = PreferenceManager.getDefaultSharedPreferences(this) - if (!SP.getInt(Constants.PREF_WEATHER_PROVIDER, Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS).equals(Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS) && (api_key.text.toString().equals("") || !api_key.text.toString().equals(SP.getString(Constants.PREF_WEATHER_PROVIDER_API_KEY, "")))) { + if (!SP.getInt(Constants.PREF_WEATHER_PROVIDER, Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS).equals(Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS) && (api_key.text.toString().equals("") || !api_key.text.toString().equals(SP.getString(when (SP.getInt(Constants.PREF_WEATHER_PROVIDER, Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS)) { + Constants.WEATHER_PROVIDER_OPEN_WEATHER -> Constants.PREF_OPEN_WEATHER_API_KEY + else -> Constants.PREF_OPEN_WEATHER_API_KEY + }, "")))) { AlertDialog.Builder(this) .setMessage(getString(R.string.error_weather_api_key)) .setNegativeButton(android.R.string.cancel, null) diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/widget/TheWidget.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/widget/TheWidget.kt index 5202061..1340d55 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/widget/TheWidget.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/widget/TheWidget.kt @@ -29,6 +29,7 @@ import android.net.Uri import android.widget.TextClock import android.widget.TextView import android.content.ComponentName +import android.content.res.Resources import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Color @@ -37,6 +38,7 @@ import android.os.Bundle import android.support.v4.content.ContextCompat.startActivity import android.provider.CalendarContract.Events import android.support.v4.content.ContextCompat +import android.util.DisplayMetrics import android.util.TypedValue import kotlinx.android.synthetic.main.the_widget.* import kotlinx.android.synthetic.main.the_widget.view.* @@ -48,6 +50,8 @@ import kotlinx.android.synthetic.main.the_widget.view.* class TheWidget : AppWidgetProvider() { override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { + Util.updateSettingsByDefault(context) + for (appWidgetId in appWidgetIds) { updateAppWidget(context, appWidgetManager, appWidgetId) } @@ -73,13 +77,21 @@ class TheWidget : AppWidgetProvider() { internal fun updateAppWidget(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int) { + val displayMetrics = Resources.getSystem().getDisplayMetrics() + val height = displayMetrics.heightPixels + val width = displayMetrics.widthPixels + val widgetInfo = appWidgetManager.getAppWidgetInfo(appWidgetId) + generateWidgetView(context, appWidgetId, appWidgetManager, width - Util.convertDpToPixel(32f, context).toInt(), widgetInfo.minHeight) + } + + fun generateWidgetView(context: Context, appWidgetId: Int, appWidgetManager: AppWidgetManager, w: Int, h: Int) { var views = RemoteViews(context.packageName, R.layout.the_widget_sans) var v = View.inflate(context, R.layout.the_widget, null) v = updateCalendarViewByLayout(context, v) v = updateLocationViewByLayout(context, v) v = updateClockViewByLayout(context, v) - views.setImageViewBitmap(R.id.bitmap_container, Util.getBitmapFromView(v)) + views.setImageViewBitmap(R.id.bitmap_container, Util.getBitmapFromView(v, w, h)) views = updateCalendarView(context, views, appWidgetId) views = updateLocationView(context, views, appWidgetId) @@ -104,7 +116,6 @@ class TheWidget : AppWidgetProvider() { views.setTextViewTextSize(R.id.divider2, TypedValue.COMPLEX_UNIT_SP, SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f)) views.setTextViewTextSize(R.id.calendar_temp, TypedValue.COMPLEX_UNIT_SP, SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f)) - appWidgetManager.updateAppWidget(appWidgetId, views) } @@ -138,7 +149,16 @@ class TheWidget : AppWidgetProvider() { views.setViewVisibility(R.id.next_event_difference_time, View.GONE) } - if (!e.address.equals("") && SP.getBoolean(Constants.PREF_SHOW_EVENT_LOCATION, false)) { + if (SP.getInt(Constants.PREF_SECOND_ROW_INFORMATION, 0) == 2 && Util.getNextAlarm(context) != null) { + val source = BitmapFactory.decodeResource(context.resources, R.drawable.ic_action_alarm); + val result = Util.changeBitmapColor(source, Util.getFontColor(SP)) + views.setImageViewBitmap(R.id.second_row_icon, result) + + views.setTextViewText(R.id.next_event_date, Util.getNextAlarm(context)) + + val clockIntent = PendingIntent.getActivity(context, widgetID, Util.getClockIntent(context), 0) + views.setOnClickPendingIntent(R.id.next_event_date, clockIntent) + } else if (e.address != "" && SP.getInt(Constants.PREF_SECOND_ROW_INFORMATION, 0) == 1) { val source = BitmapFactory.decodeResource(context.resources, R.drawable.ic_action_location); val result = Util.changeBitmapColor(source, Util.getFontColor(SP)) @@ -257,6 +277,7 @@ class TheWidget : AppWidgetProvider() { if (SP.getBoolean(Constants.PREF_ITA_FORMAT_DATE, false)) { dateStringValue = Util.getCapWordString(Constants.itDateFormat.format(now.time)) } + v.empty_date.text = dateStringValue if (calendarLayout) { @@ -271,7 +292,10 @@ class TheWidget : AppWidgetProvider() { v.next_event_difference_time.visibility = View.GONE } - if (!e.address.equals("") && SP.getBoolean(Constants.PREF_SHOW_EVENT_LOCATION, false)) { + if (SP.getInt(Constants.PREF_SECOND_ROW_INFORMATION, 0) == 2 && Util.getNextAlarm(context) != null) { + v.second_row_icon.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_action_alarm)) + v.next_event_date.text = Util.getNextAlarm(context) + } else if (!e.address.equals("") && SP.getInt(Constants.PREF_SECOND_ROW_INFORMATION, 0) == 1) { v.second_row_icon.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_action_location)) v.next_event_date.text = e.address } else { diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/util/Util.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/util/Util.kt index c1bdc61..44ab9a7 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/util/Util.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/util/Util.kt @@ -2,10 +2,7 @@ package com.tommasoberlose.anotherwidget.util import android.Manifest import android.annotation.SuppressLint -import android.app.Notification -import android.app.NotificationManager -import android.app.PendingIntent -import android.app.WallpaperManager +import android.app.* import android.appwidget.AppWidgetManager import android.content.* import android.content.pm.PackageManager @@ -27,6 +24,7 @@ import android.support.annotation.StringRes import android.util.TypedValue import android.content.Intent import android.content.ComponentName +import android.os.Build import android.preference.PreferenceManager import android.provider.AlarmClock import android.provider.CalendarContract @@ -151,6 +149,22 @@ object Util { val measuredHeight = View.MeasureSpec.makeMeasureSpec(view.height, View.MeasureSpec.UNSPECIFIED) view.measure(measuredWidth, measuredHeight) view.layout(0,0, measuredWidth, measuredHeight) + Log.d("AW", "W: " + view.measuredWidth +" - H: " + view.measuredHeight) + val returnedBitmap = Bitmap.createBitmap(view.measuredWidth, view.measuredHeight, Bitmap.Config.ARGB_8888) + //Bind a canvas to it + val canvas = Canvas(returnedBitmap) + // draw the view on the canvas + view.draw(canvas) + //return the bitmap + return returnedBitmap + } + + fun getBitmapFromView(view: View, w: Int, h: Int): Bitmap { + //Define a bitmap with the same size as the view + val measuredWidth = View.MeasureSpec.makeMeasureSpec(w, View.MeasureSpec.EXACTLY) + val measuredHeight = View.MeasureSpec.makeMeasureSpec(h, View.MeasureSpec.EXACTLY) + view.measure(measuredWidth, measuredHeight) + view.layout(0,0, measuredWidth, measuredHeight) val returnedBitmap = Bitmap.createBitmap(view.measuredWidth, view.measuredHeight, Bitmap.Config.ARGB_8888) //Bind a canvas to it val canvas = Canvas(returnedBitmap) @@ -212,6 +226,15 @@ object Util { } } + fun getSecondRowInfoString(info: Int): Int { + return when (info) { + 0 -> R.string.settings_second_row_info_subtitle_0 + 1 -> R.string.settings_second_row_info_subtitle_1 + 2 -> R.string.settings_second_row_info_subtitle_2 + else -> R.string.settings_second_row_info_subtitle_0 + } + } + fun getTextshadowString(shadow: Int): Int { return when (shadow) { 0 -> R.string.settings_text_shadow_subtitle_none @@ -510,4 +533,41 @@ object Util { return resultBitmap; } + + @SuppressLint("ApplySharedPref") + fun updateSettingsByDefault(context: Context) { + val SP = PreferenceManager.getDefaultSharedPreferences(context) + val editor = SP.edit() + if (SP.contains(Constants.PREF_SHOW_EVENT_LOCATION)) { + editor.putInt(Constants.PREF_SECOND_ROW_INFORMATION, 1) + editor.remove(Constants.PREF_SHOW_EVENT_LOCATION) + } + if (SP.contains(Constants.PREF_WEATHER_PROVIDER_API_KEY)) { + editor.putString(Constants.PREF_OPEN_WEATHER_API_KEY, SP.getString(Constants.PREF_WEATHER_PROVIDER_API_KEY, "")) + editor.remove(Constants.PREF_WEATHER_PROVIDER_API_KEY) + } + editor.commit() + } + + fun getNextAlarm(context: Context): String? { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + val SP = PreferenceManager.getDefaultSharedPreferences(context) + val am = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager + val alarm = am.nextAlarmClock + if (alarm != null) { + val time = am.nextAlarmClock.triggerTime + if (SP.getString(Constants.PREF_HOUR_FORMAT, "12") == "12") Constants.badHourFormat.format(time) else Constants.goodHourFormat.format(time) + } else { + null + } + } else { + val time = Settings.System.getString(context.contentResolver, + Settings.System.NEXT_ALARM_FORMATTED) + return if (time != "") { + time + } else { + null + } + } + } } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/util/WeatherUtil.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/util/WeatherUtil.kt index 5ded67f..e9b2565 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/util/WeatherUtil.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/util/WeatherUtil.kt @@ -60,36 +60,6 @@ object WeatherUtil { getCurrentWeather(context, locationResult.location) } }) - - /* - var gpsEnabled = false - var networkEnabled = false - val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager - try { - gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) - } catch (ex: Exception) { - } - - try { - networkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) - } catch (ex: Exception) { - } - - if (!gpsEnabled && !networkEnabled && SP.getBoolean(Constants.PREF_SHOW_WEATHER, true)) { - Util.showLocationNotification(context, true) - } else { - if (gpsEnabled) { - val gpsLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER) - if (gpsLocation != null) { - getCurrentWeather(context, gpsLocation) - return - } - } - if (networkEnabled) { - getCurrentWeather(context, locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)) - } - } - */ } } else { weatherNetworkRequest(context, SP.getString(Constants.PREF_CUSTOM_LOCATION_LAT, "").toDouble(), SP.getString(Constants.PREF_CUSTOM_LOCATION_LON, "").toDouble()) @@ -132,14 +102,20 @@ object WeatherUtil { fun weatherNetworkRequest(context: Context, latitude: Double, longitude: Double) { val SP: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context) - if (!SP.getString(Constants.PREF_WEATHER_PROVIDER_API_KEY, "").equals("")) { + if (!SP.getString(when (SP.getInt(Constants.PREF_WEATHER_PROVIDER, Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS)) { + Constants.WEATHER_PROVIDER_OPEN_WEATHER -> Constants.PREF_OPEN_WEATHER_API_KEY + else -> Constants.PREF_OPEN_WEATHER_API_KEY + }, "").equals("")) { try { val config = WeatherConfig() config.unitSystem = if (SP.getString(Constants.PREF_WEATHER_TEMP_UNIT, "F").equals("C")) WeatherConfig.UNIT_SYSTEM.M else WeatherConfig.UNIT_SYSTEM.I config.lang = "en" config.maxResult = 1 config.numDays = 1 - config.ApiKey = SP.getString(Constants.PREF_WEATHER_PROVIDER_API_KEY, "") + config.ApiKey = SP.getString(when (SP.getInt(Constants.PREF_WEATHER_PROVIDER, Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS)) { + Constants.WEATHER_PROVIDER_OPEN_WEATHER -> Constants.PREF_OPEN_WEATHER_API_KEY + else -> Constants.PREF_OPEN_WEATHER_API_KEY + }, "") val client = WeatherClient.ClientBuilder().attach(context) .httpClient(com.survivingwithandroid.weather.lib.client.volley.WeatherClientDefault::class.java) diff --git a/app/src/main/res/drawable-hdpi/ic_action_alarm.png b/app/src/main/res/drawable-hdpi/ic_action_alarm.png new file mode 100644 index 0000000000000000000000000000000000000000..bc6f1841375debc1f6798bc188dca2f8357a9bae GIT binary patch literal 1058 zcmV+-1l{|IP)X z!21PIYijbx0P}*7mu@RX=OygYrxFko_~!u4ez*2AASsaF#q%Icq#baZl#2s?65{l% z56}kK$i}V)3<+`;02h@_6%P{NjzEaYT(P_b{N?~!0M7x7LVqV<-zeY+a@cn3ngb6m zO0L(*SI|M?BxpvhwtfcyGYXS-0-Dc$8!zr+LgW zbtJ0_@Xq!Q=Tz<0j1H5KK|El#$-fnZ{sHs=wkVvjYCx}pB5wf2)Nd_dgk&62J;-}3 z7f7o(Aqaa9*y;0r`6%#?+01Db?x^3ppj!|!%v~uPW0_B$hcIG9;O{hbksTCV+fX{U zMsD~!T}E*?7f6obvEXX=`JH@@VE6dH&_mFdu-&M+9%QW%%qiw}le>`~7d%ak$Ea0F z0UEbUaL-3|C!a-b%}&;>5OymoKx2EE%&1n>OMW=XR=+9$1*!$Pl{yM^u$6eKnE2=_ zfII(!$!^n8pr4VP2|@uHe}T#F(@|iWk<2VlEGIT`k&XI@sqj{R#G=|HRVm7a-Q#I(yN=MU%nmUt z+U!FKC$owQau=AQn{);8EbO|W`l@ACIJv#-{Vkyyk)hVxcUnF0j@X*%^_6kBlG`i%P985|TAF%Fe z;(MEJ;p+r#eNwTUK2D#n!lD16!9=#<%}T|97?l*~Y~{side`B#JoB#=%CU;OCNI5A c%QVC7FQv!j*?2Vz@c;k-07*qoM6N<$g8kS7xBvhE literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_action_alarm.png b/app/src/main/res/drawable-mdpi/ic_action_alarm.png new file mode 100644 index 0000000000000000000000000000000000000000..95e7cf87acea88bc831f4bf7c489e1f4608c238b GIT binary patch literal 720 zcmV;>0x$iEP)2m9)iZC$=8B0a{BDn5uZE3u=iv>GvEo>p+4yI`L@iByMXyG+sr?x~Hl{{+^9Ch$nd z`je8c2h{6wOi-|A63mc88^CjK8AV_k9FaLJi6~F@ih^AC9q~H{c7sh7{1<8&I{y(F z3n{}>6`(efgx@Lo7Fz^#k?Ot}yF>wM zcb4LHS_BlSrgJqA&_V(RECSp{G?rjz5}>y4)%LYTz%REK)KEZ4ZGTtpSwtLe60000dXYxd%RY$$Mv(@1ApJ?wrYF(vgmIq$3^CM^8^r zCEzSzSb{o7ki?6?dVsqOp>z+;QjJAf)-?l9b=fHuHwz$=R! z{O%T@6|fYL6J$;X+_T7efTU_Uznl&lNm&PA2y<910-R(H$}qsWzXIla4_Ekm1mL1& zZWmy2+!MFS$G|po*`krC6mTPk(-N-H^6z8lD+L_(nYTG~WTIGm!e^;&@E9{5@TUXE zy*LB-+(Y^fpE>QJaunKsk}y1g7BJhSGXdudc#bxDY-j+yu*|6sy9$~aA$I{2JvqUF zfJXlf$O9Gvz5omcWC{4WnwI!3TJAw)?lEIOe4a+xq4#&+M>zxf0Zto2E|~c~?tQ=! z9|Jqdp{fY_tI0vXm30Wv-g;&a`*hve2Wq10D~N+;`lJmTUOm1 z*Y5&31S={#|eslizrWv0IU)GA*_PY zngnbY2$0+=Yz>0bF?59#ba1#5}c>y~jt8*`yt=ZBOf%QgNl#awC)vlWYl>wg)u` z;BI7}My|BJE5Fugc;N2%8vJf{uqrH6kJoA#I8!ign&R6g-Y+y-wnc||AHmF@CCrn z#oH?8cRK~!W@{UBTe$kF$T%Fvwy0&ks}y<{uBkU`(G4)i^zY7_lX!dj36&tk5*G?F z)chkT+}aBSQxfcFh4+KE`2n`V zInaxDfX>U&oL$i3-04+%oTQ0mVW z-nW6BBXszk_37f|miZaV_;Q&KVNfD7h1zhp;Psl(B(<0R*Fe9?X3~+4bfhC4?#CN2 WbfXiYN_6)C0000QAX2nO(h zS`;bILV+z%+U0-3Gs)Lvv+lifX7}Ei+2x+(OPX!>&Uwr|bIzHWQ^yG@q>w@iDWs4> z3Mr)Aq$f|F3?$TM5x=tug}I{qa>5UUhuL5R;<1kKh;WQhlI_YLPq<8Y4BRA)wV2<@ zggXiRUL=glM#c9bEFiQe2-AyS34<-t6 zPJ8ehBdo{<#TODj^bjNwdkJ|K@LWLH&*Zt8(9c%o4Er{35H%kxSI zZ(^p$15|vfN%1#fxtr3E8*EdIkc0~y7L@W|g1_YoDN_1{9_vR_QklXO{voV%^W*e+ zBjLWn^TcGD;-}&xgf*DWTqeYVIL_r+GZlTTF8qu|IFf?z>4Yl^&k~vQQokadT?z}K zcnwdAq|7Bt-Xkedm_{e$?U#c8YQ+ECXLS+QXA~i!sJ2;Q&`(o^ee~ILgi{tPJ{jK; zhNh6C6oCTwIh!&LQQ7>v(mA;W$j z3u0#mLd44?!c`{kKN9-ewjmQi=oe>hW(?0DFDWJr zN~U#tPg37-t5e9+@jzX1HuyZIRs&$nZ45bI(XISEoPv|hjA#xRpo|d}9nqQzGhfY(0VzYP0hn*W z9Y0+yhoL4$*f}JJ3{b_`*J#jbfMblvCz3-3=)>5GJfKVYQAYGLFF=2+-2fPSiA3hh zT8eZu$W+PcwXUEpxEVG;iKN~oO4{Rf7@$!y6HWyeA%&-B{~eyEMa0-4jW*v zMD{H@4Dhvti8pfC0IOudhYkb$CE4Shn!^T|C8_+L)nR~Zl0#G@a@YVhlKtb0It*}6 zl7Lm_umP$i3E4Fr2Jm_X+k?E`Z-D_SB=^W-PpbiL27WumA_K%MbV1#?oL6Dk1zp!+ zfUA;4c(?%rB#ytyj}sDUF2b#*!_aPDujl-K>{7;2_c+dK*7<$v4oBmShoLPJ1=I&P zb{>wrb55~|$?%168$OP|LNewd8%hz|HSi#gLGEPUJ$Q(V+r>VNyGJtCRviYA&4Lq- z2EuX3vADC$xm$b@caifm81tN|w?C1I>5Q_hwi9E*&*K(M8}nSJ*i0Ie#yC-l+@cKs zybgh*NPN5mo$F{O9Fg3m;FjJ~$yu=Wcs;XC+o@?9=o<+$pP6X!1-CQ~fkF@Syy`O9 zxgKmu9+9;w&?)G82{X4ijX462mg<>qNf_#&Zmn)_DlH^a8cN{g*GpLafajbDHAxxU&Bu-pG zogn$%CWaeZY(k(y_ zn|xe7mA&OnCIu;X>5iLRlc{&IjNoErp{#IcgG@8Z@sS-`4lVg7(-g)PC3BZEl9(Nc zTZ)`o%#bWleigHm*BNVC+@om)w<}e##mX;ZHf4&tH7PO4{6|b9oC~b6U1t1OqpvAP z`OP-Yo?=G1HnFA4SQ}cxBO;op(6IHSj;=203Nt~W4UE`YeBGoGP-JUV;JH2Ub~HW+ zRj1H>qz9Kdh8p1WS!`Ky`<04>?8R&e2 zUCK{V#KH{PR`#IaCpxch$0o}pY><@W+E598u0#gA6veimFmAft*Tr$iIZiGR!n_M< zD#ES46oVgc$Im@JK40`49qr^2p|`|7g>K{~(1o)<1x_v!_G;&%bCyktk0Xh!HQszr zlOc+*mvGkt<=;Yd)Zcm92<3~-3LOjmL>sz&4RD@z!p3(4T0(XPsPq`Ryezf3Dr-7- z7=xMF;*&9AxLVs}eI3U_gA|}O!g3rXY(c%g_up8xBVKRAXXl~pW)#^bWpWrdq||Rn z0ZwE@6B4l~J}U^d6jDebg%naqA%zrDNK*O_rU=LszHq<_00000NkvXXu0mjffv7Js literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index bbc4ed5..73787e3 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -504,17 +504,17 @@ android:focusable="true" android:background="?android:attr/selectableItemBackground" android:gravity="center_vertical" - android:id="@+id/action_show_location" + android:id="@+id/action_second_row_info" android:orientation="vertical"> + android:text="@string/settings_second_row_info_title"/> Domani Oggi Gli eventi aprono - Informazione Seconda Riga - Mostra orario evento - Mostra indirizzo evento invece dell\'orario + Informazione Seconda Riga + Mostra orario evento + Mostra indirizzo evento invece dell\'orario + Mostra orario prossimo allarme Colore Testo Dimensione Testo Prima Riga Dimensione Testo Seconda Riga diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6f1345d..6b055f1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -100,9 +100,10 @@ Tomorrow Today Tap on event opens - Second Row Information - Show event address instead of time - Show event time + Second Row Information + Show event address instead of time + Show event time + Show next alarm time Text Color First Row Text Size Second Row Text Size diff --git a/app/src/main/res/xml-v21/the_widget_info.xml b/app/src/main/res/xml-v21/the_widget_info.xml new file mode 100644 index 0000000..6480405 --- /dev/null +++ b/app/src/main/res/xml-v21/the_widget_info.xml @@ -0,0 +1,13 @@ + + \ No newline at end of file diff --git a/app/src/main/res/xml/the_widget_info.xml b/app/src/main/res/xml/the_widget_info.xml index 4a62b5a..8819ece 100644 --- a/app/src/main/res/xml/the_widget_info.xml +++ b/app/src/main/res/xml/the_widget_info.xml @@ -2,12 +2,11 @@ \ No newline at end of file diff --git a/build.gradle b/build.gradle index ee06b7e..97fd3be 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { maven { url 'https://maven.fabric.io/public' } } dependencies { - classpath 'com.android.tools.build:gradle:3.0.0-rc1' + classpath 'com.android.tools.build:gradle:3.0.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'io.fabric.tools:gradle:1.+'