mirror of
https://github.com/hmalik144/Weather-apps.git
synced 2026-03-18 15:36:04 +00:00
- Commit latest to main
Took 14 minutes
This commit is contained in:
@@ -68,7 +68,7 @@ class LocationProviderImpl(
|
||||
|
||||
@SuppressLint("MissingPermission")
|
||||
private suspend fun getAFreshLocation(): Location? {
|
||||
return client.getCurrentLocation(PRIORITY_HIGH_ACCURACY, object : CancellationToken() {
|
||||
return client.getCurrentLocation(PRIORITY_LOW_POWER, object : CancellationToken() {
|
||||
override fun isCancellationRequested(): Boolean = false
|
||||
override fun onCanceledRequested(p0: OnTokenCanceledListener): CancellationToken = this
|
||||
}).await()
|
||||
|
||||
@@ -11,8 +11,10 @@ import com.appttude.h_mal.atlas_weather.data.repository.SettingsRepository
|
||||
import com.appttude.h_mal.atlas_weather.data.room.entity.CURRENT_LOCATION
|
||||
import com.appttude.h_mal.atlas_weather.data.room.entity.EntityItem
|
||||
import com.appttude.h_mal.atlas_weather.model.weather.FullWeather
|
||||
import com.appttude.h_mal.atlas_weather.model.widget.InnerWidgetCellData
|
||||
import com.appttude.h_mal.atlas_weather.model.widget.InnerWidgetData
|
||||
import com.appttude.h_mal.atlas_weather.model.widget.WidgetData
|
||||
import com.appttude.h_mal.atlas_weather.model.widget.WidgetWeatherCollection
|
||||
import com.appttude.h_mal.atlas_weather.utils.toSmallDayName
|
||||
import com.squareup.picasso.Picasso
|
||||
import com.squareup.picasso.Target
|
||||
@@ -92,6 +94,36 @@ class ServicesHelper(
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun getWidgetWeatherCollection(): WidgetWeatherCollection? {
|
||||
return try {
|
||||
val result = repository.loadSingleCurrentWeatherFromRoom(CURRENT_LOCATION)
|
||||
|
||||
val widgetData = result.weather.let {
|
||||
val bitmap = it.current?.icon
|
||||
val location = locationProvider.getLocationNameFromLatLong(it.lat, it.lon)
|
||||
val temp = it.current?.temp?.toInt().toString()
|
||||
|
||||
WidgetData(location, bitmap, temp)
|
||||
}
|
||||
|
||||
val list = mutableListOf<InnerWidgetCellData>()
|
||||
|
||||
result.weather.daily?.drop(1)?.dropLast(2)?.forEach { dailyWeather ->
|
||||
val day = dailyWeather.dt?.toSmallDayName()
|
||||
val icon = dailyWeather.icon
|
||||
val temp = dailyWeather.max?.toInt().toString()
|
||||
|
||||
val item = InnerWidgetCellData(day, icon, temp)
|
||||
list.add(item)
|
||||
}
|
||||
list.toList()
|
||||
|
||||
WidgetWeatherCollection(widgetData, list)
|
||||
} catch (e: Exception) {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun getBitmapFromUrl(imageAddress: String?): Bitmap? {
|
||||
return suspendCoroutine { cont ->
|
||||
Picasso.get().load(imageAddress).into(object : Target {
|
||||
|
||||
@@ -12,4 +12,16 @@ data class InnerWidgetData(
|
||||
val date: String?,
|
||||
val icon: Bitmap?,
|
||||
val highTemp: String?
|
||||
)
|
||||
|
||||
|
||||
data class InnerWidgetCellData(
|
||||
val date: String?,
|
||||
val icon: String?,
|
||||
val highTemp: String?
|
||||
)
|
||||
|
||||
data class WidgetWeatherCollection(
|
||||
val widgetData: WidgetData,
|
||||
val forecast: List<InnerWidgetCellData>
|
||||
)
|
||||
BIN
app/src/main/res/drawable/location_permission_decl.png
Normal file
BIN
app/src/main/res/drawable/location_permission_decl.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
@@ -1,25 +1,27 @@
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/whole_widget_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
tools:background="@android:color/black"
|
||||
tools:layout_height="110dp">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_above="@id/central"
|
||||
android:layout_height="0dp"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_weight="1"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginStart="12dp">
|
||||
android:layout_marginStart="12dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextClock
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -34,8 +36,8 @@
|
||||
android:id="@+id/widget_current_status"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxWidth="180dp"
|
||||
android:includeFontPadding="false"
|
||||
android:maxWidth="180dp"
|
||||
android:maxLines="1"
|
||||
android:textColor="#ffffff"
|
||||
android:textSize="12sp"
|
||||
@@ -46,11 +48,11 @@
|
||||
android:id="@+id/widget_current_icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_above="@id/location_container"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_centerInParent="true"
|
||||
android:layout_above="@id/location_container"
|
||||
android:adjustViewBounds="true"
|
||||
android:layout_marginLeft="32dp"
|
||||
android:adjustViewBounds="true"
|
||||
tools:src="@drawable/ic_baseline_cloud_off_24" />
|
||||
|
||||
<LinearLayout
|
||||
@@ -59,7 +61,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_centerInParent="true"
|
||||
android:layout_marginBottom="6dp"
|
||||
android:layout_marginBottom="1dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
@@ -77,16 +79,9 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:maxWidth="180dp"
|
||||
android:autoSizeMaxTextSize="100sp"
|
||||
android:autoSizeMinTextSize="12sp"
|
||||
android:autoSizeStepGranularity="2sp"
|
||||
android:autoSizeTextType="uniform"
|
||||
android:gravity=""
|
||||
android:includeFontPadding="false"
|
||||
android:maxLines="1"
|
||||
android:textColor="#ffffff"
|
||||
android:textSize="12sp"
|
||||
tools:text="Roehampton" />
|
||||
style="@style/widget_light_home_text"
|
||||
tools:text="Hammersmith Bridge" />
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
@@ -128,23 +123,172 @@
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/central"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_centerInParent="true"
|
||||
android:orientation="vertical" />
|
||||
|
||||
<GridView
|
||||
<GridLayout
|
||||
android:id="@+id/widget_listview"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/central"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_centerInParent="true"
|
||||
android:adjustViewBounds="true"
|
||||
android:numColumns="5"
|
||||
tools:listitem="@layout/widget_item"/>
|
||||
android:layout_weight="1"
|
||||
android:columnCount="5"
|
||||
android:rowCount="1">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_columnWeight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/widget_item_day_0"
|
||||
style="@style/widget_light_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="Wed" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/widget_item_image_0"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="0dp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_weight="1"
|
||||
android:adjustViewBounds="true"
|
||||
tools:src="@drawable/ic_baseline_cloud_off_24" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/widget_item_temp_high_0"
|
||||
style="@style/widget_light_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="20" />
|
||||
|
||||
|
||||
</RelativeLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_columnWeight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/widget_item_day_1"
|
||||
style="@style/widget_light_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="Wed" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/widget_item_image_1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="0dp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_weight="1"
|
||||
android:adjustViewBounds="true"
|
||||
tools:src="@drawable/ic_baseline_cloud_off_24" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/widget_item_temp_high_1"
|
||||
style="@style/widget_light_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="20" />
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_columnWeight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/widget_item_day_2"
|
||||
style="@style/widget_light_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="Wed" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/widget_item_image_2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="0dp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_weight="1"
|
||||
android:adjustViewBounds="true"
|
||||
tools:src="@drawable/ic_baseline_cloud_off_24" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/widget_item_temp_high_2"
|
||||
style="@style/widget_light_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="20" />
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_columnWeight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/widget_item_day_3"
|
||||
style="@style/widget_light_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="Wed" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/widget_item_image_3"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="0dp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_weight="1"
|
||||
android:adjustViewBounds="true"
|
||||
tools:src="@drawable/ic_baseline_cloud_off_24" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/widget_item_temp_high_3"
|
||||
style="@style/widget_light_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="20" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_columnWeight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/widget_item_day_4"
|
||||
style="@style/widget_light_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="Wed" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/widget_item_image_4"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="0dp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_weight="1"
|
||||
android:adjustViewBounds="true"
|
||||
tools:src="@drawable/ic_baseline_cloud_off_24" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/widget_item_temp_high_4"
|
||||
style="@style/widget_light_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="20" />
|
||||
|
||||
</LinearLayout>
|
||||
</GridLayout>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -3,9 +3,8 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/widget_item_layout"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:minHeight="55dp">
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/widget_item_day"
|
||||
@@ -15,14 +14,19 @@
|
||||
android:gravity="center"
|
||||
android:includeFontPadding="false"
|
||||
android:textColor="#ffffff"
|
||||
android:textSize="12sp"
|
||||
android:autoSizeMaxTextSize="100sp"
|
||||
android:autoSizeMinTextSize="8sp"
|
||||
android:autoSizeStepGranularity="2sp"
|
||||
android:autoSizeTextType="uniform"
|
||||
tools:text="Wed" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/widget_item_image"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="0dp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_weight="1"
|
||||
android:layout_gravity="center"
|
||||
android:adjustViewBounds="true"
|
||||
tools:src="@drawable/ic_baseline_cloud_off_24" />
|
||||
|
||||
@@ -35,6 +39,10 @@
|
||||
android:gravity="center"
|
||||
android:textColor="#ffffff"
|
||||
android:textSize="12sp"
|
||||
android:autoSizeMaxTextSize="100sp"
|
||||
android:autoSizeMinTextSize="8sp"
|
||||
android:autoSizeStepGranularity="2sp"
|
||||
android:autoSizeTextType="uniform"
|
||||
tools:text="20" />
|
||||
|
||||
|
||||
|
||||
15
app/src/main/res/values-v26/styles.xml
Normal file
15
app/src/main/res/values-v26/styles.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<style name="widget_light_text">
|
||||
<item name="android:layout_gravity">center</item>
|
||||
<item name="android:autoSizeMaxTextSize">100sp</item>
|
||||
<item name="android:autoSizeMinTextSize">8sp</item>
|
||||
<item name="android:autoSizeStepGranularity">2sp</item>
|
||||
<item name="android:autoSizeTextType">uniform</item>
|
||||
<item name="android:gravity">center</item>
|
||||
<item name="android:includeFontPadding">false</item>
|
||||
<item name="android:textColor">#ffffff</item>
|
||||
<item name="android:textSize">12sp</item>
|
||||
</style>
|
||||
</resources>
|
||||
@@ -5,5 +5,6 @@
|
||||
Refer to App Widget Documentation for margin information
|
||||
http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout
|
||||
-->
|
||||
|
||||
<dimen name="activity_horizontal_margin">16dp</dimen>
|
||||
<dimen name="activity_vertical_margin">16dp</dimen>
|
||||
</resources>
|
||||
|
||||
@@ -8,4 +8,23 @@
|
||||
<item name="android:layout_marginBottom">12dp</item>
|
||||
<item name="android:layout_weight">2</item>
|
||||
</style>
|
||||
|
||||
<style name="widget_light_text" parent="widget_light_base">
|
||||
<item name="android:autoSizeMinTextSize">8sp</item>
|
||||
</style>
|
||||
|
||||
<style name="widget_light_home_text" parent="widget_light_base">
|
||||
<item name="android:autoSizeMinTextSize">12sp</item>
|
||||
</style>
|
||||
|
||||
<style name="widget_light_base">
|
||||
<item name="android:layout_gravity">center</item>
|
||||
<item name="android:autoSizeMaxTextSize">100sp</item>
|
||||
<item name="android:autoSizeStepGranularity">2sp</item>
|
||||
<item name="android:autoSizeTextType">uniform</item>
|
||||
<item name="android:gravity">center</item>
|
||||
<item name="android:includeFontPadding">false</item>
|
||||
<item name="android:textColor">#ffffff</item>
|
||||
<item name="android:textSize">12sp</item>
|
||||
</style>
|
||||
</resources>
|
||||
@@ -1,10 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:configure="com.appttude.h_mal.atlas_weather.monoWeather.ui.widget.WidgetLocationPermissionActivity"
|
||||
android:initialKeyguardLayout="@layout/weather_app_widget"
|
||||
android:initialLayout="@layout/weather_app_widget"
|
||||
android:minHeight="110.0dp"
|
||||
android:minWidth="350.0dp"
|
||||
android:minResizeWidth="350.0dp"
|
||||
android:minWidth="320.0dp"
|
||||
android:minResizeWidth="320.0dp"
|
||||
android:minResizeHeight="110.0dp"
|
||||
android:previewImage="@drawable/widget_screenshot"
|
||||
android:updatePeriodMillis="1800000"
|
||||
|
||||
Reference in New Issue
Block a user