diff --git a/app/build.gradle b/app/build.gradle
index 775ffef..e6e3de2 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -15,7 +15,7 @@ android {
applicationId "com.tommasoberlose.anotherwidget"
minSdkVersion 19
targetSdkVersion 26
- versionCode 20
+ versionCode 22
versionName "1.2"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
@@ -36,19 +36,21 @@ dependencies {
exclude group: 'com.android.support', module: 'support-annotations'
})
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
- compile 'com.survivingwithandroid:weatherlib:1.6.0'
- compile 'com.survivingwithandroid:weatherlib_volleyclient:1.6.0'
- compile 'com.mcxiaoke.volley:library:1.0.6@aar'
- compile 'com.android.support:customtabs:26.1.0'
- compile 'com.android.support:cardview-v7:26.1.0'
+ implementation 'com.survivingwithandroid:weatherlib:1.6.0'
+ implementation 'com.survivingwithandroid:weatherlib_volleyclient:1.6.0'
+ 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'
- compile('com.crashlytics.sdk.android:crashlytics:2.7.0@aar') {
+ implementation('com.crashlytics.sdk.android:crashlytics:2.7.0@aar') {
transitive = true;
}
- compile 'com.android.support:design:26.1.0'
- compile 'org.greenrobot:eventbus:3.0.0'
- compile 'com.android.support:recyclerview-v7:26.1.0'
- compile 'com.google.android.gms:play-services-awareness:11.4.2'
- compile 'joda-time:joda-time:2.9.9'
- compile 'com.pes.materialcolorpicker:library:1.0.4'
+ implementation 'com.android.support:design:26.1.0'
+ implementation 'org.greenrobot:eventbus:3.0.0'
+ implementation 'com.android.support:recyclerview-v7:26.1.0'
+ implementation 'com.google.android.gms:play-services-awareness:11.4.2'
+ implementation 'joda-time:joda-time:2.9.9'
+ implementation 'com.pes.materialcolorpicker:library:1.0.4'
+ implementation 'com.andkulikov:transitionseverywhere:1.7.6'
+ implementation 'me.everything:providers-android:1.0.1'
}
diff --git a/app/release/output.json b/app/release/output.json
index 3664756..70150de 100644
--- a/app/release/output.json
+++ b/app/release/output.json
@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":20},"path":"app-release.apk","properties":{"packageId":"com.tommasoberlose.anotherwidget","split":"","minSdkVersion":"19"}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":22},"path":"app-release.apk","properties":{"packageId":"com.tommasoberlose.anotherwidget","split":"","minSdkVersion":"19"}}]
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a455131..4025f72 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,10 +14,9 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
-
+ android:value="AIzaSyAMkqiQHTdZGOUxRd0ZEvvrIE1qN_3pJb4" />
+
+
+
@@ -81,6 +83,7 @@
+
@@ -94,12 +97,23 @@
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleInstance"
android:screenOrientation="portrait" />
-
-
+
+
+
+
+
+
+
\ No newline at end of file
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 f20ea9c..cc7f617 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/object/Constants.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/object/Constants.kt
@@ -57,10 +57,14 @@ object Constants {
val PREF_TEXT_COLOR = "PREF_TEXT_COLOR"
val PREF_TEXT_MAIN_SIZE = "PREF_TEXT_MAIN_SIZE"
val PREF_TEXT_SECOND_SIZE = "PREF_TEXT_SECOND_SIZE"
+ val PREF_TEXT_CLOCK_SIZE = "PREF_TEXT_CLOCK_SIZE"
val PREF_WEATHER_PROVIDER = "PREF_WEATHER_PROVIDER"
val PREF_SHOW_CLOCK = "PREF_SHOW_CLOCK"
val PREF_CLOCK_APP_NAME = "PREF_CLOCK_APP_NAME"
val PREF_CLOCK_APP_PACKAGE = "PREF_CLOCK_APP_PACKAGE"
+ 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 ACTION_EXTRA_OPEN_WEATHER_PROVIDER = "ACTION_EXTRA_OPEN_WEATHER_PROVIDER"
@@ -72,7 +76,8 @@ object Constants {
val ACTION_TIME_UPDATE = "com.tommasoberlose.anotherwidget.action.ACTION_TIME_UPDATE"
val ACTION_CALENDAR_UPDATE = "com.tommasoberlose.anotherwidget.action.ACTION_CALENDAR_UPDATE"
val ACTION_WEATHER_UPDATE = "com.tommasoberlose.anotherwidget.action.ACTION_WEATHER_UPDATE"
- val ACTION_SOMETHING_APPENED = "com.tommasoberlose.anotherwidget.action.ACTION_SOMETHING_APPENED"
+ val ACTION_SOMETHING_HAPPENED = "com.tommasoberlose.anotherwidget.action.ACTION_SOMETHING_HAPPENED"
+ val ACTION_OPEN_WEATHER_INTENT = "com.tommasoberlose.anotherwidget.action.ACTION_OPEN_WEATHER_INTENT"
val WEATHER_PROVIDER_GOOGLE_AWARENESS = 1
val WEATHER_PROVIDER_OPEN_WEATHER = 2
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/receiver/OpenWeatherIntentReceiver.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/receiver/OpenWeatherIntentReceiver.kt
new file mode 100644
index 0000000..07de471
--- /dev/null
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/receiver/OpenWeatherIntentReceiver.kt
@@ -0,0 +1,17 @@
+package com.tommasoberlose.anotherwidget.receiver
+
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import com.tommasoberlose.anotherwidget.`object`.Constants
+import com.tommasoberlose.anotherwidget.util.Util
+
+class OpenWeatherIntentReceiver : BroadcastReceiver() {
+
+ override fun onReceive(context: Context, intent: Intent) {
+ if (intent.action == Constants.ACTION_OPEN_WEATHER_INTENT) {
+ context.sendBroadcast(Intent(Constants.ACTION_WEATHER_UPDATE))
+ context.startActivity(Util.getWeatherIntent(context))
+ }
+ }
+}
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/receiver/UpdatesReceiver.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/receiver/UpdatesReceiver.kt
index 000e585..b7947d9 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/receiver/UpdatesReceiver.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/receiver/UpdatesReceiver.kt
@@ -13,7 +13,9 @@ import com.tommasoberlose.anotherwidget.`object`.Constants
import com.tommasoberlose.anotherwidget.`object`.Event
import com.tommasoberlose.anotherwidget.util.CalendarUtil
import com.tommasoberlose.anotherwidget.util.Util
+import java.sql.Time
import java.util.*
+import java.util.concurrent.TimeUnit
class UpdatesReceiver : BroadcastReceiver() {
@@ -21,7 +23,7 @@ class UpdatesReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action.equals(Intent.ACTION_BOOT_COMPLETED) || intent.action.equals(Intent.ACTION_MY_PACKAGE_REPLACED) || intent.action.equals("android.intent.action.PACKAGE_REPLACED") || intent.action.equals("android.intent.action.PACKAGE_ADDED")) {
setUpdates(context)
- } else if (intent.action.equals(Constants.ACTION_TIME_UPDATE)) {
+ } else if (intent.action.equals(Constants.ACTION_TIME_UPDATE) || intent.action.equals("com.sec.android.widgetapp.APPWIDGET_RESIZE") || intent.action == "android.intent.action.USER_PRESENT") {
val e: Event = CalendarUtil.getNextEvent(context)
if (e.id == 0 || e.endDate <= Calendar.getInstance().timeInMillis) {
CalendarUtil.updateEventList(context)
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 2d5cfcb..36bec50 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
@@ -27,27 +27,25 @@ import android.graphics.Color
import android.graphics.Typeface
import android.graphics.drawable.Drawable
import android.os.Build
-import android.support.annotation.ColorInt
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
import com.pes.androidmaterialcolorpickerdialog.ColorPicker
import com.tommasoberlose.anotherwidget.`object`.CalendarSelector
+import com.tommasoberlose.anotherwidget.receiver.UpdatesReceiver
import io.fabric.sdk.android.Fabric
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.key_time_wait_layout.view.*
import kotlinx.android.synthetic.main.main_menu_layout.view.*
import kotlinx.android.synthetic.main.the_widget.*
-import kotlinx.android.synthetic.main.the_widget.view.*
class MainActivity : AppCompatActivity() {
- var mAppWidgetId: Int = -1
+ private var mAppWidgetId: Int = -1
private val receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
@@ -59,6 +57,8 @@ class MainActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Fabric.with(this, Crashlytics())
+ sendBroadcast(Intent(Constants.ACTION_CALENDAR_UPDATE))
+ sendBroadcast(Intent(Constants.ACTION_WEATHER_UPDATE))
if (intent.extras?.containsKey(Constants.ACTION_EXTRA_OPEN_WEATHER_PROVIDER) == true) {
startActivityForResult(Intent(this, WeatherProviderActivity::class.java), Constants.WEATHER_PROVIDER_REQUEST_CODE)
@@ -84,12 +84,6 @@ class MainActivity : AppCompatActivity() {
action_menu.setOnClickListener {
val mBottomSheetDialog: BottomSheetDialog = BottomSheetDialog(this)
val menuView: View = getLayoutInflater().inflate(R.layout.main_menu_layout, null)
- menuView.action_support.setOnClickListener(object: View.OnClickListener {
- override fun onClick(p0: View?) {
- Util.openURI(this@MainActivity, "https://paypal.me/tommasoberlose")
- mBottomSheetDialog.dismiss()
- }
- })
menuView.action_share.setOnClickListener(object: View.OnClickListener {
override fun onClick(p0: View?) {
@@ -143,7 +137,7 @@ class MainActivity : AppCompatActivity() {
override fun onResume() {
super.onResume()
val filter = IntentFilter()
- filter.addAction(Constants.ACTION_SOMETHING_APPENED);
+ filter.addAction(Constants.ACTION_SOMETHING_HAPPENED);
registerReceiver(receiver, filter);
updateUI()
}
@@ -182,10 +176,11 @@ class MainActivity : AppCompatActivity() {
val wallpaper: Drawable? = Util.getCurrentWallpaper(this)
if (wallpaper != null) {
widget_bg.setImageDrawable(wallpaper)
- updateCalendarView()
- updateLocationView()
- updateClockView()
}
+ widget_bg.setBackgroundColor(Color.WHITE)
+ updateCalendarView()
+ updateLocationView()
+ updateClockView()
}
@SuppressLint("ApplySharedPref")
@@ -226,20 +221,6 @@ class MainActivity : AppCompatActivity() {
WeatherReceiver().setOneTimeUpdate(this)
sendBroadcast(Intent(Constants.ACTION_WEATHER_UPDATE))
updateSettings()
-
- val mBottomSheetDialog: BottomSheetDialog = BottomSheetDialog(this)
- val provView: View = layoutInflater.inflate(R.layout.key_time_wait_layout, null)
- provView.title.text = String.format("%s %s", Util.getEmojiByUnicode(0x1F389), getString(R.string.well_done))
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- provView.text.text = Html.fromHtml(getString(R.string.api_key_info_all_set), Html.FROM_HTML_MODE_LEGACY)
- } else {
- provView.text.text = Html.fromHtml(getString(R.string.api_key_info_all_set))
- }
- provView.action_close.setOnClickListener {
- mBottomSheetDialog.dismiss()
- }
- mBottomSheetDialog.setContentView(provView)
- mBottomSheetDialog.show();
}
}
@@ -266,14 +247,18 @@ class MainActivity : AppCompatActivity() {
dateStringValue = Util.getCapWordString(Constants.itDateFormat.format(now.time))
}
empty_date.text = dateStringValue
- //empty_date.setImageBitmap(Util.buildUpdate(this, String.format("%s%s", Constants.dateFormat.format(now.time)[0].toUpperCase(), Constants.dateFormat.format(now.time).substring(1)), "fonts/product_sans_regular.ttf"))
if (calendarLayout) {
val e = CalendarUtil.getNextEvent(this)
if (e.id != 0) {
next_event.text = e.title
- next_event_difference_time.text = Util.getDifferenceText(this, now.timeInMillis, e.startDate)
+ if (SP.getBoolean(Constants.PREF_SHOW_DIFF_TIME, true)) {
+ next_event_difference_time.text = Util.getDifferenceText(this, now.timeInMillis, e.startDate)
+ next_event_difference_time.visibility = View.VISIBLE
+ } else {
+ next_event_difference_time.visibility = View.GONE
+ }
if (!e.address.equals("") && SP.getBoolean(Constants.PREF_SHOW_EVENT_LOCATION, false)) {
second_row_icon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_action_location))
@@ -320,6 +305,7 @@ class MainActivity : AppCompatActivity() {
divider2.setTextColor(Util.getFontColor(SP))
calendar_temp.setTextColor(Util.getFontColor(SP))
second_row_icon.setColorFilter(Util.getFontColor(SP))
+ time.setTextColor(Util.getFontColor(SP))
empty_date.setTextSize(TypedValue.COMPLEX_UNIT_SP, SP.getFloat(Constants.PREF_TEXT_MAIN_SIZE, 24f))
@@ -330,6 +316,35 @@ class MainActivity : AppCompatActivity() {
next_event_date.setTextSize(TypedValue.COMPLEX_UNIT_SP, SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f))
divider2.setTextSize(TypedValue.COMPLEX_UNIT_SP, SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f))
calendar_temp.setTextSize(TypedValue.COMPLEX_UNIT_SP, SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f))
+ time.setTextSize(TypedValue.COMPLEX_UNIT_SP, SP.getFloat(Constants.PREF_TEXT_CLOCK_SIZE, 90f))
+
+ val shadowRadius = when (SP.getInt(Constants.PREF_TEXT_SHADOW, 1)) {
+ 0 -> 0f
+ 1 -> 5f
+ 2 -> 4f
+ else -> 5f
+ }
+ val shadowColor = when (SP.getInt(Constants.PREF_TEXT_SHADOW, 1)) {
+ 0 -> Color.TRANSPARENT
+ 1 -> R.color.black_50
+ 2 -> Color.BLACK
+ else -> R.color.black_50
+ }
+ val shadowDy = when (SP.getInt(Constants.PREF_TEXT_SHADOW, 1)) {
+ 0 -> 0f
+ 1 -> 0f
+ 2 -> 1f
+ else -> 0f
+ }
+ empty_date.setShadowLayer(shadowRadius, 0f, shadowDy, shadowColor)
+ divider1.setShadowLayer(shadowRadius, 0f, shadowDy, shadowColor)
+ temp.setShadowLayer(shadowRadius, 0f, shadowDy, shadowColor)
+ next_event.setShadowLayer(shadowRadius, 0f, shadowDy, shadowColor)
+ next_event_difference_time.setShadowLayer(shadowRadius, 0f, shadowDy, shadowColor)
+ next_event_date.setShadowLayer(shadowRadius, 0f, shadowDy, shadowColor)
+ divider2.setShadowLayer(shadowRadius, 0f, shadowDy, shadowColor)
+ calendar_temp.setShadowLayer(shadowRadius, 0f, 0f, shadowColor)
+ time.setShadowLayer(shadowRadius, 0f, shadowDy, shadowColor)
val product_sans: Typeface = Typeface.createFromAsset(assets, "fonts/product_sans_regular.ttf")
@@ -341,6 +356,7 @@ class MainActivity : AppCompatActivity() {
next_event_date.typeface = product_sans
divider2.typeface = product_sans
calendar_temp.typeface = product_sans
+ time.typeface = product_sans
}
fun updateLocationView() {
@@ -383,8 +399,6 @@ class MainActivity : AppCompatActivity() {
.putBoolean(Constants.PREF_SHOW_CLOCK, false)
.commit()
sendBroadcast(Intent(Constants.ACTION_TIME_UPDATE))
- updateSettings()
- updateAppWidget()
}
show_clock_label.text = getString(R.string.show_clock_visible)
} else {
@@ -394,8 +408,6 @@ class MainActivity : AppCompatActivity() {
.putBoolean(Constants.PREF_SHOW_CLOCK, true)
.commit()
sendBroadcast(Intent(Constants.ACTION_TIME_UPDATE))
- updateSettings()
- updateAppWidget()
}
show_clock_label.text = getString(R.string.show_clock_not_visible)
}
@@ -411,7 +423,7 @@ class MainActivity : AppCompatActivity() {
updateSettings()
updateAppWidget()
}
- show_clock_label.text = getString(R.string.show_events_visible)
+ show_events_label.text = getString(R.string.show_events_visible)
} else {
calendar_settings.visibility= View.GONE
action_show_events.setOnClickListener {
@@ -471,6 +483,20 @@ class MainActivity : AppCompatActivity() {
updateSettings()
}
+ show_diff_time_label.text = if (SP.getBoolean(Constants.PREF_SHOW_DIFF_TIME, true)) getString(R.string.settings_visible) else getString(R.string.settings_not_visible)
+ action_show_diff_time.setOnClickListener {
+ SP.edit().putBoolean(Constants.PREF_SHOW_DIFF_TIME, !SP.getBoolean(Constants.PREF_SHOW_DIFF_TIME, true)).commit()
+ sendBroadcast(Intent(Constants.ACTION_TIME_UPDATE))
+ updateSettings()
+ }
+
+ show_declined_events_label.text = if (SP.getBoolean(Constants.PREF_SHOW_DECLINED_EVENTS, true)) getString(R.string.settings_visible) else getString(R.string.settings_not_visible)
+ action_show_declined_events.setOnClickListener {
+ SP.edit().putBoolean(Constants.PREF_SHOW_DECLINED_EVENTS, !SP.getBoolean(Constants.PREF_SHOW_DECLINED_EVENTS, true)).commit()
+ sendBroadcast(Intent(Constants.ACTION_CALENDAR_UPDATE))
+ updateSettings()
+ }
+
hour_format_label.text = if (SP.getString(Constants.PREF_HOUR_FORMAT, "12").equals("12")) getString(R.string.settings_hour_format_subtitle_12) else getString(R.string.settings_hour_format_subtitle_24)
action_hour_format.setOnClickListener {
SP.edit().putString(Constants.PREF_HOUR_FORMAT, if (SP.getString(Constants.PREF_HOUR_FORMAT, "12").equals("12")) "24" else "12").commit()
@@ -511,6 +537,17 @@ class MainActivity : AppCompatActivity() {
updateAppWidget()
}
+ clock_text_size_label.text = String.format("%.0f%s", SP.getFloat(Constants.PREF_TEXT_CLOCK_SIZE, 90f), "sp")
+ action_clock_text_size.setOnClickListener {
+ var fontSize = SP.getFloat(Constants.PREF_TEXT_CLOCK_SIZE, 90f) + 5
+ if (fontSize > 110) {
+ fontSize = 70f
+ }
+ SP.edit().putFloat(Constants.PREF_TEXT_CLOCK_SIZE, fontSize).commit()
+ Util.updateWidget(this)
+ updateSettings()
+ updateAppWidget()
+ }
val textColor = try {
Color.parseColor(SP.getString(Constants.PREF_TEXT_COLOR, "#FFFFFF"))
@@ -544,19 +581,25 @@ class MainActivity : AppCompatActivity() {
updateSettings()
}
- label_weather_refresh_period.text = getString(Util.getRefreshPeriodString(SP.getInt(Constants.PREF_WEATHER_REFRESH_PERIOD, 1)))
- action_weather_refresh_period.setOnClickListener {
- SP.edit().putInt(Constants.PREF_WEATHER_REFRESH_PERIOD, when (SP.getInt(Constants.PREF_WEATHER_REFRESH_PERIOD, 1)) {
- 0 -> 1
- 1 -> 2
- 2 -> 3
- 3 -> 4
- 4 -> 5
- 5 -> 0
- else -> 1
- }).commit()
- updateSettings()
- WeatherReceiver().setUpdates(this@MainActivity)
+
+ if (SP.getInt(Constants.PREF_WEATHER_PROVIDER, Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS) == Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS) {
+ action_weather_refresh_period.visibility = View.GONE
+ } else {
+ label_weather_refresh_period.text = getString(Util.getRefreshPeriodString(SP.getInt(Constants.PREF_WEATHER_REFRESH_PERIOD, 1)))
+ action_weather_refresh_period.setOnClickListener {
+ SP.edit().putInt(Constants.PREF_WEATHER_REFRESH_PERIOD, when (SP.getInt(Constants.PREF_WEATHER_REFRESH_PERIOD, 1)) {
+ 0 -> 1
+ 1 -> 2
+ 2 -> 3
+ 3 -> 4
+ 4 -> 5
+ 5 -> 0
+ else -> 1
+ }).commit()
+ updateSettings()
+ WeatherReceiver().setUpdates(this@MainActivity)
+ }
+ action_weather_refresh_period.visibility = View.VISIBLE
}
show_until_label.text = getString(Util.getShowUntilString(SP.getInt(Constants.PREF_SHOW_UNTIL, 1)))
@@ -567,51 +610,78 @@ class MainActivity : AppCompatActivity() {
2 -> 3
3 -> 4
4 -> 5
- 5 -> 0
+ 5 -> 6
+ 6 -> 0
else -> 1
}).commit()
updateSettings()
sendBroadcast(Intent(Constants.ACTION_CALENDAR_UPDATE))
}
- label_custom_location.text = SP.getString(Constants.PREF_CUSTOM_LOCATION_ADD, getString(R.string.custom_location_gps))
- action_custom_location.setOnClickListener {
- startActivityForResult(Intent(this, CustomLocationActivity::class.java), Constants.RESULT_CODE_CUSTOM_LOCATION)
+ text_shadow_label.text = getString(Util.getTextshadowString(SP.getInt(Constants.PREF_TEXT_SHADOW, 1)))
+ action_text_shadow.setOnClickListener {
+ SP.edit().putInt(Constants.PREF_TEXT_SHADOW, when (SP.getInt(Constants.PREF_TEXT_SHADOW, 1)) {
+ 0 -> 1
+ 1 -> 2
+ 2 -> 0
+ else -> 1
+ }).commit()
+ sendBroadcast(Intent(Constants.ACTION_TIME_UPDATE))
+ updateSettings()
+ updateAppWidget()
}
- if (!SP.getString(Constants.PREF_WEATHER_PROVIDER_API_KEY, "").equals("")) {
- label_weather_provider_api_key.text = getString(R.string.settings_weather_provider_api_key_subtitle_all_set)
+ if (SP.getInt(Constants.PREF_WEATHER_PROVIDER, Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS) == Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS) {
+ action_custom_location.visibility = View.GONE
+ } else {
+ label_custom_location.text = SP.getString(Constants.PREF_CUSTOM_LOCATION_ADD, getString(R.string.custom_location_gps))
+ action_custom_location.setOnClickListener {
+ startActivityForResult(Intent(this, CustomLocationActivity::class.java), Constants.RESULT_CODE_CUSTOM_LOCATION)
+ }
+ action_custom_location.visibility = View.VISIBLE
+ }
+
+ if (SP.getInt(Constants.PREF_WEATHER_PROVIDER, Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS) == Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS) {
+ label_weather_provider_api_key.text = getString(R.string.provider_google_awareness)
alert_icon.visibility = View.GONE
} else {
- label_weather_provider_api_key.text = getString(R.string.settings_weather_provider_api_key_subtitle_not_set)
- alert_icon.visibility = View.VISIBLE
+ if (SP.getString(Constants.PREF_WEATHER_PROVIDER_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 {
+ label_weather_provider_api_key.text = getString(when (SP.getInt(Constants.PREF_WEATHER_PROVIDER, Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS)) {
+ Constants.WEATHER_PROVIDER_OPEN_WEATHER -> R.string.provider_open_weather
+ else -> R.string.settings_weather_provider_api_key_subtitle_all_set
+ })
+ alert_icon.visibility = View.GONE
+ }
}
action_weather_provider_api_key.setOnClickListener {
startActivityForResult(Intent(this, WeatherProviderActivity::class.java), Constants.WEATHER_PROVIDER_REQUEST_CODE)
}
- calendar_app_label.text = SP.getString(Constants.PREF_CALENDAR_APP_NAME, getString(R.string.default_name))
+ calendar_app_label.text = SP.getString(Constants.PREF_CALENDAR_APP_NAME, getString(R.string.default_calendar_app))
action_calendar_app.setOnClickListener {
startActivityForResult(Intent(this, ChooseApplicationActivity::class.java), Constants.CALENDAR_APP_REQUEST_CODE)
}
- weather_app_label.text = SP.getString(Constants.PREF_WEATHER_APP_NAME, getString(R.string.default_name))
+ weather_app_label.text = SP.getString(Constants.PREF_WEATHER_APP_NAME, getString(R.string.default_weather_app))
action_weather_app.setOnClickListener {
startActivityForResult(Intent(this, ChooseApplicationActivity::class.java), Constants.WEATHER_APP_REQUEST_CODE)
}
- clock_app_label.text = SP.getString(Constants.PREF_CLOCK_APP_NAME, getString(R.string.default_name))
+ clock_app_label.text = SP.getString(Constants.PREF_CLOCK_APP_NAME, getString(R.string.default_clock_app))
action_clock_app.setOnClickListener {
startActivityForResult(Intent(this, ChooseApplicationActivity::class.java), Constants.CLOCK_APP_REQUEST_CODE)
}
- event_app_label.text = SP.getString(Constants.PREF_EVENT_APP_NAME, getString(R.string.default_name))
+ event_app_label.text = SP.getString(Constants.PREF_EVENT_APP_NAME, getString(R.string.default_event_app))
action_event_app.setOnClickListener {
startActivityForResult(Intent(this, ChooseApplicationActivity::class.java), Constants.EVENT_APP_REQUEST_CODE)
}
action_filter_calendar.setOnClickListener {
- val calendarSelectorList: List = CalendarUtil.getCalendarList(this)
+ val calendarSelectorList: List = CalendarUtil.getCalendarList(this).map { CalendarSelector(it.id.toInt(), it.displayName, it.accountName) }
var calFiltered = SP.getString(Constants.PREF_CALENDAR_FILTER, "")
if (!calendarSelectorList.isEmpty()) {
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 d090ac4..e10d8f9 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
@@ -22,6 +22,7 @@ import com.tommasoberlose.anotherwidget.util.CalendarUtil
import com.tommasoberlose.anotherwidget.util.Util
import com.tommasoberlose.anotherwidget.util.WeatherUtil
import kotlinx.android.synthetic.main.activity_weather_provider.*
+import kotlinx.android.synthetic.main.key_time_wait_layout.view.*
import kotlinx.android.synthetic.main.main_menu_layout.view.*
import kotlinx.android.synthetic.main.provider_info_layout.view.*
@@ -35,12 +36,6 @@ class WeatherProviderActivity : AppCompatActivity() {
setContentView(R.layout.activity_weather_provider)
SP = PreferenceManager.getDefaultSharedPreferences(this)
- action_paste.setOnClickListener {
- val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
- if (clipboard.primaryClip != null && clipboard.primaryClip.itemCount > 0) {
- api_key.setText(clipboard.primaryClip.getItemAt(0).text)
- }
- }
updateUI()
@@ -71,27 +66,23 @@ class WeatherProviderActivity : AppCompatActivity() {
action_open_provider.setOnClickListener {
Util.openURI(this, "https://home.openweathermap.org/users/sign_up")
}
-
- action_open_info_text.setOnClickListener {
- val mBottomSheetDialog: BottomSheetDialog = BottomSheetDialog(this)
- val provView: View = layoutInflater.inflate(R.layout.provider_info_layout, null)
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- provView.text.text = Html.fromHtml(getString(R.string.api_key_info_text), Html.FROM_HTML_MODE_LEGACY)
- } else {
- provView.text.text = Html.fromHtml(getString(R.string.api_key_info_text))
- }
- mBottomSheetDialog.setContentView(provView)
- mBottomSheetDialog.show();
- }
}
@SuppressLint("ApplySharedPref")
- fun updateUI() {
+ private fun updateUI() {
val currentProvider = SP.getInt(Constants.PREF_WEATHER_PROVIDER, Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS)
if (currentProvider == Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS) {
- api_key.visibility = View.GONE
+ api_key_container.visibility = View.GONE
+ content_info.visibility = View.GONE
} else {
- api_key.visibility = View.VISIBLE
+ api_key_container.visibility = View.VISIBLE
+ content_info.visibility = View.VISIBLE
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ last_info.text = Html.fromHtml(getString(R.string.api_key_info_all_set), Html.FROM_HTML_MODE_LEGACY)
+ } else {
+ last_info.text = Html.fromHtml(getString(R.string.api_key_info_all_set))
+ }
}
label_weather_provider.text = when (currentProvider) {
Constants.WEATHER_PROVIDER_OPEN_WEATHER -> getString(R.string.provider_open_weather)
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 aa69365..5202061 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
@@ -31,7 +31,9 @@ import android.widget.TextView
import android.content.ComponentName
import android.graphics.Bitmap
import android.graphics.BitmapFactory
+import android.graphics.Color
import android.graphics.drawable.BitmapDrawable
+import android.os.Bundle
import android.support.v4.content.ContextCompat.startActivity
import android.provider.CalendarContract.Events
import android.support.v4.content.ContextCompat
@@ -51,6 +53,11 @@ class TheWidget : AppWidgetProvider() {
}
}
+ override fun onAppWidgetOptionsChanged(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int, newOptions: Bundle?) {
+ super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions)
+ updateAppWidget(context, appWidgetManager, appWidgetId)
+ }
+
override fun onEnabled(context: Context) {
UpdatesReceiver().setUpdates(context)
WeatherReceiver().setUpdates(context)
@@ -67,16 +74,16 @@ class TheWidget : AppWidgetProvider() {
internal fun updateAppWidget(context: Context, appWidgetManager: AppWidgetManager,
appWidgetId: Int) {
- val views = RemoteViews(context.packageName, R.layout.the_widget_sans)
+ 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 = updateCalendarView(context, views, appWidgetId)
+ views = updateCalendarView(context, views, appWidgetId)
views = updateLocationView(context, views, appWidgetId)
+ views = updateClockView(context, views, appWidgetId)
val SP = PreferenceManager.getDefaultSharedPreferences(context)
views.setTextColor(R.id.empty_date, Util.getFontColor(SP))
@@ -96,7 +103,8 @@ class TheWidget : AppWidgetProvider() {
views.setTextViewTextSize(R.id.next_event_date, TypedValue.COMPLEX_UNIT_SP, SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f))
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)
}
@@ -112,11 +120,10 @@ class TheWidget : AppWidgetProvider() {
dateStringValue = Util.getCapWordString(Constants.itDateFormat.format(now.time))
}
views.setTextViewText(R.id.empty_date, dateStringValue)
- //views.setImageViewBitmap(R.id.empty_date, Util.buildUpdate(context, Constants.dateFormat.format(now.time)[0].toUpperCase() + Constants.dateFormat.format(now.time).substring(1), "fonts/product_sans_regular.ttf"))
val calPIntent = PendingIntent.getActivity(context, widgetID, Util.getCalendarIntent(context), 0)
- views.setOnClickPendingIntent(R.id.main_layout, calPIntent)
+ views.setOnClickPendingIntent(R.id.empty_date, calPIntent)
if (calendarLayout) {
@@ -124,7 +131,12 @@ class TheWidget : AppWidgetProvider() {
if (e.id != 0) {
views.setTextViewText(R.id.next_event, e.title)
- views.setTextViewText(R.id.next_event_difference_time, Util.getDifferenceText(context, now.timeInMillis, e.startDate))
+ if (SP.getBoolean(Constants.PREF_SHOW_DIFF_TIME, true)) {
+ views.setTextViewText(R.id.next_event_difference_time, Util.getDifferenceText(context, now.timeInMillis, e.startDate))
+ views.setViewVisibility(R.id.next_event_difference_time, View.VISIBLE)
+ } else {
+ views.setViewVisibility(R.id.next_event_difference_time, View.GONE)
+ }
if (!e.address.equals("") && SP.getBoolean(Constants.PREF_SHOW_EVENT_LOCATION, false)) {
@@ -173,7 +185,9 @@ class TheWidget : AppWidgetProvider() {
views.setViewVisibility(R.id.calendar_layout, View.VISIBLE)
val pIntent = PendingIntent.getActivity(context, widgetID, Util.getEventIntent(context, e), 0)
- views.setOnClickPendingIntent(R.id.main_layout, pIntent)
+ views.setOnClickPendingIntent(R.id.next_event, pIntent)
+ views.setOnClickPendingIntent(R.id.next_event_difference_time, pIntent)
+ views.setOnClickPendingIntent(R.id.next_event_date, pIntent)
}
}
@@ -205,7 +219,7 @@ class TheWidget : AppWidgetProvider() {
views.setTextViewText(R.id.calendar_temp, temp)
- val weatherPIntent = PendingIntent.getActivity(context, widgetID, Util.getWeatherIntent(context), 0)
+ val weatherPIntent = PendingIntent.getBroadcast(context, widgetID, Intent(Constants.ACTION_OPEN_WEATHER_INTENT), 0)
views.setOnClickPendingIntent(R.id.weather, weatherPIntent)
views.setOnClickPendingIntent(R.id.calendar_weather, weatherPIntent)
@@ -216,7 +230,7 @@ class TheWidget : AppWidgetProvider() {
return views
}
- fun updateClockView(context: Context, views: RemoteViews, widgetID: Int) {
+ fun updateClockView(context: Context, views: RemoteViews, widgetID: Int): RemoteViews {
val SP = PreferenceManager.getDefaultSharedPreferences(context)
if (!SP.getBoolean(Constants.PREF_SHOW_CLOCK, false)) {
views.setViewVisibility(R.id.time, View.GONE)
@@ -225,6 +239,11 @@ class TheWidget : AppWidgetProvider() {
}
val now = Calendar.getInstance()
views.setTextViewText(R.id.time, if (SP.getString(Constants.PREF_HOUR_FORMAT, "12").equals("12")) Constants.badHourFormat.format(now.timeInMillis) else Constants.goodHourFormat.format(now.timeInMillis))
+
+ val clockPIntent = PendingIntent.getActivity(context, widgetID, Util.getClockIntent(context), 0)
+ views.setOnClickPendingIntent(R.id.time, clockPIntent)
+
+ return views
}
fun updateCalendarViewByLayout(context: Context, v: View): View {
@@ -239,14 +258,18 @@ class TheWidget : AppWidgetProvider() {
dateStringValue = Util.getCapWordString(Constants.itDateFormat.format(now.time))
}
v.empty_date.text = dateStringValue
- //empty_date.setImageBitmap(Util.buildUpdate(this, String.format("%s%s", Constants.dateFormat.format(now.time)[0].toUpperCase(), Constants.dateFormat.format(now.time).substring(1)), "fonts/product_sans_regular.ttf"))
if (calendarLayout) {
val e = CalendarUtil.getNextEvent(context)
if (e.id != 0) {
v.next_event.text = e.title
- v.next_event_difference_time.text = Util.getDifferenceText(context, now.timeInMillis, e.startDate)
+ if (SP.getBoolean(Constants.PREF_SHOW_DIFF_TIME, true)) {
+ v.next_event_difference_time.text = Util.getDifferenceText(context, now.timeInMillis, e.startDate)
+ v.next_event_difference_time.visibility = View.VISIBLE
+ } else {
+ v.next_event_difference_time.visibility = View.GONE
+ }
if (!e.address.equals("") && SP.getBoolean(Constants.PREF_SHOW_EVENT_LOCATION, false)) {
v.second_row_icon.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_action_location))
@@ -293,6 +316,7 @@ class TheWidget : AppWidgetProvider() {
v.divider2.setTextColor(Util.getFontColor(SP))
v.calendar_temp.setTextColor(Util.getFontColor(SP))
v.second_row_icon.setColorFilter(Util.getFontColor(SP))
+ v.time.setTextColor(Util.getFontColor(SP))
v.empty_date.setTextSize(TypedValue.COMPLEX_UNIT_SP, SP.getFloat(Constants.PREF_TEXT_MAIN_SIZE, 24f))
@@ -303,6 +327,35 @@ class TheWidget : AppWidgetProvider() {
v.next_event_date.setTextSize(TypedValue.COMPLEX_UNIT_SP, SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f))
v.divider2.setTextSize(TypedValue.COMPLEX_UNIT_SP, SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f))
v.calendar_temp.setTextSize(TypedValue.COMPLEX_UNIT_SP, SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f))
+ v.time.setTextSize(TypedValue.COMPLEX_UNIT_SP, SP.getFloat(Constants.PREF_TEXT_CLOCK_SIZE, 90f))
+
+ val shadowRadius = when (SP.getInt(Constants.PREF_TEXT_SHADOW, 1)) {
+ 0 -> 0f
+ 1 -> 5f
+ 2 -> 5f
+ else -> 5f
+ }
+ val shadowColor = when (SP.getInt(Constants.PREF_TEXT_SHADOW, 1)) {
+ 0 -> Color.TRANSPARENT
+ 1 -> R.color.black_50
+ 2 -> Color.BLACK
+ else -> R.color.black_50
+ }
+ val shadowDy = when (SP.getInt(Constants.PREF_TEXT_SHADOW, 1)) {
+ 0 -> 0f
+ 1 -> 0f
+ 2 -> 1f
+ else -> 0f
+ }
+ v.empty_date.setShadowLayer(shadowRadius, 0f, shadowDy, shadowColor)
+ v.divider1.setShadowLayer(shadowRadius, 0f, shadowDy, shadowColor)
+ v.temp.setShadowLayer(shadowRadius, 0f, shadowDy, shadowColor)
+ v.next_event.setShadowLayer(shadowRadius, 0f, shadowDy, shadowColor)
+ v.next_event_difference_time.setShadowLayer(shadowRadius, 0f, shadowDy, shadowColor)
+ v.next_event_date.setShadowLayer(shadowRadius, 0f, shadowDy, shadowColor)
+ v.divider2.setShadowLayer(shadowRadius, 0f, shadowDy, shadowColor)
+ v.calendar_temp.setShadowLayer(shadowRadius, 0f, 0f, shadowColor)
+ v.time.setShadowLayer(shadowRadius, 0f, shadowDy, shadowColor)
val product_sans: Typeface = Typeface.createFromAsset(context.assets, "fonts/product_sans_regular.ttf")
@@ -314,6 +367,7 @@ class TheWidget : AppWidgetProvider() {
v.next_event_date.typeface = product_sans
v.divider2.typeface = product_sans
v.calendar_temp.typeface = product_sans
+ v.time.typeface = product_sans
return v
}
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/util/CalendarUtil.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/util/CalendarUtil.kt
index b94dc12..cf2f972 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/util/CalendarUtil.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/util/CalendarUtil.kt
@@ -9,12 +9,17 @@ import android.net.Uri
import android.preference.PreferenceManager
import android.provider.CalendarContract
import android.util.Log
+import android.util.TimeUtils
import android.widget.Toast
import com.tommasoberlose.anotherwidget.R
import com.tommasoberlose.anotherwidget.`object`.CalendarSelector
import com.tommasoberlose.anotherwidget.`object`.Constants
import com.tommasoberlose.anotherwidget.`object`.Event
+import me.everything.providers.android.calendar.CalendarProvider
+import me.everything.providers.android.contacts.ContactsProvider
import java.util.*
+import java.util.concurrent.TimeUnit
+import kotlin.Comparator
/**
* Created by tommaso on 08/10/17.
@@ -36,6 +41,7 @@ object CalendarUtil {
3 -> limit.add(Calendar.DAY_OF_MONTH, 1)
4 -> limit.add(Calendar.DAY_OF_MONTH, 3)
5 -> limit.add(Calendar.DAY_OF_MONTH, 7)
+ 6 -> limit.add(Calendar.HOUR, 1)
else -> limit.add(Calendar.HOUR, 6)
}
@@ -47,49 +53,45 @@ object CalendarUtil {
if (!Util.checkGrantedPermission(context, Manifest.permission.READ_CALENDAR)) {
resetNextEventData(context)
} else {
-
- val instanceCursor = context.contentResolver.query(builder.build(), arrayOf(CalendarContract.Instances.EVENT_ID, CalendarContract.Instances.BEGIN, CalendarContract.Instances.END), null, null, null)
- if (instanceCursor != null && instanceCursor.count > 0) {
- instanceCursor.moveToFirst()
-
- for (i in 0 until instanceCursor.count) {
- val ID = instanceCursor.getInt(0)
-
- val eventCursor = context.contentResolver.query(CalendarContract.Events.CONTENT_URI, arrayOf(CalendarContract.Events.TITLE, CalendarContract.Events.ALL_DAY, CalendarContract.Events.CALENDAR_ID, CalendarContract.Events.EVENT_LOCATION),
- CalendarContract.Events._ID + " = ?",
- arrayOf(Integer.toString(ID)), null)
-
- if (eventCursor != null && eventCursor.count > 0) {
- eventCursor.moveToFirst()
-
- for (j in 0 until eventCursor.count) {
- val e = Event(eventCursor, instanceCursor)
- val allDay: Boolean = !eventCursor.getString(1).equals("0")
- if ((SP.getBoolean(Constants.PREF_CALENDAR_ALL_DAY, false) || !allDay) && !(SP.getString(Constants.PREF_CALENDAR_FILTER, "").contains(" " + e.calendarID + ","))) {
- eventList.add(e)
- }
- eventCursor.moveToNext()
- }
-
- eventCursor.close()
- }
-
- instanceCursor.moveToNext()
+ val provider = CalendarProvider(context)
+ val instances = provider.getInstances(now.timeInMillis, limit.timeInMillis).list
+ for (instance in instances) {
+ val e = provider.getEvent(instance.eventId)
+ if (e != null && (SP.getBoolean(Constants.PREF_CALENDAR_ALL_DAY, false) || !e.allDay) && !(SP.getString(Constants.PREF_CALENDAR_FILTER, "").contains(" " + e.calendarId + ",")) && (SP.getBoolean(Constants.PREF_SHOW_DECLINED_EVENTS, true) || !e.selfAttendeeStatus.equals(CalendarContract.Attendees.ATTENDEE_STATUS_DECLINED))) {
+ eventList.add(Event(e.id.toInt(), e.title, e.dTStart, e.dTend, e.calendarId.toInt(), e.allDay, e.eventLocation))
}
-
- instanceCursor.close()
}
if (eventList.isEmpty()) {
resetNextEventData(context)
} else {
- Collections.sort(eventList, { event: Event, event1: Event ->
- if (event.startDate > event1.startDate) {
- return@sort 1
- } else if (event.startDate < event1.startDate) {
- return@sort -1
+ eventList.sortWith(Comparator { event: Event, event1: Event ->
+ if (event.allDay && event1.allDay) {
+ 0
+ } else {
+ if (event.allDay) {
+ Log.d("AW1", event.title + " " + event.startDate + " - " + event1.title + " " + event1.startDate)
+ if (TimeUnit.MILLISECONDS.toMinutes(event1.startDate - now.timeInMillis) > 31 || now.timeInMillis > event1.endDate) {
+ 1
+ } else {
+ -1
+ }
+ } else if (event1.allDay) {
+ Log.d("AW2", event.title + " " + event.startDate + " - " + event1.title + " " + event1.startDate)
+ if (TimeUnit.MILLISECONDS.toMinutes(event.startDate - now.timeInMillis) > 31 || now.timeInMillis > event.endDate) {
+ -1
+ } else {
+ 1
+ }
+ } else {
+ if (event.startDate > event1.startDate) {
+ 1
+ } else if (event.startDate < event1.startDate) {
+ -1
+ }
+ 0
+ }
}
- return@sort 0
})
saveNextEventData(context, eventList.get(0))
}
@@ -100,13 +102,16 @@ object CalendarUtil {
}
- fun getCalendarList(context: Context): List {
- val calendarList = ArrayList()
+ fun getCalendarList(context: Context): List {
+ val calendarList = ArrayList()
if (!Util.checkGrantedPermission(context, Manifest.permission.READ_CALENDAR)) {
return calendarList
}
+ val provider = CalendarProvider(context)
+ return provider.calendars.list
+/*
try {
val calendarCursor = context.contentResolver.query(Uri.parse("content://com.android.calendar/calendars"),
arrayOf(CalendarContract.Calendars._ID, CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, CalendarContract.Calendars.ACCOUNT_NAME),
@@ -157,7 +162,7 @@ object CalendarUtil {
}
} finally {
return calendarList
- }
+ }*/
}
@SuppressLint("ApplySharedPref")
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 598ea92..c1bdc61 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/util/Util.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/util/Util.kt
@@ -28,6 +28,7 @@ import android.util.TypedValue
import android.content.Intent
import android.content.ComponentName
import android.preference.PreferenceManager
+import android.provider.AlarmClock
import android.provider.CalendarContract
import android.provider.Settings
import android.support.v4.graphics.drawable.DrawableCompat
@@ -62,7 +63,7 @@ object Util {
update.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, widgetIds)
update.action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
context.sendBroadcast(update)
- context.sendBroadcast(Intent(Constants.ACTION_SOMETHING_APPENED))
+ context.sendBroadcast(Intent(Constants.ACTION_SOMETHING_HAPPENED))
}
fun showNotification(context: Context) {
@@ -144,23 +145,6 @@ object Util {
}
}
- fun buildUpdate(context: Context, time: String, fontPath: String): Bitmap {
- val myBitmap:Bitmap = Bitmap.createBitmap(convertDpToPixel(300f, context).toInt(), convertDpToPixel(40f, context).toInt(), Bitmap.Config.ARGB_8888)
- val myCanvas: Canvas = Canvas(myBitmap)
- val paint: Paint = Paint()
- val clock: Typeface = Typeface.createFromAsset(context.assets, fontPath)
- paint.isAntiAlias = true
- paint.isSubpixelText = true
- paint.typeface = clock
- paint.style = Paint.Style.FILL
- paint.color = Color.WHITE
- paint.textSize = convertSpToPixels(14f, context)
- paint.textAlign = Paint.Align.CENTER
- paint.setShadowLayer(5f,0f, 0f, R.color.black_50)
- myCanvas.drawText("Ultra Pixel Meeting Ciao Ciao", convertDpToPixel(150f, context), convertDpToPixel(20f, context), paint)
- return myBitmap;
- }
-
fun getBitmapFromView(view: View): Bitmap {
//Define a bitmap with the same size as the view
val measuredWidth = View.MeasureSpec.makeMeasureSpec(view.width, View.MeasureSpec.UNSPECIFIED)
@@ -223,10 +207,20 @@ object Util {
3 -> R.string.settings_show_until_subtitle_3
4 -> R.string.settings_show_until_subtitle_4
5 -> R.string.settings_show_until_subtitle_5
+ 6 -> R.string.settings_show_until_subtitle_6
else -> R.string.settings_show_until_subtitle_1
}
}
+ fun getTextshadowString(shadow: Int): Int {
+ return when (shadow) {
+ 0 -> R.string.settings_text_shadow_subtitle_none
+ 1 -> R.string.settings_text_shadow_subtitle_low
+ 2 -> R.string.settings_text_shadow_subtitle_high
+ else -> R.string.settings_text_shadow_subtitle_low
+ }
+ }
+
fun getCalendarIntent(context: Context): Intent {
val SP = PreferenceManager.getDefaultSharedPreferences(context)
if (SP.getString(Constants.PREF_CALENDAR_APP_PACKAGE, "").equals("")) {
@@ -298,6 +292,26 @@ object Util {
}
}
+ fun getClockIntent(context: Context): Intent {
+ val SP = PreferenceManager.getDefaultSharedPreferences(context)
+ if (SP.getString(Constants.PREF_CLOCK_APP_PACKAGE, "").equals("")) {
+ val clockIntent = Intent(AlarmClock.ACTION_SHOW_ALARMS)
+ clockIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ return clockIntent
+ } else {
+ val pm: PackageManager = context.packageManager
+ return try {
+ val intent: Intent = pm.getLaunchIntentForPackage(SP.getString(Constants.PREF_CLOCK_APP_PACKAGE, ""))
+ intent.addCategory(Intent.CATEGORY_LAUNCHER)
+ intent
+ } catch (e: Exception) {
+ val clockIntent = Intent(AlarmClock.ACTION_SHOW_ALARMS)
+ clockIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ return clockIntent
+ }
+ }
+ }
+
fun getCapWordString(text: String): String {
return try {
val ar = text.split(" ")
@@ -427,9 +441,10 @@ object Util {
val nowDate = DateTime(now)
val eventDate = DateTime(start)
- val difference = start - now
+ var difference = start - now
+ difference += 60 * 1000 - (difference % (60 * 1000))
- if (difference < 0) {
+ if (difference <= 0) {
return ""
} else if (TimeUnit.MILLISECONDS.toHours(difference) < 1) {
val minutes = TimeUnit.MILLISECONDS.toMinutes(difference)
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 3ce9264..5ded67f 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/util/WeatherUtil.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/util/WeatherUtil.kt
@@ -20,10 +20,14 @@ import android.support.v4.content.ContextCompat.startActivity
import android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS
import android.content.Intent
import android.location.LocationManager
+import android.support.annotation.NonNull
import android.util.Log
import com.google.android.gms.awareness.Awareness
import com.google.android.gms.awareness.snapshot.WeatherResponse
+import com.google.android.gms.awareness.snapshot.WeatherResult
import com.google.android.gms.awareness.state.Weather
+import com.google.android.gms.common.api.GoogleApiClient
+import com.google.android.gms.common.api.ResultCallback
import com.google.android.gms.tasks.OnFailureListener
import com.google.android.gms.tasks.OnSuccessListener
import java.util.*
@@ -40,40 +44,53 @@ object WeatherUtil {
val SP: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
if (SP.getString(Constants.PREF_CUSTOM_LOCATION_ADD, "").equals("") || SP.getString(Constants.PREF_CUSTOM_LOCATION_LAT, "").equals("") || SP.getString(Constants.PREF_CUSTOM_LOCATION_LON, "").equals("")) {
-
- newWeatherProvider(context)
- return
-/*
- if (!Util.checkGrantedPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)) {
- return
- }
- 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)
+ if (SP.getInt(Constants.PREF_WEATHER_PROVIDER, Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS) == Constants.WEATHER_PROVIDER_GOOGLE_AWARENESS) {
+ newWeatherProvider(context)
} else {
- if (gpsEnabled) {
- val gpsLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)
- if (gpsLocation != null) {
- getCurrentWeather(context, gpsLocation)
- return
+ if (!Util.checkGrantedPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)) {
+ return
+ }
+ val mGoogleApiClient = GoogleApiClient.Builder(context)
+ .addApi(Awareness.API)
+ .build()
+ mGoogleApiClient.connect()
+ Awareness.SnapshotApi.getLocation(mGoogleApiClient)
+ .setResultCallback({ locationResult ->
+ if (locationResult.status.isSuccess) {
+ 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))
}
}
- 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())
}
@@ -84,17 +101,25 @@ object WeatherUtil {
if (!Util.checkGrantedPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)) {
return
}
- Awareness.getSnapshotClient(context).weather
- .addOnSuccessListener { weatherResponse ->
- val weather: Weather = weatherResponse.weather
- val SP: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
- SP.edit()
- .putFloat(Constants.PREF_WEATHER_TEMP, weather.getTemperature(if (SP.getString(Constants.PREF_WEATHER_TEMP_UNIT, "F").equals("F")) Weather.FAHRENHEIT else Weather.CELSIUS))
- .putString(Constants.PREF_WEATHER_ICON, getIconCodeFromAwareness(weather.conditions))
- .putString(Constants.PREF_WEATHER_REAL_TEMP_UNIT, SP.getString(Constants.PREF_WEATHER_TEMP_UNIT, "F"))
- .commit()
- Util.updateWidget(context)
- }
+ val mGoogleApiClient = GoogleApiClient.Builder(context)
+ .addApi(Awareness.API)
+ .build();
+ mGoogleApiClient.connect()
+
+ Awareness.SnapshotApi.getWeather(mGoogleApiClient)
+ .setResultCallback({ weatherResult ->
+ if (weatherResult.status.isSuccess) {
+ val weather: Weather = weatherResult.weather
+ val SP: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
+ SP.edit()
+ .putFloat(Constants.PREF_WEATHER_TEMP, weather.getTemperature(if (SP.getString(Constants.PREF_WEATHER_TEMP_UNIT, "F").equals("F")) Weather.FAHRENHEIT else Weather.CELSIUS))
+ .putString(Constants.PREF_WEATHER_ICON, getIconCodeFromAwareness(weather.conditions))
+ .putString(Constants.PREF_WEATHER_REAL_TEMP_UNIT, SP.getString(Constants.PREF_WEATHER_TEMP_UNIT, "F"))
+ .commit()
+ Util.updateWidget(context)
+ }
+ mGoogleApiClient.disconnect()
+ })
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 46a4ebd..bbc4ed5 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -81,31 +81,6 @@
android:layout_marginBottom="8dp"
android:text="@string/settings_general_title"
style="@style/AnotherWidget.Settings.Header"/>
-
-
-
-
-
+
+
+
+
+
+
+
+
+ android:orientation="horizontal">
+
+
+
+
-
+ android:text="@string/beta"
+ android:layout_marginLeft="8dp"
+ android:layout_gravity="center_vertical|right"
+ style="@style/AnotherWidget.Settings.Header"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+ android:text="@string/api_key_info_title"
+ android:gravity="start"
+ style="@style/AnotherWidget.Main.Title"
+ android:textSize="20sp"
+ android:textColor="@android:color/black"/>
+
diff --git a/app/src/main/res/layout/main_menu_layout.xml b/app/src/main/res/layout/main_menu_layout.xml
index 072fa40..17b61a3 100644
--- a/app/src/main/res/layout/main_menu_layout.xml
+++ b/app/src/main/res/layout/main_menu_layout.xml
@@ -123,6 +123,7 @@
android:clickable="true"
android:focusable="true"
android:padding="16dp"
+ android:visibility="gone"
android:id="@+id/action_support"
android:orientation="horizontal">
+ style="@style/AnotherWidget.Title"/>
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml
index f30b826..0edbbb5 100644
--- a/app/src/main/res/values-it-rIT/strings.xml
+++ b/app/src/main/res/values-it-rIT/strings.xml
@@ -93,7 +93,7 @@
Ciao a tutti.
Però a causa del successo dell\'applicazione, sicuramente oltre ogni mia aspettativa, il provider del meteo non riesce a supportare il numero di richieste che arrivano (a causa dell\'utilizzo di un account gratuito).
Sono costretto a chiedervi di registrarvi su OpenWeather.com; l\'operazione richiederà solo alcuni minuti e dopo non avrete più problemi con la fruizione delle informazioni sul meteo!
Mi dispiace per l\'inconveniente ma continuate a supportarmi!!]]>
Ben Fatto!
- dieci minuti prima che la tua chiave sia attivata.
Quindi rilassati! Il meteo verrà aggiornato non appena sarà disponibile!]]>
+ dieci minuti prima che la tua chiave sia attivata.
Quindi rilassati! Il meteo verrà aggiornato non appena sarà disponibile!]]>
" ore"
Domani
Oggi
@@ -110,4 +110,22 @@
Mostra l\'ora sopra eventi e meteo
Orologio visibile
Orologio non visibile
+ Dimensione Testo Orologio
+ Ombra Testo
+ Nessuna
+ Bassa
+ Alta
+ Impostazioni Avanzate
+ Beta
+ Font Product Sans
+ L\'utilizzo del Product Sans disabilita i tap sugli elementi del widget. Ci sto attualmente lavorando.
+ 1 Ora dopo
+ Tempo rimanente all\'evento
+ Event Rifiutati
+ Visibile
+ Non Visibile
+ Dettagli Evento Google Calendar
+ App Calendario di Default
+ Meteo Google
+ App Orologio di Default
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6a970cf..6f1345d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -94,7 +94,7 @@
Enter the key in this section and save it. Once the key is activated the weather will be visible.
Hi Everyone!
Go to OpenWeather.com
- ten minutes before your API key is activated.
So relax! The weather will be updated as soon as it is available!!]]>
+ ten minutes before your API key is activated.
So relax! The weather will be updated as soon as it is available!!]]>
Well Done!
h
Tomorrow
@@ -114,4 +114,22 @@
View the time over events and weather
Clock is visible
Clock is not visible
+ Clock Text Size
+ Text Shadow
+ None
+ Low
+ High
+ Advanced Settings
+ Beta
+ Product Sans Font
+ Using Product Sans disabled the possibilty to tap widget elements. I\'m working on it.
+ 1 hour later
+ Time left for the event
+ Visible
+ Not Visible
+ Declined Events
+ Google Weather
+ Google Calendar Event Details
+ Default Calendar App
+ Default Clock App