Compare commits
No commits in common. "main" and "v.1.7" have entirely different histories.
38
.github/ISSUE_TEMPLATE/bug_report.md
vendored
|
@ -1,38 +0,0 @@
|
||||||
---
|
|
||||||
name: Bug report
|
|
||||||
about: Create a report to help us improve
|
|
||||||
title: ''
|
|
||||||
labels: ''
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Describe the bug**
|
|
||||||
A clear and concise description of what the bug is.
|
|
||||||
|
|
||||||
**To Reproduce**
|
|
||||||
Steps to reproduce the behavior:
|
|
||||||
1. Go to '...'
|
|
||||||
2. Click on '....'
|
|
||||||
3. Scroll down to '....'
|
|
||||||
4. See error
|
|
||||||
|
|
||||||
**Expected behavior**
|
|
||||||
A clear and concise description of what you expected to happen.
|
|
||||||
|
|
||||||
**Screenshots**
|
|
||||||
If applicable, add screenshots to help explain your problem.
|
|
||||||
|
|
||||||
**Desktop (please complete the following information):**
|
|
||||||
- OS: [e.g. iOS]
|
|
||||||
- Browser [e.g. chrome, safari]
|
|
||||||
- Version [e.g. 22]
|
|
||||||
|
|
||||||
**Smartphone (please complete the following information):**
|
|
||||||
- Device: [e.g. iPhone6]
|
|
||||||
- OS: [e.g. iOS8.1]
|
|
||||||
- Browser [e.g. stock browser, safari]
|
|
||||||
- Version [e.g. 22]
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context about the problem here.
|
|
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
|
@ -1,20 +0,0 @@
|
||||||
---
|
|
||||||
name: Feature request
|
|
||||||
about: Suggest an idea for this project
|
|
||||||
title: ''
|
|
||||||
labels: ''
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Is your feature request related to a problem? Please describe.**
|
|
||||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
|
||||||
|
|
||||||
**Describe the solution you'd like**
|
|
||||||
A clear and concise description of what you want to happen.
|
|
||||||
|
|
||||||
**Describe alternatives you've considered**
|
|
||||||
A clear and concise description of any alternative solutions or features you've considered.
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context or screenshots about the feature request here.
|
|
3
.gitignore
vendored
|
@ -15,7 +15,6 @@ migrate_working_dir/
|
||||||
*.ipr
|
*.ipr
|
||||||
*.iws
|
*.iws
|
||||||
.idea/
|
.idea/
|
||||||
.cxx/
|
|
||||||
|
|
||||||
# The .vscode folder contains launch configuration and tasks you configure in
|
# The .vscode folder contains launch configuration and tasks you configure in
|
||||||
# VS Code which you may wish to be included in version control, so this line
|
# VS Code which you may wish to be included in version control, so this line
|
||||||
|
@ -43,3 +42,5 @@ app.*.map.json
|
||||||
/android/app/debug
|
/android/app/debug
|
||||||
/android/app/profile
|
/android/app/profile
|
||||||
/android/app/release
|
/android/app/release
|
||||||
|
|
||||||
|
/lib/api_key.dart
|
34
.metadata
|
@ -1,11 +1,11 @@
|
||||||
# This file tracks properties of this Flutter project.
|
# This file tracks properties of this Flutter project.
|
||||||
# Used by Flutter tool to assess capabilities and perform upgrades etc.
|
# Used by Flutter tool to assess capabilities and perform upgrades etc.
|
||||||
#
|
#
|
||||||
# This file should be version controlled and should not be manually edited.
|
# This file should be version controlled.
|
||||||
|
|
||||||
version:
|
version:
|
||||||
revision: "2663184aa79047d0a33a14a3b607954f8fdd8730"
|
revision: 135454af32477f815a7525073027a3ff9eff1bfd
|
||||||
channel: "stable"
|
channel: stable
|
||||||
|
|
||||||
project_type: app
|
project_type: app
|
||||||
|
|
||||||
|
@ -13,26 +13,26 @@ project_type: app
|
||||||
migration:
|
migration:
|
||||||
platforms:
|
platforms:
|
||||||
- platform: root
|
- platform: root
|
||||||
create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
|
create_revision: 135454af32477f815a7525073027a3ff9eff1bfd
|
||||||
base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
|
base_revision: 135454af32477f815a7525073027a3ff9eff1bfd
|
||||||
- platform: android
|
- platform: android
|
||||||
create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
|
create_revision: 135454af32477f815a7525073027a3ff9eff1bfd
|
||||||
base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
|
base_revision: 135454af32477f815a7525073027a3ff9eff1bfd
|
||||||
- platform: ios
|
- platform: ios
|
||||||
create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
|
create_revision: 135454af32477f815a7525073027a3ff9eff1bfd
|
||||||
base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
|
base_revision: 135454af32477f815a7525073027a3ff9eff1bfd
|
||||||
- platform: linux
|
- platform: linux
|
||||||
create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
|
create_revision: 135454af32477f815a7525073027a3ff9eff1bfd
|
||||||
base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
|
base_revision: 135454af32477f815a7525073027a3ff9eff1bfd
|
||||||
- platform: macos
|
- platform: macos
|
||||||
create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
|
create_revision: 135454af32477f815a7525073027a3ff9eff1bfd
|
||||||
base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
|
base_revision: 135454af32477f815a7525073027a3ff9eff1bfd
|
||||||
- platform: web
|
- platform: web
|
||||||
create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
|
create_revision: 135454af32477f815a7525073027a3ff9eff1bfd
|
||||||
base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
|
base_revision: 135454af32477f815a7525073027a3ff9eff1bfd
|
||||||
- platform: windows
|
- platform: windows
|
||||||
create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
|
create_revision: 135454af32477f815a7525073027a3ff9eff1bfd
|
||||||
base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
|
base_revision: 135454af32477f815a7525073027a3ff9eff1bfd
|
||||||
|
|
||||||
# User provided section
|
# User provided section
|
||||||
|
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
# Code of Conduct
|
|
||||||
|
|
||||||
## Our Commitment
|
|
||||||
|
|
||||||
In the interest of fostering an open and friendly community, we, as contributors and maintainers, pledge to make participation in our project and our community a harassment-free experience for everyone.
|
|
||||||
|
|
||||||
## Standards of Behavior
|
|
||||||
|
|
||||||
1. **Respect**: Be respectful and considerate of different viewpoints and experiences.
|
|
||||||
|
|
||||||
2. **Collaboration**: Collaborate with community members, uphold principles of openness, and assist each other.
|
|
||||||
|
|
||||||
3. **Friendliness**: Remember that diversity of opinions and experiences is valuable for our community. Be friendly and supportive.
|
|
||||||
|
|
||||||
4. **Responsibility**: Be mindful of your words and actions. If you make a commitment, strive to fulfill it.
|
|
||||||
|
|
||||||
## Unacceptable Behavior
|
|
||||||
|
|
||||||
Unacceptable behavior includes but is not limited to:
|
|
||||||
|
|
||||||
1. **Discrimination**: No forms of discrimination or harassment based on race, gender, sexual orientation, nationality, religion, or other characteristics.
|
|
||||||
|
|
||||||
2. **Insults and Threats**: No offensive comments, threats, or bullying.
|
|
||||||
|
|
||||||
3. **Hostile Conduct**: No actions intended to create a hostile atmosphere in the community.
|
|
||||||
|
|
||||||
## Reporting Procedure
|
|
||||||
|
|
||||||
If you believe you're experiencing a violation of the code of conduct, please report it by sending an email to darkmoonight2022@gmail.com.
|
|
||||||
|
|
||||||
## Conclusion
|
|
||||||
|
|
||||||
We encourage all participants to adhere to this code of conduct. Violation of these principles may result in temporary or permanent exclusion from the community.
|
|
||||||
|
|
||||||
Thank you for your contribution and cooperation in creating an open and friendly community!
|
|
||||||
|
|
||||||
## Changes
|
|
||||||
|
|
||||||
This code of conduct may be revised from time to time. The most current version will always be available in this file.
|
|
||||||
|
|
||||||
## Attribution
|
|
||||||
|
|
||||||
This code of conduct is adapted from [Contributor Covenant](https://www.contributor-covenant.org/).
|
|
|
@ -1,37 +0,0 @@
|
||||||
# Contribution Guidelines
|
|
||||||
|
|
||||||
Thank you for considering contributing to our project! We welcome your input and appreciate your efforts. To ensure a smooth collaboration, please take a moment to review the following guidelines.
|
|
||||||
|
|
||||||
## Code of Conduct
|
|
||||||
|
|
||||||
This project and everyone participating in it are governed by our [Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to [project email].
|
|
||||||
|
|
||||||
## How to Contribute
|
|
||||||
|
|
||||||
1. Fork the repository and clone it locally.
|
|
||||||
2. Create a new branch for your feature or bug fix.
|
|
||||||
3. Make your changes and commit them.
|
|
||||||
4. Push your changes to your fork on GitHub.
|
|
||||||
5. Open a pull request in the original repository. Provide a clear title and description of your changes.
|
|
||||||
|
|
||||||
## Coding Standards
|
|
||||||
|
|
||||||
Follow the coding standards and style guide used in the project. If there's no specific guide, stick to the existing code style.
|
|
||||||
|
|
||||||
## Testing
|
|
||||||
|
|
||||||
Ensure that your code changes do not break existing functionality. Write tests for new features or bug fixes if applicable.
|
|
||||||
|
|
||||||
## Documentation
|
|
||||||
|
|
||||||
Update the documentation if your changes affect it. This includes the README.md file and any additional documentation files.
|
|
||||||
|
|
||||||
## Issues
|
|
||||||
|
|
||||||
Before starting work on a new feature or bug fix, check the issue tracker for related discussions or known issues.
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
By contributing, you agree that your contributions will be licensed under the project's license.
|
|
||||||
|
|
||||||
Thank you for your contribution!
|
|
86
README.md
|
@ -1,66 +1,52 @@
|
||||||
<div align='center'>
|
<div align="center">
|
||||||
<img src='/readme/icon.png' width='150'/>
|
<img src="/assets/icons/icon.png" width="150"/>
|
||||||
<h2>🌦️ Rain</h2>
|
<h2>Rain</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p align='center'>
|
### Short Description:
|
||||||
<p align='center'>
|
|
||||||
<a href='https://github.com/darkmoonight/Rain/stargazers'><img alt='Stars' src='https://img.shields.io/github/stars/darkmoonight/Rain?color=abc0d3'/></a>
|
|
||||||
<a href='https://github.com/darkmoonight/Rain/forks'><img alt='Forks' src='https://img.shields.io/github/forks/darkmoonight/Rain?color=abc0d3'/></a>
|
|
||||||
<a href='https://github.com/darkmoonight/Rain/releases'><img alt='GitHub release' src='https://img.shields.io/github/v/release/darkmoonight/Rain?color=abc0d3'/></a>
|
|
||||||
<a href='https://github.com/darkmoonight/Rain/blob/main/LICENSE'><img alt='License' src='https://img.shields.io/github/license/darkmoonight/Rain?color=abc0d3'/></a>
|
|
||||||
</p>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p align='center'> Tired of unpredictable weather? Rain's got you covered! Get ready for any forecast. 🌦️ </p>
|
<!-- Приложение для просмотра погоды в вашем городе -->
|
||||||
|
|
||||||
### 🌍 Be aware of the weather
|
An application for viewing the weather in your city
|
||||||
|
|
||||||
With Rain, you can explore the weather in your city and beyond. We offer an array of features to keep you informed and prepared:
|
### Description:
|
||||||
|
|
||||||
- 🌟 **View Current Weather:** Stay up-to-date with real-time weather conditions in your area.
|
<!-- Данное приложение позволяет смотреть погоду в вашем городе.
|
||||||
- 🌅 **View Weather by Hour:** Plan your day effectively with hourly forecasts.
|
Предоставлены следующие возможности:
|
||||||
- 📆 **View the Weather for the Week:** Get a week-long weather outlook at your fingertips.
|
- Просмотр погоды на данный момент
|
||||||
- 🌡️ **View Detailed Weather Data:** Dive deep into weather statistics for a comprehensive understanding.
|
- Просмотр погоды по часам
|
||||||
- 🌐 **Localization:** Choose your preferred language from a wide range of options.
|
- Просмотр погоды на неделю
|
||||||
- 🏙️ **Data Caching:** Access weather information even when you're offline.
|
- Просмотр подробных данных о погоде
|
||||||
- 🌆 **Choose Your City:** Set your location or add other cities to your list.
|
- Локализация (ru/en)
|
||||||
- 🧮 **Metric or Imperial:** Customize your measurement system for temperature and more.
|
- Кэширование данных
|
||||||
- 🌡️ **Celsius or Fahrenheit:** Pick your preferred temperature unit.
|
- Выбор города самостоятельно
|
||||||
- 🕰️ **12-Hour or 24-Hour Time Formats:** Adjust the time display to your liking.
|
- Добавление карточек других городов
|
||||||
- 🔔 **Notifications:** Receive weather alerts and stay informed.
|
Также мы постарались сделать дизайн максимально удобным и красивым. -->
|
||||||
- 🧩 **Widget:** Add a weather widget to your home screen for quick updates.
|
|
||||||
- 🎨 **Beautiful Design**
|
|
||||||
|
|
||||||
Our application not only offers functionality but also boasts an aesthetically pleasing design. We have meticulously crafted Rain with your user experience as our top priority, guaranteeing both convenience and elegance in a single package.
|
This application allows you to view the weather in your city.
|
||||||
|
The following options are provided:
|
||||||
|
|
||||||
### 🌐 Reliable Data Sources
|
- View current weather
|
||||||
|
- View weather by hour
|
||||||
|
- View the weather for the week
|
||||||
|
- View detailed weather data
|
||||||
|
- Localization (ru/en)
|
||||||
|
- Data caching
|
||||||
|
- Choose the city yourself
|
||||||
|
- Adding cards of other cities
|
||||||
|
|
||||||
We fetch weather data from [Open-Meteo](https://open-meteo.com/en/docs) and use [Open-Meteo's Geocoding API](https://open-meteo.com/en/docs/geocoding-api) to help you find cities easily.
|
We also tried to make the design as convenient and beautiful as possible.
|
||||||
|
|
||||||
### 📸 Screenshots
|
### Services used:
|
||||||
|
|
||||||
<img src='/readme/1.png' width='200'/> <img src='/readme/2.png' width='200'/> <img src='/readme/3.png' width='200'/> <img src='/readme/4.png' width='200'/> <img src='/readme/5.png' width='200'/> <img src='/readme/6.png' width='200'/> <img src='/readme/7.png' width='200'/> <img src='/readme/8.png' width='200'/>
|
- The app receives weather data from [Open-Meteo](https://open-meteo.com/)
|
||||||
|
- Cities are searched using [Geoapify](https://www.geoapify.com/)
|
||||||
|
|
||||||
### 💰 Support Us
|
### Screenshots:
|
||||||
|
|
||||||
If you find Rain valuable and worthy for future innovation, consider supporting us through donations:
|
<img src="/readme/1.jpg" width="200"/> <img src="/readme/2.jpg" width="200"/> <img src="/readme/3.jpg" width="200"/>
|
||||||
|
|
||||||
[](https://www.donationalerts.com/r/darkmoonight)
|
### Download:
|
||||||
[](https://yoomoney.ru/to/4100117672775961)
|
|
||||||
|
|
||||||
### 📥 Get Rain Now
|
|
||||||
|
|
||||||
[](https://play.google.com/store/apps/details?id=com.yoshi.rain)
|
[](https://play.google.com/store/apps/details?id=com.yoshi.rain)
|
||||||
|
[](https://apps.rustore.ru/app/com.yoshi.rain)
|
||||||
Or get the latest APK from the [Releases Section](https://github.com/DarkMooNight/Rain/releases/latest). You can also find the app on IzzyOnDroid via a F-Droid client [here](https://apt.izzysoft.de/fdroid/index/apk/com.yoshi.rain).
|
|
||||||
|
|
||||||
### 📃 License
|
|
||||||
|
|
||||||
This project is licensed under the [MIT License](./LICENSE).
|
|
||||||
|
|
||||||
### 👨💻 Our Contributors
|
|
||||||
|
|
||||||
<a href='https://github.com/darkmoonight/Rain/graphs/contributors'>
|
|
||||||
<img src='https://contrib.rocks/image?repo=darkmoonight/Rain'/>
|
|
||||||
</a>
|
|
||||||
|
|
|
@ -1,9 +1,30 @@
|
||||||
plugins {
|
def localProperties = new Properties()
|
||||||
id "com.android.application"
|
def localPropertiesFile = rootProject.file('local.properties')
|
||||||
id "kotlin-android"
|
if (localPropertiesFile.exists()) {
|
||||||
id "dev.flutter.flutter-gradle-plugin"
|
localPropertiesFile.withReader('UTF-8') { reader ->
|
||||||
|
localProperties.load(reader)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def flutterRoot = localProperties.getProperty('flutter.sdk')
|
||||||
|
if (flutterRoot == null) {
|
||||||
|
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
|
||||||
|
}
|
||||||
|
|
||||||
|
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
|
||||||
|
if (flutterVersionCode == null) {
|
||||||
|
flutterVersionCode = '1'
|
||||||
|
}
|
||||||
|
|
||||||
|
def flutterVersionName = localProperties.getProperty('flutter.versionName')
|
||||||
|
if (flutterVersionName == null) {
|
||||||
|
flutterVersionName = '1.0'
|
||||||
|
}
|
||||||
|
|
||||||
|
apply plugin: 'com.android.application'
|
||||||
|
apply plugin: 'kotlin-android'
|
||||||
|
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
|
||||||
|
|
||||||
def keystoreProperties = new Properties()
|
def keystoreProperties = new Properties()
|
||||||
def keystorePropertiesFile = rootProject.file('key.properties')
|
def keystorePropertiesFile = rootProject.file('key.properties')
|
||||||
if (keystorePropertiesFile.exists()) {
|
if (keystorePropertiesFile.exists()) {
|
||||||
|
@ -11,76 +32,49 @@ if (keystorePropertiesFile.exists()) {
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
namespace = 'com.yoshi.rain'
|
compileSdkVersion flutter.compileSdkVersion
|
||||||
compileSdk = 35
|
ndkVersion flutter.ndkVersion
|
||||||
ndkVersion = '29.0.13113456'
|
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility = JavaVersion.VERSION_17
|
sourceCompatibility JavaVersion.VERSION_1_8
|
||||||
targetCompatibility = JavaVersion.VERSION_17
|
targetCompatibility JavaVersion.VERSION_1_8
|
||||||
coreLibraryDesugaringEnabled = true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
jvmTarget = JavaVersion.VERSION_17
|
jvmTarget = '1.8'
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
main.java.srcDirs += 'src/main/kotlin'
|
main.java.srcDirs += 'src/main/kotlin'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependenciesInfo {
|
|
||||||
// Disables dependency metadata when building APKs.
|
|
||||||
includeInApk = false
|
|
||||||
// Disables dependency metadata when building Android App Bundles.
|
|
||||||
includeInBundle = false
|
|
||||||
}
|
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId = 'com.yoshi.rain'
|
applicationId "com.yoshi.rain"
|
||||||
minSdk = 23
|
minSdkVersion 21
|
||||||
targetSdk = flutter.targetSdkVersion
|
targetSdkVersion flutter.targetSdkVersion
|
||||||
versionCode = flutter.versionCode
|
versionCode flutterVersionCode.toInteger()
|
||||||
versionName = flutter.versionName
|
versionName flutterVersionName
|
||||||
}
|
}
|
||||||
|
|
||||||
signingConfigs {
|
signingConfigs {
|
||||||
release {
|
release {
|
||||||
keyAlias = keystoreProperties['keyAlias']
|
keyAlias keystoreProperties['keyAlias']
|
||||||
keyPassword = keystoreProperties['keyPassword']
|
keyPassword keystoreProperties['keyPassword']
|
||||||
storeFile = keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
|
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
|
||||||
storePassword = keystoreProperties['storePassword']
|
storePassword keystoreProperties['storePassword']
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
buildTypes {
|
||||||
buildTypes {
|
release {
|
||||||
release {
|
signingConfig signingConfigs.release
|
||||||
signingConfig = signingConfigs.release
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
debug {
|
|
||||||
signingConfig = signingConfigs.debug
|
|
||||||
minifyEnabled = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
buildFeatures {
|
|
||||||
viewBinding = true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
flutter {
|
flutter {
|
||||||
source = "../.."
|
source '../..'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation("androidx.core:core-remoteviews:1.1.0")
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||||
implementation("com.google.android.material:material:1.12.0")
|
|
||||||
implementation('androidx.work:work-runtime-ktx:2.10.0')
|
|
||||||
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove this for FLOSS version
|
|
||||||
// configurations.all {
|
|
||||||
// exclude group: 'com.google.android.gms'
|
|
||||||
// }
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
package="com.example.rain">
|
||||||
<!-- The INTERNET permission is required for development. Specifically,
|
<!-- The INTERNET permission is required for development. Specifically,
|
||||||
the Flutter tool needs it to communicate with the running application
|
the Flutter tool needs it to communicate with the running application
|
||||||
to allow setting breakpoints, to provide hot reload, etc.
|
to allow setting breakpoints, to provide hot reload, etc.
|
||||||
|
|
|
@ -1,16 +1,14 @@
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
package="com.example.rain">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
||||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
|
||||||
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
|
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:label="Rain"
|
android:label="Rain"
|
||||||
android:name="${applicationName}"
|
android:name="${applicationName}"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher">
|
||||||
android:extractNativeLibs="true">
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
|
@ -18,54 +16,19 @@
|
||||||
android:theme="@style/LaunchTheme"
|
android:theme="@style/LaunchTheme"
|
||||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||||
android:hardwareAccelerated="true"
|
android:hardwareAccelerated="true"
|
||||||
android:enableOnBackInvokedCallback="true"
|
android:screenOrientation="portrait"
|
||||||
android:windowSoftInputMode="adjustResize">
|
android:windowSoftInputMode="adjustResize">
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="io.flutter.embedding.android.NormalTheme"
|
android:name="io.flutter.embedding.android.NormalTheme"
|
||||||
android:resource="@style/NormalTheme" />
|
android:resource="@style/NormalTheme"
|
||||||
|
/>
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER"/>
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="es.antonborri.home_widget.action.LAUNCH" />
|
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<receiver
|
|
||||||
android:name=".OreoWidget"
|
|
||||||
android:exported="true">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
|
||||||
</intent-filter>
|
|
||||||
<meta-data
|
|
||||||
android:name="android.appwidget.provider"
|
|
||||||
android:resource="@xml/oreo_widget_info" />
|
|
||||||
</receiver>
|
|
||||||
|
|
||||||
<receiver android:name="es.antonborri.home_widget.HomeWidgetBackgroundReceiver"
|
|
||||||
android:exported="true">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="es.antonborri.home_widget.action.BACKGROUND" />
|
|
||||||
</intent-filter>
|
|
||||||
</receiver>
|
|
||||||
<service android:name="es.antonborri.home_widget.HomeWidgetBackgroundService"
|
|
||||||
android:permission="android.permission.BIND_JOB_SERVICE"
|
|
||||||
android:exported="true" />
|
|
||||||
|
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="flutterEmbedding"
|
android:name="flutterEmbedding"
|
||||||
android:value="2" />
|
android:value="2" />
|
||||||
<receiver android:exported="false"
|
|
||||||
android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" />
|
|
||||||
<receiver android:exported="false"
|
|
||||||
android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
|
||||||
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
|
|
||||||
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
|
|
||||||
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
|
|
||||||
</intent-filter>
|
|
||||||
</receiver>
|
|
||||||
</application>
|
</application>
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|
|
@ -1,65 +0,0 @@
|
||||||
package com.yoshi.rain
|
|
||||||
|
|
||||||
import android.appwidget.AppWidgetManager
|
|
||||||
import android.content.Context
|
|
||||||
import android.content.SharedPreferences
|
|
||||||
import android.graphics.BitmapFactory
|
|
||||||
import android.graphics.Color
|
|
||||||
import android.widget.RemoteViews
|
|
||||||
import androidx.core.util.SizeFCompat
|
|
||||||
import androidx.core.widget.updateAppWidget
|
|
||||||
import es.antonborri.home_widget.HomeWidgetLaunchIntent
|
|
||||||
import es.antonborri.home_widget.HomeWidgetProvider
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implementation of App Widget functionality.
|
|
||||||
*/
|
|
||||||
class OreoWidget : HomeWidgetProvider() {
|
|
||||||
override fun onUpdate(
|
|
||||||
context: Context,
|
|
||||||
appWidgetManager: AppWidgetManager,
|
|
||||||
appWidgetIds: IntArray,
|
|
||||||
widgetData: SharedPreferences
|
|
||||||
) {
|
|
||||||
for (appWidgetId in appWidgetIds) {
|
|
||||||
val supportedSizes = listOf(
|
|
||||||
SizeFCompat(50.0f, 0.0f),
|
|
||||||
SizeFCompat(100.0f, 0.0f),
|
|
||||||
SizeFCompat(250.0f, 0.0f),
|
|
||||||
SizeFCompat(300.0f, 0.0f),
|
|
||||||
)
|
|
||||||
appWidgetManager.updateAppWidget(appWidgetId, supportedSizes) {
|
|
||||||
val layoutId = when (it) {
|
|
||||||
supportedSizes[0] -> R.layout.oreo_widget_mini
|
|
||||||
supportedSizes[1] -> R.layout.oreo_widget_small
|
|
||||||
supportedSizes[2] -> R.layout.oreo_widget_medium
|
|
||||||
else -> R.layout.oreo_widget_big
|
|
||||||
}
|
|
||||||
RemoteViews(context.packageName, layoutId).apply {
|
|
||||||
val pendingIntent = HomeWidgetLaunchIntent.getActivity(
|
|
||||||
context,
|
|
||||||
MainActivity::class.java
|
|
||||||
)
|
|
||||||
setOnClickPendingIntent(R.id.widget_day_oreo, pendingIntent)
|
|
||||||
|
|
||||||
val image = widgetData.getString("weather_icon", null)
|
|
||||||
setImageViewBitmap(R.id.widget_day_icon, BitmapFactory.decodeFile(image))
|
|
||||||
|
|
||||||
val degree = widgetData.getString("weather_degree", null)
|
|
||||||
setTextViewText(R.id.widget_day_title, degree)
|
|
||||||
|
|
||||||
val backgroundColor = widgetData.getString("background_color", null)
|
|
||||||
if (backgroundColor != null) {
|
|
||||||
setInt(R.id.widget_day_oreo, "setBackgroundColor", Color.parseColor(backgroundColor))
|
|
||||||
}
|
|
||||||
|
|
||||||
val textColor = widgetData.getString("text_color", null)
|
|
||||||
if (textColor != null) {
|
|
||||||
setTextColor(R.id.widget_day_title,Color.parseColor(textColor))
|
|
||||||
setTextColor(R.id.widget_day_time,Color.parseColor(textColor))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.yoshi.rain
|
package com.example.rain
|
||||||
|
|
||||||
import io.flutter.embedding.android.FlutterActivity
|
import io.flutter.embedding.android.FlutterActivity
|
||||||
|
|
After Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 15 KiB |
|
@ -1,10 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?><!--
|
|
||||||
Background for widgets to make the rounded corners based on the
|
|
||||||
appWidgetRadius attribute value
|
|
||||||
-->
|
|
||||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:shape="rectangle">
|
|
||||||
|
|
||||||
<corners android:radius="?attr/appWidgetRadius" />
|
|
||||||
<solid android:color="?android:attr/colorBackground" />
|
|
||||||
</shape>
|
|
|
@ -1,10 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?><!--
|
|
||||||
Background for views inside widgets to make the rounded corners based on the
|
|
||||||
appWidgetInnerRadius attribute value
|
|
||||||
-->
|
|
||||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:shape="rectangle">
|
|
||||||
|
|
||||||
<corners android:radius="?attr/appWidgetInnerRadius" />
|
|
||||||
<solid android:color="?android:attr/colorAccent" />
|
|
||||||
</shape>
|
|
Before Width: | Height: | Size: 69 B After Width: | Height: | Size: 70 B |
After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 7 KiB After Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 69 B After Width: | Height: | Size: 70 B |
Before Width: | Height: | Size: 21 KiB |
|
@ -1,55 +0,0 @@
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
style="@style/Widget.Android.AppWidget.Container"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:background="?attr/colorSecondaryContainer"
|
|
||||||
android:theme="@style/Theme.Android.AppWidgetContainer"
|
|
||||||
android:id="@+id/widget_day_oreo">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/widget_day_weather"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_centerInParent="true"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:gravity="center_vertical">
|
|
||||||
|
|
||||||
<TextClock
|
|
||||||
android:id="@+id/widget_day_time"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_centerHorizontal="true"
|
|
||||||
android:fontFamily="@font/ubuntu"
|
|
||||||
android:format12Hour="@string/date_format_widget_oreo_big_style"
|
|
||||||
android:format24Hour="@string/date_format_widget_oreo_big_style"
|
|
||||||
android:shadowDx="1"
|
|
||||||
android:shadowDy="1"
|
|
||||||
android:shadowRadius="1"
|
|
||||||
android:textSize="@dimen/widget_large_title_text_size"
|
|
||||||
tools:ignore="ObsoleteLayoutParam"
|
|
||||||
tools:text="Saturday, September 30 " />
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/widget_day_icon"
|
|
||||||
android:layout_width="@dimen/widget_mini_weather_icon_size"
|
|
||||||
android:layout_height="@dimen/widget_mini_weather_icon_size"
|
|
||||||
android:src="@drawable/cloud"
|
|
||||||
tools:ignore="ContentDescription,ImageContrastCheck" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/widget_day_title"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="@dimen/little_margin"
|
|
||||||
android:fontFamily="@font/ubuntu"
|
|
||||||
android:shadowDx="1"
|
|
||||||
android:shadowDy="1"
|
|
||||||
android:shadowRadius="1"
|
|
||||||
android:textAppearance="@android:style/TextAppearance.Material.Large"
|
|
||||||
android:textSize="@dimen/widget_large_title_text_size"
|
|
||||||
tools:text="28°" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</RelativeLayout>
|
|
|
@ -1,55 +0,0 @@
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
style="@style/Widget.Android.AppWidget.Container"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:background="?attr/colorSecondaryContainer"
|
|
||||||
android:theme="@style/Theme.Android.AppWidgetContainer"
|
|
||||||
android:id="@+id/widget_day_oreo">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/widget_day_weather"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_centerInParent="true"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:gravity="center_vertical">
|
|
||||||
|
|
||||||
<TextClock
|
|
||||||
android:id="@+id/widget_day_time"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_centerHorizontal="true"
|
|
||||||
android:fontFamily="@font/ubuntu"
|
|
||||||
android:format12Hour="@string/date_format_widget_oreo_style"
|
|
||||||
android:format24Hour="@string/date_format_widget_oreo_style"
|
|
||||||
android:shadowDx="1"
|
|
||||||
android:shadowDy="1"
|
|
||||||
android:shadowRadius="1"
|
|
||||||
android:textSize="@dimen/widget_large_title_text_size"
|
|
||||||
tools:ignore="ObsoleteLayoutParam"
|
|
||||||
tools:text="Saturday, September 30 " />
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/widget_day_icon"
|
|
||||||
android:layout_width="@dimen/widget_mini_weather_icon_size"
|
|
||||||
android:layout_height="@dimen/widget_mini_weather_icon_size"
|
|
||||||
android:src="@drawable/cloud"
|
|
||||||
tools:ignore="ContentDescription,ImageContrastCheck" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/widget_day_title"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="@dimen/little_margin"
|
|
||||||
android:fontFamily="@font/ubuntu"
|
|
||||||
android:shadowDx="1"
|
|
||||||
android:shadowDy="1"
|
|
||||||
android:shadowRadius="1"
|
|
||||||
android:textAppearance="@android:style/TextAppearance.Material.Large"
|
|
||||||
android:textSize="@dimen/widget_large_title_text_size"
|
|
||||||
tools:text="28°" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</RelativeLayout>
|
|
|
@ -1,41 +0,0 @@
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
style="@style/Widget.Android.AppWidget.Container"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:background="?attr/colorSecondaryContainer"
|
|
||||||
android:theme="@style/Theme.Android.AppWidgetContainer"
|
|
||||||
android:id="@+id/widget_day_oreo">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/widget_day_weather"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_centerInParent="true"
|
|
||||||
android:gravity="center_horizontal"
|
|
||||||
android:orientation="vertical"
|
|
||||||
tools:ignore="UseCompoundDrawables">
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/widget_day_icon"
|
|
||||||
android:layout_width="@dimen/widget_little_weather_icon_size"
|
|
||||||
android:layout_height="@dimen/widget_little_weather_icon_size"
|
|
||||||
android:src="@drawable/cloud"
|
|
||||||
tools:ignore="ContentDescription,ImageContrastCheck" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/widget_day_title"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:fontFamily="@font/ubuntu"
|
|
||||||
android:shadowDx="1"
|
|
||||||
android:shadowDy="1"
|
|
||||||
android:shadowRadius="1"
|
|
||||||
android:textAppearance="@android:style/TextAppearance.Material.Large"
|
|
||||||
android:textSize="@dimen/widget_title_text_size"
|
|
||||||
tools:ignore="ObsoleteLayoutParam"
|
|
||||||
tools:text="21°" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</RelativeLayout>
|
|
|
@ -1,42 +0,0 @@
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
style="@style/Widget.Android.AppWidget.Container"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:background="?attr/colorSecondaryContainer"
|
|
||||||
android:theme="@style/Theme.Android.AppWidgetContainer"
|
|
||||||
android:id="@+id/widget_day_oreo">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/widget_day_weather"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_centerInParent="true"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
tools:ignore="UseCompoundDrawables">
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/widget_day_icon"
|
|
||||||
android:layout_width="@dimen/widget_little_weather_icon_size"
|
|
||||||
android:layout_height="@dimen/widget_little_weather_icon_size"
|
|
||||||
android:src="@drawable/cloud"
|
|
||||||
tools:ignore="ContentDescription,ImageContrastCheck" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/widget_day_title"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="@dimen/little_margin"
|
|
||||||
android:fontFamily="@font/ubuntu"
|
|
||||||
android:maxLines="1"
|
|
||||||
android:shadowDx="1"
|
|
||||||
android:shadowDy="1"
|
|
||||||
android:shadowRadius="1"
|
|
||||||
android:textAppearance="@android:style/TextAppearance.Material.Large"
|
|
||||||
android:textSize="@dimen/widget_design_title_text_size"
|
|
||||||
tools:text="28°" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</RelativeLayout>
|
|
|
@ -1,6 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<background android:drawable="@mipmap/ic_launcher_background"/>
|
<background android:drawable="@color/ic_launcher_background"/>
|
||||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||||
<monochrome android:drawable="@mipmap/ic_launcher_monochrome"/>
|
</adaptive-icon>
|
||||||
</adaptive-icon>
|
|
||||||
|
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 854 B |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 461 B |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 8 KiB |
Before Width: | Height: | Size: 7.8 KiB |
|
@ -1,20 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
|
|
||||||
<style name="LaunchTheme" parent="@style/Theme.Material3.DynamicColors.Dark.NoActionBar">
|
|
||||||
<item name="android:forceDarkAllowed">false</item>
|
|
||||||
<item name="android:windowFullscreen">false</item>
|
|
||||||
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
|
|
||||||
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
|
||||||
<item name="android:windowSplashScreenBackground">#181818</item>
|
|
||||||
</style>
|
|
||||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
|
||||||
This theme determines the color of the Android Window while your
|
|
||||||
Flutter UI initializes, as well as behind your Flutter UI while its
|
|
||||||
running.
|
|
||||||
|
|
||||||
This Theme is only used starting with V2 of Flutter's Android embedding. -->
|
|
||||||
<style name="NormalTheme" parent="@style/Theme.Material3.DynamicColors.Dark.NoActionBar">
|
|
||||||
<item name="android:windowBackground">?android:colorBackground</item>
|
|
||||||
</style>
|
|
||||||
</resources>
|
|
|
@ -1,10 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<!--
|
|
||||||
Having themes.xml for night-v31 because of the priority order of the resource qualifiers.
|
|
||||||
-->
|
|
||||||
<style name="Theme.Android.AppWidgetContainerParent" parent="@style/Theme.Material3.DynamicColors.DayNight">
|
|
||||||
<item name="appWidgetRadius">@android:dimen/system_app_widget_background_radius</item>
|
|
||||||
<item name="appWidgetInnerRadius">@android:dimen/system_app_widget_inner_radius</item>
|
|
||||||
</style>
|
|
||||||
</resources>
|
|
|
@ -1,14 +1,10 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
<resources>
|
||||||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
|
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
|
||||||
<style name="LaunchTheme" parent="@style/Theme.Material3.DynamicColors.Dark.NoActionBar">
|
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||||
<!-- Show a splash screen on the activity. Automatically removed when
|
<!-- Show a splash screen on the activity. Automatically removed when
|
||||||
the Flutter engine draws its first frame -->
|
the Flutter engine draws its first frame -->
|
||||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
<item name="android:windowBackground">@drawable/launch_background</item>
|
||||||
<item name="android:forceDarkAllowed" tools:targetApi="q">false</item>
|
|
||||||
<item name="android:windowFullscreen">false</item>
|
|
||||||
<item name="android:windowDrawsSystemBarBackgrounds" >false</item>
|
|
||||||
<item name="android:windowLayoutInDisplayCutoutMode" tools:targetApi="o_mr1">shortEdges</item>
|
|
||||||
</style>
|
</style>
|
||||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||||
This theme determines the color of the Android Window while your
|
This theme determines the color of the Android Window while your
|
||||||
|
@ -16,7 +12,7 @@
|
||||||
running.
|
running.
|
||||||
|
|
||||||
This Theme is only used starting with V2 of Flutter's Android embedding. -->
|
This Theme is only used starting with V2 of Flutter's Android embedding. -->
|
||||||
<style name="NormalTheme" parent="@style/Theme.Material3.DynamicColors.Dark.NoActionBar">
|
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||||
<item name="android:windowBackground">?android:colorBackground</item>
|
<item name="android:windowBackground">?android:colorBackground</item>
|
||||||
</style>
|
</style>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
<resources>
|
|
||||||
<style name="Widget.Android.AppWidget.Container" parent="android:Widget">
|
|
||||||
<item name="android:id">@android:id/background</item>
|
|
||||||
<item name="android:padding">?attr/appWidgetPadding</item>
|
|
||||||
<item name="android:background">@drawable/app_widget_background</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="Widget.Android.AppWidget.InnerView" parent="android:Widget">
|
|
||||||
<item name="android:padding">?attr/appWidgetPadding</item>
|
|
||||||
<item name="android:background">@drawable/app_widget_inner_view_background</item>
|
|
||||||
<item name="android:textColor">?android:attr/textColorPrimary</item>
|
|
||||||
</style>
|
|
||||||
</resources>
|
|
|
@ -1,32 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
|
|
||||||
<style name="LaunchTheme" parent="@style/Theme.Material3.DynamicColors.DayNight.NoActionBar">
|
|
||||||
<item name="android:forceDarkAllowed">false</item>
|
|
||||||
<item name="android:windowFullscreen">false</item>
|
|
||||||
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
|
|
||||||
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
|
||||||
<item name="android:windowSplashScreenBackground">#181818</item>
|
|
||||||
</style>
|
|
||||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
|
||||||
This theme determines the color of the Android Window while your
|
|
||||||
Flutter UI initializes, as well as behind your Flutter UI while its
|
|
||||||
running.
|
|
||||||
|
|
||||||
This Theme is only used starting with V2 of Flutter's Android embedding. -->
|
|
||||||
<style name="NormalTheme" parent="@style/Theme.Material3.DynamicColors.DayNight.NoActionBar">
|
|
||||||
<item name="android:windowBackground">?android:colorBackground</item>
|
|
||||||
</style>
|
|
||||||
<style name="Widget.Android.AppWidget.Container" parent="android:Widget">
|
|
||||||
<item name="android:id">@android:id/background</item>
|
|
||||||
<item name="android:padding">?attr/appWidgetPadding</item>
|
|
||||||
<item name="android:background">@drawable/app_widget_background</item>
|
|
||||||
<item name="android:clipToOutline">true</item>
|
|
||||||
</style>
|
|
||||||
<style name="Widget.Android.AppWidget.InnerView" parent="android:Widget">
|
|
||||||
<item name="android:padding">?attr/appWidgetPadding</item>
|
|
||||||
<item name="android:background">@drawable/app_widget_inner_view_background</item>
|
|
||||||
<item name="android:textColor">?android:attr/textColorPrimary</item>
|
|
||||||
<item name="android:clipToOutline">true</item>
|
|
||||||
</style>
|
|
||||||
</resources>
|
|
|
@ -1,12 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<!--
|
|
||||||
Having themes.xml for v31 variant because @android:dimen/system_app_widget_background_radius
|
|
||||||
and @android:dimen/system_app_widget_internal_padding requires API level 31
|
|
||||||
-->
|
|
||||||
<style name="Theme.Android.AppWidgetContainerParent"
|
|
||||||
parent="@style/Theme.Material3.DynamicColors.DayNight">
|
|
||||||
<item name="appWidgetRadius">@android:dimen/system_app_widget_background_radius</item>
|
|
||||||
<item name="appWidgetInnerRadius">@android:dimen/system_app_widget_inner_radius</item>
|
|
||||||
</style>
|
|
||||||
</resources>
|
|
|
@ -1,7 +0,0 @@
|
||||||
<resources>
|
|
||||||
<declare-styleable name="AppWidgetAttrs">
|
|
||||||
<attr name="appWidgetPadding" format="dimension" />
|
|
||||||
<attr name="appWidgetInnerRadius" format="dimension" />
|
|
||||||
<attr name="appWidgetRadius" format="dimension" />
|
|
||||||
</declare-styleable>
|
|
||||||
</resources>
|
|
|
@ -1,63 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
|
|
||||||
<!-- margin. -->
|
|
||||||
<dimen name="large_margin">20dp</dimen>
|
|
||||||
<dimen name="normal_margin">16dp</dimen>
|
|
||||||
<dimen name="little_margin">8dp</dimen>
|
|
||||||
|
|
||||||
<!-- elevator. -->
|
|
||||||
<dimen name="touch_rise_z">10dp</dimen>
|
|
||||||
|
|
||||||
<!-- image. -->
|
|
||||||
<dimen name="current_weather_icon_container_size">128dp</dimen>
|
|
||||||
<dimen name="current_weather_icon_size">80dp</dimen>
|
|
||||||
<dimen name="standard_weather_icon_container_size">88dp</dimen>
|
|
||||||
<dimen name="little_weather_icon_container_size">74dp</dimen>
|
|
||||||
<dimen name="standard_weather_icon_size">56dp</dimen>
|
|
||||||
<dimen name="little_weather_icon_size">42dp</dimen>
|
|
||||||
<dimen name="material_icon_size">24dp</dimen>
|
|
||||||
|
|
||||||
<!-- view. -->
|
|
||||||
<dimen name="material3_card_list_item_corner_radius">16dp</dimen>
|
|
||||||
<dimen name="material3_card_list_item_inner_radius">12dp</dimen>
|
|
||||||
<dimen name="material3_widget_corner_radius">16dp</dimen>
|
|
||||||
<dimen name="material3_widget_inner_radius">12dp</dimen>
|
|
||||||
<dimen name="spinner_drop_width">150dp</dimen>
|
|
||||||
<dimen name="share_view_height">260dp</dimen>
|
|
||||||
<dimen name="progress_view_size">36dp</dimen>
|
|
||||||
<dimen name="trend_item_width">56dp</dimen>
|
|
||||||
<dimen name="daily_trend_item_height">298dp</dimen>
|
|
||||||
<dimen name="hourly_trend_item_height">256dp</dimen>
|
|
||||||
<dimen name="action_bar_height">64dp</dimen>
|
|
||||||
|
|
||||||
<!-- text. -->
|
|
||||||
<dimen name="main_title_text_size">96sp</dimen>
|
|
||||||
<dimen name="design_title_text_size">48sp</dimen>
|
|
||||||
<dimen name="large_title_text_size">22sp</dimen>
|
|
||||||
<dimen name="title_text_size">18sp</dimen>
|
|
||||||
<dimen name="content_text_size">14sp</dimen>
|
|
||||||
<dimen name="subtitle_text_size">12sp</dimen>
|
|
||||||
|
|
||||||
<!-- widget. -->
|
|
||||||
<dimen name="widget_grid_1">40dp</dimen>
|
|
||||||
<dimen name="widget_grid_2">110dp</dimen>
|
|
||||||
<dimen name="widget_grid_3">180dp</dimen>
|
|
||||||
<dimen name="widget_grid_4">250dp</dimen>
|
|
||||||
|
|
||||||
<dimen name="widget_current_weather_icon_size">@dimen/standard_weather_icon_size</dimen> <!--
|
|
||||||
56dp. -->
|
|
||||||
<dimen name="widget_standard_weather_icon_size">48dp</dimen>
|
|
||||||
<dimen name="widget_little_weather_icon_size">36dp</dimen>
|
|
||||||
<dimen name="widget_mini_weather_icon_size">28dp</dimen>
|
|
||||||
<dimen name="widget_design_title_text_size">24sp</dimen>
|
|
||||||
<dimen name="widget_large_title_text_size">@dimen/large_title_text_size</dimen> <!-- 20sp. -->
|
|
||||||
<dimen name="widget_title_text_size">@dimen/title_text_size</dimen> <!-- 16sp. -->
|
|
||||||
<dimen name="widget_subtitle_text_size">@dimen/subtitle_text_size</dimen> <!-- 12sp. -->
|
|
||||||
<dimen name="widget_content_text_size">@dimen/content_text_size</dimen> <!-- 14sp. -->
|
|
||||||
<dimen name="widget_time_text_size">10sp</dimen>
|
|
||||||
<dimen name="widget_aa_text_size">14dp</dimen>
|
|
||||||
|
|
||||||
<dimen name="widget_margin">0dp</dimen>
|
|
||||||
|
|
||||||
</resources>
|
|
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<string name="app_widget_description">Rain Widget</string>
|
|
||||||
<string name="date_format_widget_oreo_style">EEE, d MMM │</string>
|
|
||||||
<string name="date_format_widget_oreo_big_style">EEEE, d MMM │</string>
|
|
||||||
</resources>
|
|
|
@ -1,15 +1,13 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
<resources>
|
||||||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode
|
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
|
||||||
setting is off -->
|
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
|
||||||
<style name="LaunchTheme" parent="@style/Theme.Material3.DynamicColors.DayNight.NoActionBar">
|
|
||||||
<!-- Show a splash screen on the activity. Automatically removed when
|
<!-- Show a splash screen on the activity. Automatically removed when
|
||||||
the Flutter engine draws its first frame -->
|
the Flutter engine draws its first frame -->
|
||||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
<item name="android:windowBackground">@drawable/launch_background</item>
|
||||||
<item name="android:forceDarkAllowed" tools:targetApi="q">false</item>
|
<item name="android:forceDarkAllowed">false</item>
|
||||||
<item name="android:windowFullscreen">false</item>
|
<item name="android:windowFullscreen">false</item>
|
||||||
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
|
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||||
<item name="android:windowLayoutInDisplayCutoutMode" tools:targetApi="o_mr1">shortEdges</item>
|
|
||||||
</style>
|
</style>
|
||||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||||
This theme determines the color of the Android Window while your
|
This theme determines the color of the Android Window while your
|
||||||
|
@ -17,15 +15,7 @@
|
||||||
running.
|
running.
|
||||||
|
|
||||||
This Theme is only used starting with V2 of Flutter's Android embedding. -->
|
This Theme is only used starting with V2 of Flutter's Android embedding. -->
|
||||||
<style name="NormalTheme" parent="@style/Theme.Material3.DynamicColors.DayNight.NoActionBar">
|
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
|
||||||
<item name="android:windowBackground">?android:colorBackground</item>
|
<item name="android:windowBackground">?android:colorBackground</item>
|
||||||
</style>
|
</style>
|
||||||
<style name="Widget.Android.AppWidget.Container" parent="android:Widget">
|
|
||||||
<item name="android:id">@android:id/background</item>
|
|
||||||
<item name="android:background">?attr/colorSurface</item>
|
|
||||||
</style>
|
|
||||||
<style name="Widget.Android.AppWidget.InnerView" parent="android:Widget">
|
|
||||||
<item name="android:background">?attr/colorSurface</item>
|
|
||||||
<item name="android:textColor">?attr/itemTextColor</item>
|
|
||||||
</style>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
<resources>
|
|
||||||
<style name="Theme.Android.AppWidgetContainerParent" parent="@style/Theme.Material3.DynamicColors.DayNight">
|
|
||||||
<!-- Radius of the outer bound of widgets to make the rounded corners -->
|
|
||||||
<item name="appWidgetRadius">16dp</item>
|
|
||||||
<!--
|
|
||||||
Radius of the inner view's bound of widgets to make the rounded corners.
|
|
||||||
It needs to be 8dp or less than the value of appWidgetRadius
|
|
||||||
-->
|
|
||||||
<item name="appWidgetInnerRadius">8dp</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="Theme.Android.AppWidgetContainer" parent="Theme.Android.AppWidgetContainerParent">
|
|
||||||
<!-- Apply padding to avoid the content of the widget colliding with the rounded corners -->
|
|
||||||
<item name="appWidgetPadding">8dp</item>
|
|
||||||
</style>
|
|
||||||
</resources>
|
|
|
@ -1,13 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:description="@string/app_widget_description"
|
|
||||||
android:initialKeyguardLayout="@layout/oreo_widget_medium"
|
|
||||||
android:initialLayout="@layout/oreo_widget_medium"
|
|
||||||
android:previewLayout="@layout/oreo_widget_medium"
|
|
||||||
android:resizeMode="horizontal|vertical"
|
|
||||||
android:targetCellWidth="5"
|
|
||||||
android:targetCellHeight="1"
|
|
||||||
android:updatePeriodMillis="0"
|
|
||||||
android:widgetCategory="home_screen"
|
|
||||||
tools:ignore="UnusedAttribute" />
|
|
|
@ -1,4 +1,5 @@
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
package="com.example.rain">
|
||||||
<!-- The INTERNET permission is required for development. Specifically,
|
<!-- The INTERNET permission is required for development. Specifically,
|
||||||
the Flutter tool needs it to communicate with the running application
|
the Flutter tool needs it to communicate with the running application
|
||||||
to allow setting breakpoints, to provide hot reload, etc.
|
to allow setting breakpoints, to provide hot reload, etc.
|
||||||
|
|
|
@ -1,3 +1,16 @@
|
||||||
|
buildscript {
|
||||||
|
ext.kotlin_version = '1.7.10'
|
||||||
|
repositories {
|
||||||
|
google()
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
classpath 'com.android.tools.build:gradle:7.2.0'
|
||||||
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
|
@ -13,6 +26,6 @@ subprojects {
|
||||||
project.evaluationDependsOn(':app')
|
project.evaluationDependsOn(':app')
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.register("clean", Delete) {
|
task clean(type: Delete) {
|
||||||
delete rootProject.buildDir
|
delete rootProject.buildDir
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
org.gradle.jvmargs=-Xmx4G
|
org.gradle.jvmargs=-Xmx1536M
|
||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
android.enableJetifier=true
|
android.enableJetifier=true
|
||||||
android.enableR8.fullMode = false
|
|
||||||
|
|
|
@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
|
||||||
|
|
|
@ -1,25 +1,11 @@
|
||||||
pluginManagement {
|
include ':app'
|
||||||
def flutterSdkPath = {
|
|
||||||
def properties = new Properties()
|
|
||||||
file("local.properties").withInputStream { properties.load(it) }
|
|
||||||
def flutterSdkPath = properties.getProperty("flutter.sdk")
|
|
||||||
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
|
|
||||||
return flutterSdkPath
|
|
||||||
}()
|
|
||||||
|
|
||||||
includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
|
def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
|
||||||
|
def properties = new Properties()
|
||||||
|
|
||||||
repositories {
|
assert localPropertiesFile.exists()
|
||||||
google()
|
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
|
||||||
mavenCentral()
|
|
||||||
gradlePluginPortal()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
plugins {
|
def flutterSdkPath = properties.getProperty("flutter.sdk")
|
||||||
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
|
||||||
id "com.android.application" version "8.9.0" apply false
|
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
|
||||||
id "org.jetbrains.kotlin.android" version "2.1.10" apply false
|
|
||||||
}
|
|
||||||
|
|
||||||
include ":app"
|
|
||||||
|
|
Before Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 49 KiB |
BIN
assets/icons/logo.png
Normal file
After Width: | Height: | Size: 122 KiB |
BIN
assets/icons/splash.png
Normal file
After Width: | Height: | Size: 144 KiB |
BIN
assets/images/01d.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
assets/images/01n.png
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
assets/images/02d.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
assets/images/02n.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
assets/images/10d.png
Normal file
After Width: | Height: | Size: 3 KiB |
BIN
assets/images/10n.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
assets/images/11d.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
assets/images/11n.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
assets/images/13d.png
Normal file
After Width: | Height: | Size: 3 KiB |
BIN
assets/images/13n.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
assets/images/50d.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
assets/images/50n.png
Normal file
After Width: | Height: | Size: 4.7 KiB |
BIN
assets/images/add_weather.png
Normal file
After Width: | Height: | Size: 452 KiB |
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 22 KiB |