Fix events order, fix horizontal resize, add widget preview toggle, fix next event function, fix weather icon click listner and relase v1.3-beta1

This commit is contained in:
Tommaso Berlose
2017-11-07 00:01:40 +01:00
parent 170add3073
commit 0a289d82b2
31 changed files with 297 additions and 139 deletions

View File

@ -0,0 +1,27 @@
package com.tommasoberlose.anotherwidget.ui
import android.annotation.SuppressLint
import android.app.Application
import android.content.SharedPreferences
import android.preference.PreferenceManager
import android.util.Log
import com.tommasoberlose.anotherwidget.`object`.Constants
import com.tommasoberlose.anotherwidget.util.MyMigration
import com.tommasoberlose.anotherwidget.util.Util
import io.realm.Realm
import io.realm.RealmConfiguration
class AWApplication : Application() {
@SuppressLint("ApplySharedPref")
override fun onCreate() {
super.onCreate()
Realm.init(this)
val config = RealmConfiguration.Builder()
.schemaVersion(2)
.migration(MyMigration())
.deleteRealmIfMigrationNeeded()
.build()
Realm.setDefaultConfiguration(config)
}
}

View File

@ -59,6 +59,7 @@ class MainActivity : AppCompatActivity() {
}
}
@SuppressLint("ApplySharedPref")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
@ -66,6 +67,8 @@ class MainActivity : AppCompatActivity() {
sendBroadcast(Intent(Constants.ACTION_CALENDAR_UPDATE))
sendBroadcast(Intent(Constants.ACTION_WEATHER_UPDATE))
val SP = PreferenceManager.getDefaultSharedPreferences(this)
if (intent.extras?.containsKey(Constants.ACTION_EXTRA_OPEN_WEATHER_PROVIDER) == true) {
startActivityForResult(Intent(this, WeatherProviderActivity::class.java), Constants.WEATHER_PROVIDER_REQUEST_CODE)
}
@ -98,6 +101,28 @@ class MainActivity : AppCompatActivity() {
}
})
if (SP.getBoolean(Constants.PREF_SHOW_WIDGET_PREVIEW, true)) {
menuView.widget_preview_icon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_action_hide_preview))
menuView.widget_preview_label.text = getString(R.string.action_hide_widget_preview)
menuView.action_toggle_widget_preview.setOnClickListener {
SP.edit()
.putBoolean(Constants.PREF_SHOW_WIDGET_PREVIEW, false)
.commit()
updateUI()
mBottomSheetDialog.dismiss()
}
} else {
menuView.widget_preview_icon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_action_show_preview))
menuView.widget_preview_label.text = getString(R.string.action_show_widget_preview)
menuView.action_toggle_widget_preview.setOnClickListener {
SP.edit()
.putBoolean(Constants.PREF_SHOW_WIDGET_PREVIEW, true)
.commit()
updateUI()
mBottomSheetDialog.dismiss()
}
}
menuView.action_rate.setOnClickListener(object: View.OnClickListener {
override fun onClick(p0: View?) {
Util.rateApp(this@MainActivity, "https://play.google.com/store/apps/details?id=com.tommasoberlose.anotherwidget")
@ -183,16 +208,23 @@ class MainActivity : AppCompatActivity() {
updateClockView()
val SP = PreferenceManager.getDefaultSharedPreferences(this)
val displayMetrics = Resources.getSystem().displayMetrics
var height = Util.convertDpToPixel(120f, this).toInt()
if (SP.getBoolean(Constants.PREF_SHOW_CLOCK, false)) {
height += Util.convertSpToPixels(SP.getFloat(Constants.PREF_TEXT_CLOCK_SIZE, 90f), this).toInt() + Util.convertDpToPixel(8f, this).toInt()
if (SP.getBoolean(Constants.PREF_SHOW_WIDGET_PREVIEW, true)) {
val displayMetrics = Resources.getSystem().displayMetrics
var height = Util.convertDpToPixel(120f, this).toInt()
if (SP.getBoolean(Constants.PREF_SHOW_CLOCK, false)) {
height += Util.convertSpToPixels(SP.getFloat(Constants.PREF_TEXT_CLOCK_SIZE, 90f), this).toInt() + Util.convertDpToPixel(8f, this).toInt()
}
if (SP.getFloat(Constants.PREF_TEXT_MAIN_SIZE, 24f) + SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f) > 50) {
height += Util.convertDpToPixel(24f, this).toInt()
}
widget_bitmap.setImageBitmap(Util.getBitmapFromView(main_layout, displayMetrics.widthPixels, height - Util.convertDpToPixel(32f, this).toInt()))
widget.layoutParams.height = height + Util.convertDpToPixel(16f, this).toInt()
widget.visibility = View.VISIBLE
} else {
widget.visibility = View.GONE
}
if (SP.getFloat(Constants.PREF_TEXT_MAIN_SIZE, 24f) + SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f) > 50) {
height += Util.convertDpToPixel(24f, this).toInt()
}
widget_bitmap.setImageBitmap(Util.getBitmapFromView(main_layout, displayMetrics.widthPixels, height - Util.convertDpToPixel(32f, this).toInt()))
widget.layoutParams.height = height + Util.convertDpToPixel(16f, this).toInt()
}
@ -283,7 +315,7 @@ class MainActivity : AppCompatActivity() {
if (calendarLayout) {
val e = CalendarUtil.getNextEvent(this)
if (e.id != 0) {
if (e.id != 0.toLong()) {
next_event.text = e.title
if (SP.getBoolean(Constants.PREF_SHOW_NEXT_EVENT, false) && CalendarUtil.getEventsCount(this) > 1) {
@ -364,8 +396,8 @@ class MainActivity : AppCompatActivity() {
second_row_icon.scaleX = SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f) / 18f
second_row_icon.scaleY = SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f) / 18f
weather_icon.scaleX = SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f) / 20f
weather_icon.scaleY = SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f) / 20f
weather_icon.scaleX = SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f) / 18f
weather_icon.scaleY = SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f) / 18f
empty_weather_icon.scaleX = SP.getFloat(Constants.PREF_TEXT_MAIN_SIZE, 24f) / 24f
empty_weather_icon.scaleY = SP.getFloat(Constants.PREF_TEXT_MAIN_SIZE, 24f) / 24f

View File

@ -32,62 +32,66 @@ class SupportDevActivity : AppCompatActivity(), BillingProcessor.IBillingHandler
override fun onBillingInitialized() {
loader.visibility = View.GONE
val isAvailable = BillingProcessor.isIabServiceAvailable(this)
val isOneTimePurchaseSupported = bp!!.isOneTimePurchaseSupported
if (isAvailable && isOneTimePurchaseSupported) {
val coffee = bp!!.getPurchaseListingDetails("donation_coffee")
val donuts = bp!!.getPurchaseListingDetails("donation_donuts")
val breakfast = bp!!.getPurchaseListingDetails("donation_breakfast")
val lunch = bp!!.getPurchaseListingDetails("donation_lunch")
val dinner = bp!!.getPurchaseListingDetails("donation_dinner")
try {
val isAvailable = BillingProcessor.isIabServiceAvailable(this)
val isOneTimePurchaseSupported = bp!!.isOneTimePurchaseSupported
if (isAvailable && isOneTimePurchaseSupported) {
val coffee = bp!!.getPurchaseListingDetails("donation_coffee")
val donuts = bp!!.getPurchaseListingDetails("donation_donuts")
val breakfast = bp!!.getPurchaseListingDetails("donation_breakfast")
val lunch = bp!!.getPurchaseListingDetails("donation_lunch")
val dinner = bp!!.getPurchaseListingDetails("donation_dinner")
if (coffee != null) {
import_donation_coffee.text = coffee.priceText
action_donation_coffee.setOnClickListener {
bp!!.purchase(this, "donation_coffee")
if (coffee != null) {
import_donation_coffee.text = coffee.priceText
action_donation_coffee.setOnClickListener {
bp!!.purchase(this, "donation_coffee")
}
} else {
action_donation_coffee.visibility = View.GONE
}
} else {
action_donation_coffee.visibility = View.GONE
}
if (donuts != null) {
import_donation_donuts.text = donuts.priceText
action_donation_donuts.setOnClickListener {
bp!!.purchase(this, "donation_donuts")
if (donuts != null) {
import_donation_donuts.text = donuts.priceText
action_donation_donuts.setOnClickListener {
bp!!.purchase(this, "donation_donuts")
}
} else {
action_donation_donuts.visibility = View.GONE
}
} else {
action_donation_donuts.visibility = View.GONE
}
if (breakfast != null) {
import_donation_breakfast.text = breakfast.priceText
action_donation_breakfast.setOnClickListener {
bp!!.purchase(this, "donation_breakfast")
if (breakfast != null) {
import_donation_breakfast.text = breakfast.priceText
action_donation_breakfast.setOnClickListener {
bp!!.purchase(this, "donation_breakfast")
}
} else {
action_donation_breakfast.visibility = View.GONE
}
} else {
action_donation_breakfast.visibility = View.GONE
}
if (lunch != null) {
import_donation_lunch.text = lunch.priceText
action_donation_lunch.setOnClickListener {
bp!!.purchase(this, "donation_lunch")
if (lunch != null) {
import_donation_lunch.text = lunch.priceText
action_donation_lunch.setOnClickListener {
bp!!.purchase(this, "donation_lunch")
}
} else {
action_donation_lunch.visibility = View.GONE
}
} else {
action_donation_lunch.visibility = View.GONE
}
if (dinner != null) {
import_donation_dinner.text = dinner.priceText
action_donation_dinner.setOnClickListener {
bp!!.purchase(this, "donation_dinner")
if (dinner != null) {
import_donation_dinner.text = dinner.priceText
action_donation_dinner.setOnClickListener {
bp!!.purchase(this, "donation_dinner")
}
} else {
action_donation_dinner.visibility = View.GONE
}
} else {
action_donation_dinner.visibility = View.GONE
}
products_list.visibility = View.VISIBLE
} else {
products_list.visibility = View.VISIBLE
} else {
products_card.visibility = View.GONE
}
} catch (ignored: Exception) {
products_card.visibility = View.GONE
}
}

View File

@ -45,6 +45,7 @@ import android.text.style.StyleSpan
import android.util.DisplayMetrics
import android.util.TypedValue
import android.widget.LinearLayout
import com.tommasoberlose.anotherwidget.receiver.OpenWeatherIntentReceiver
import com.tommasoberlose.anotherwidget.ui.view.CustomTypefaceSpan
import kotlinx.android.synthetic.main.the_widget.*
import kotlinx.android.synthetic.main.the_widget.view.*
@ -136,6 +137,8 @@ class TheWidget : AppWidgetProvider() {
views = updateLocationView(context, views, appWidgetId)
views = updateClockView(context, views, appWidgetId)
views = fixViewsMargin(context, views)
appWidgetManager.updateAppWidget(appWidgetId, views)
}
@ -160,7 +163,7 @@ class TheWidget : AppWidgetProvider() {
if (calendarLayout) {
val e = CalendarUtil.getNextEvent(context)
if (e.id != 0) {
if (e.id != 0.toLong()) {
views.setTextViewText(R.id.next_event, e.title)
if (SP.getBoolean(Constants.PREF_SHOW_NEXT_EVENT, false) && CalendarUtil.getEventsCount(context) > 1) {
@ -277,8 +280,9 @@ class TheWidget : AppWidgetProvider() {
views.setTextViewText(R.id.temp, temp)
views.setTextViewText(R.id.calendar_temp, temp)
val weatherPIntent = PendingIntent.getBroadcast(context, widgetID, Intent(Constants.ACTION_OPEN_WEATHER_INTENT), 0)
val i = Intent(context, OpenWeatherIntentReceiver::class.java)
i.action = Constants.ACTION_OPEN_WEATHER_INTENT
val weatherPIntent = PendingIntent.getBroadcast(context, widgetID, i, 0)
views.setOnClickPendingIntent(R.id.weather, weatherPIntent)
views.setOnClickPendingIntent(R.id.calendar_weather, weatherPIntent)
@ -293,9 +297,7 @@ class TheWidget : AppWidgetProvider() {
val SP = PreferenceManager.getDefaultSharedPreferences(context)
if (!SP.getBoolean(Constants.PREF_SHOW_CLOCK, false)) {
views.setViewVisibility(R.id.time, View.GONE)
views.setViewVisibility(R.id.bottom_divider, View.VISIBLE)
} else {
views.setViewVisibility(R.id.bottom_divider, View.GONE)
val now = Calendar.getInstance()
if (SP.getString(Constants.PREF_HOUR_FORMAT, "12").equals("12")) {
val textBadHour = SpannableString(Constants.badHourFormat.format(now.timeInMillis).replace(" ", ""))
@ -315,6 +317,26 @@ class TheWidget : AppWidgetProvider() {
return views
}
fun fixViewsMargin(context: Context, views: RemoteViews): RemoteViews {
val SP = PreferenceManager.getDefaultSharedPreferences(context)
views.setViewVisibility(R.id.bottom_divider_24, View.GONE)
views.setViewVisibility(R.id.bottom_divider_16, View.GONE)
views.setViewVisibility(R.id.bottom_divider_8, View.GONE)
val eVisible = SP.getBoolean(Constants.PREF_SHOW_EVENTS, true) && Util.checkGrantedPermission(context, Manifest.permission.READ_CALENDAR)
if (SP.getBoolean(Constants.PREF_SHOW_CLOCK, false)) {
if (eVisible) {
views.setViewVisibility(R.id.bottom_divider_8, View.VISIBLE)
} else {
views.setViewVisibility(R.id.bottom_divider_24, View.VISIBLE)
}
} else {
if (eVisible) {
views.setViewVisibility(R.id.bottom_divider_8, View.VISIBLE)
}
}
return views
}
fun updateCalendarViewByLayout(context: Context, v: View): View {
val SP = PreferenceManager.getDefaultSharedPreferences(context)
val now = Calendar.getInstance()
@ -332,7 +354,7 @@ class TheWidget : AppWidgetProvider() {
if (calendarLayout) {
val e = CalendarUtil.getNextEvent(context)
if (e.id != 0) {
if (e.id != 0.toLong()) {
v.next_event.text = e.title
if (SP.getBoolean(Constants.PREF_SHOW_NEXT_EVENT, false) && CalendarUtil.getEventsCount(context) > 1) {
@ -418,8 +440,8 @@ class TheWidget : AppWidgetProvider() {
v.second_row_icon.scaleX = SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f) / 18f
v.second_row_icon.scaleY = SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f) / 18f
v.weather_icon.scaleX = SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f) / 20f
v.weather_icon.scaleY = SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f) / 20f
v.weather_icon.scaleX = SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f) / 16f
v.weather_icon.scaleY = SP.getFloat(Constants.PREF_TEXT_SECOND_SIZE, 16f) / 16f
v.empty_weather_icon.scaleX = SP.getFloat(Constants.PREF_TEXT_MAIN_SIZE, 24f) / 24f
v.empty_weather_icon.scaleY = SP.getFloat(Constants.PREF_TEXT_MAIN_SIZE, 24f) / 24f