First Commit

This commit is contained in:
Tommaso Berlose
2017-10-06 18:13:30 +02:00
commit 13ba1e3281
116 changed files with 1973 additions and 0 deletions

View File

@ -0,0 +1,95 @@
package com.tommasoberlose.anotherwidget.ui.activity
import android.Manifest
import android.content.pm.PackageManager
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v4.app.ActivityCompat
import android.appwidget.AppWidgetManager
import android.content.Intent
import android.content.ComponentName
import android.view.View
import android.widget.Toast
import com.tommasoberlose.anotherwidget.`object`.Constants
import com.tommasoberlose.anotherwidget.R
import com.tommasoberlose.anotherwidget.util.Util
import com.tommasoberlose.anotherwidget.ui.widget.TheWidget
import com.tommasoberlose.anotherwidget.util.UpdatesReceiver
import com.tommasoberlose.anotherwidget.util.WeatherReceiver
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
action_support.setOnClickListener(object: View.OnClickListener {
override fun onClick(p0: View?) {
Util.openURI(this@MainActivity, "https://paypal.me/tommasoberlose")
}
})
action_rate.setOnClickListener(object: View.OnClickListener {
override fun onClick(p0: View?) {
Util.openURI(this@MainActivity, "")
}
})
action_share.setOnClickListener(object: View.OnClickListener {
override fun onClick(p0: View?) {
Util.share(this@MainActivity)
}
})
}
override fun onResume() {
super.onResume()
updateUI()
Util.updateWidget(this)
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>,
grantResults: IntArray) {
when (requestCode) {
Constants.CALENDAR_REQUEST_CODE -> if (permissions.size != 1 || grantResults.size != 1 || grantResults[0] != PackageManager.PERMISSION_GRANTED) {
UpdatesReceiver().removeUpdates(this)
} else {
UpdatesReceiver().setUpdates(this)
}
Constants.LOCATION_REQUEST_CODE -> if (permissions.size != 1 || grantResults.size != 1 || grantResults[0] != PackageManager.PERMISSION_GRANTED) {
WeatherReceiver().removeUpdates(this)
} else {
WeatherReceiver().setUpdates(this)
}
}
}
fun updateUI() {
no_calendar_permission_container.visibility= View.GONE
no_location_permission_container.visibility= View.GONE
if (!Util.checkGrantedPermission(this, Manifest.permission.READ_CALENDAR)) {
no_calendar_permission_container.visibility = View.VISIBLE
request_calendar.setOnClickListener(object: View.OnClickListener {
override fun onClick(view: View?) {
ActivityCompat.requestPermissions(this@MainActivity, arrayOf(Manifest.permission.READ_CALENDAR), Constants.CALENDAR_REQUEST_CODE)
}
})
} else {
if (!Util.checkGrantedPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)) {
no_location_permission_container.visibility = View.VISIBLE
request_location.setOnClickListener(object: View.OnClickListener {
override fun onClick(view: View?) {
ActivityCompat.requestPermissions(this@MainActivity, arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION), Constants.LOCATION_REQUEST_CODE)
}
})
}
}
}
}

View File

@ -0,0 +1,224 @@
package com.tommasoberlose.anotherwidget.ui.widget
import android.Manifest
import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProvider
import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import android.preference.PreferenceManager
import android.util.Log
import android.view.View
import android.widget.RemoteViews
import com.tommasoberlose.anotherwidget.`object`.Constants
import com.tommasoberlose.anotherwidget.`object`.Event
import com.tommasoberlose.anotherwidget.R
import com.tommasoberlose.anotherwidget.ui.activity.MainActivity
import com.tommasoberlose.anotherwidget.util.UpdatesReceiver
import com.tommasoberlose.anotherwidget.util.Util
import com.tommasoberlose.anotherwidget.util.WeatherReceiver
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale
import java.util.concurrent.TimeUnit
import android.app.PendingIntent
import android.net.Uri
import android.provider.CalendarContract
import android.content.ContentUris
/**
* Implementation of App Widget functionality.
*/
class TheWidget : AppWidgetProvider() {
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
for (appWidgetId in appWidgetIds) {
updateAppWidget(context, appWidgetManager, appWidgetId)
}
}
override fun onEnabled(context: Context) {
UpdatesReceiver().setUpdates(context)
WeatherReceiver().setUpdates(context)
Util.showNotification(context)
}
override fun onDisabled(context: Context) {
UpdatesReceiver().removeUpdates(context)
WeatherReceiver().removeUpdates(context)
}
companion object {
internal fun updateAppWidget(context: Context, appWidgetManager: AppWidgetManager,
appWidgetId: Int) {
var views = RemoteViews(context.packageName, R.layout.the_widget)
views = updateCalendarView(context, views, appWidgetId)
views = updateLocationView(context, views)
appWidgetManager.updateAppWidget(appWidgetId, views)
}
fun updateCalendarView(context: Context, views: RemoteViews, widgetID: Int): RemoteViews {
val now = Calendar.getInstance()
val calendarLayout = Util.checkGrantedPermission(context, Manifest.permission.READ_CALENDAR)
views.setViewVisibility(R.id.empty_layout, View.VISIBLE)
views.setViewVisibility(R.id.calendar_layout, View.GONE)
views.setTextViewText(R.id.empty_date, Constants.dateFormat.format(now.time))
val calIntent = Intent(Intent.ACTION_MAIN)
calIntent.addCategory(Intent.CATEGORY_APP_CALENDAR)
val calPIntent = PendingIntent.getActivity(context, widgetID, calIntent, 0)
views.setOnClickPendingIntent(R.id.main_layout, calPIntent)
if (calendarLayout) {
val eventList = Util.getNextEvent(context)
if (eventList.isNotEmpty()) {
val difference = eventList[0].startDate - now.timeInMillis
if (difference > 1000 * 60) {
var time = ""
val hour = TimeUnit.MILLISECONDS.toHours(difference)
if (hour > 0) {
time = hour.toString() + "h"
}
val minutes = TimeUnit.MILLISECONDS.toMinutes(difference - hour * 3600 * 1000)
if (minutes > 0) {
time += " " + minutes + "min"
}
views.setTextViewText(R.id.next_event, String.format("%s in %s", eventList[0].title, time))
} else {
views.setTextViewText(R.id.next_event, String.format("%s", eventList[0].title))
}
views.setTextViewText(R.id.next_event_date, String.format("%s - %s", Constants.hourFormat.format(eventList[0].startDate), Constants.hourFormat.format(eventList[0].endDate)))
views.setViewVisibility(R.id.empty_layout, View.GONE)
views.setViewVisibility(R.id.calendar_layout, View.VISIBLE)
val builder = CalendarContract.CONTENT_URI.buildUpon()
builder.appendPath("time")
ContentUris.appendId(builder, eventList[0].startDate)
val intent = Intent(Intent.ACTION_VIEW)
.setData(builder.build())
val pIntent = PendingIntent.getActivity(context, widgetID, intent, 0)
views.setOnClickPendingIntent(R.id.main_layout, pIntent)
}
}
return views
}
fun updateLocationView(context: Context, views: RemoteViews): RemoteViews {
val locationLayout = Util.checkGrantedPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION)
val SP = PreferenceManager.getDefaultSharedPreferences(context)
if (locationLayout && SP.contains(Constants.PREF_WEATHER_TEMP) && SP.contains(Constants.PREF_WEATHER_ICON)) {
views.setViewVisibility(R.id.weather, View.VISIBLE)
views.setViewVisibility(R.id.calendar_weather, View.VISIBLE)
val temp = String.format(Locale.getDefault(), "%.0f °C", SP.getFloat(Constants.PREF_WEATHER_TEMP, 0f))
views.setViewVisibility(R.id.weather_icon, View.VISIBLE)
views.setViewVisibility(R.id.empty_weather_icon, View.VISIBLE)
when (SP.getString(Constants.PREF_WEATHER_ICON, "")) {
"01d" -> {
views.setImageViewResource(R.id.weather_icon, R.drawable.clear_day)
views.setImageViewResource(R.id.empty_weather_icon, R.drawable.clear_day)
}
"02d" -> {
views.setImageViewResource(R.id.weather_icon, R.drawable.partly_cloudy)
views.setImageViewResource(R.id.empty_weather_icon, R.drawable.partly_cloudy)
}
"03d" -> {
views.setImageViewResource(R.id.weather_icon, R.drawable.mostly_cloudy)
views.setImageViewResource(R.id.empty_weather_icon, R.drawable.mostly_cloudy)
}
"04d" -> {
views.setImageViewResource(R.id.weather_icon, R.drawable.cloudy_weather)
views.setImageViewResource(R.id.empty_weather_icon, R.drawable.cloudy_weather)
}
"09d" -> {
views.setImageViewResource(R.id.weather_icon, R.drawable.storm_weather_day)
views.setImageViewResource(R.id.empty_weather_icon, R.drawable.storm_weather_day)
}
"10d" -> {
views.setImageViewResource(R.id.weather_icon, R.drawable.rainy_day)
views.setImageViewResource(R.id.empty_weather_icon, R.drawable.rainy_day)
}
"11d" -> {
views.setImageViewResource(R.id.weather_icon, R.drawable.thunder_day)
views.setImageViewResource(R.id.empty_weather_icon, R.drawable.thunder_day)
}
"13d" -> {
views.setImageViewResource(R.id.weather_icon, R.drawable.snow_day)
views.setImageViewResource(R.id.empty_weather_icon, R.drawable.snow_day)
}
"50d" -> {
views.setImageViewResource(R.id.weather_icon, R.drawable.haze_day)
views.setImageViewResource(R.id.empty_weather_icon, R.drawable.haze_day)
}
"01n" -> {
views.setImageViewResource(R.id.weather_icon, R.drawable.clear_night)
views.setImageViewResource(R.id.empty_weather_icon, R.drawable.clear_night)
}
"02n" -> {
views.setImageViewResource(R.id.weather_icon, R.drawable.partly_cloudy_night)
views.setImageViewResource(R.id.empty_weather_icon, R.drawable.partly_cloudy_night)
}
"03n" -> {
views.setImageViewResource(R.id.weather_icon, R.drawable.mostly_cloudy_night)
views.setImageViewResource(R.id.empty_weather_icon, R.drawable.mostly_cloudy_night)
}
"04n" -> {
views.setImageViewResource(R.id.weather_icon, R.drawable.cloudy_weather)
views.setImageViewResource(R.id.empty_weather_icon, R.drawable.cloudy_weather)
}
"09n" -> {
views.setImageViewResource(R.id.weather_icon, R.drawable.storm_weather_night)
views.setImageViewResource(R.id.empty_weather_icon, R.drawable.storm_weather_night)
}
"10n" -> {
views.setImageViewResource(R.id.weather_icon, R.drawable.rainy_night)
views.setImageViewResource(R.id.empty_weather_icon, R.drawable.rainy_night)
}
"11n" -> {
views.setImageViewResource(R.id.weather_icon, R.drawable.thunder_night)
views.setImageViewResource(R.id.empty_weather_icon, R.drawable.thunder_night)
}
"13n" -> {
views.setImageViewResource(R.id.weather_icon, R.drawable.snow_night)
views.setImageViewResource(R.id.empty_weather_icon, R.drawable.snow_night)
}
"50n" -> {
views.setImageViewResource(R.id.weather_icon, R.drawable.haze_night)
views.setImageViewResource(R.id.empty_weather_icon, R.drawable.haze_night)
}
else -> {
views.setViewVisibility(R.id.weather_icon, View.GONE)
views.setViewVisibility(R.id.empty_weather_icon, View.GONE)
}
}
views.setTextViewText(R.id.temp, temp)
views.setTextViewText(R.id.calendar_temp, temp)
} else {
views.setViewVisibility(R.id.weather, View.GONE)
views.setViewVisibility(R.id.calendar_weather, View.GONE)
}
return views
}
}
}