updated 1.7.4

This commit is contained in:
Pranshul committed 2024-10-27 16:53:35 +05:30
1 parent da19ae77ad
commit 5f9be07e2f
34 files changed
+519 -348

No files matched your search

-17
View File
@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<runningDeviceTargetSelectedWithDropDown>
<Target>
<type value="RUNNING_DEVICE_TARGET" />
<deviceKey>
<Key>
<type value="VIRTUAL_DEVICE_PATH" />
<value value="C:\Users\hukam\.android\avd\Pixel_7_Pro_API_VanillaIceCream.avd" />
</Key>
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2024-10-23T04:04:46.862488800Z" />
</component>
</project>
+2 -2
View File
@@ -10,8 +10,8 @@ android {
applicationId "com.example.weathermaster"
minSdk 22
targetSdk 33
versionCode 65
versionName "1.7.3 (W)"
versionCode 66
versionName "1.7.4 (W)"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
+2 -2
View File
@@ -11,8 +11,8 @@
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 65,
"versionName": "1.7.3 (W)",
"versionCode": 66,
"versionName": "1.7.4 (W)",
"outputFile": "app-release.apk"
}
],
+6 -7
View File
@@ -1,27 +1,26 @@
const apiKeysDaily = [
KEYS
YOUR_KEY
];
const apiKeysAlerts = [
KEYS
YOUR_KEY
];
const apiKeysCityName = [
KEYS
YOUR_KEY
];
const apiKeysGeo = [
KEYS
YOUR_KEY
];
const apiKeysVisual = [
KEYS
YOUR_KEY
];
const astronomyApiKeys = [
KEYS
YOUR_KEY
];
+24 -4
View File
@@ -83,6 +83,11 @@ if(DefaultLocation.name === 'CurrentDeviceLocation'){
} else if(DefaultLocation.lat && DefaultLocation.lon){
DecodeWeather(DefaultLocation.lat, DefaultLocation.lon)
document.querySelector('.currentLocationdiv').hidden = true;
document.getElementById('city-name').innerHTML = DefaultLocation.name;
document.getElementById('SelectedLocationText').innerHTML = DefaultLocation.name;
localStorage.setItem('CurrentLocationName', DefaultLocation.name)
document.getElementById('currentLocationName').textContent = DefaultLocation.name
}
}
else{
@@ -287,6 +292,7 @@ document.addEventListener('DOMContentLoaded', () => {
cityList.innerHTML = '';
cityInput.value = '';
document.getElementById('city-name').innerHTML = suggestionText;
document.getElementById('currentLocationName').innerHTML = suggestionText;
document.querySelector('.focus-input').blur();
document.getElementById('forecast').scrollLeft = 0;
document.getElementById('weather_wrap').scrollTop = 0;
@@ -403,6 +409,7 @@ function loadSavedLocations() {
savelocationtouch.addEventListener('click', () => {
DecodeWeather(savedLocationItemLat, savedLocationItemLon)
document.getElementById('city-name').innerHTML = location.locationName
document.getElementById('currentLocationName').innerHTML = location.locationName;
document.getElementById('forecast').scrollLeft = 0;
document.getElementById('weather_wrap').scrollTop = 0;
window.history.back();
@@ -600,7 +607,7 @@ function RenderSearhMap() {
DecodeWeather(lat, lon);
document.getElementById('city-name').innerHTML = '<md-circular-progress indeterminate style="--md-circular-progress-size: 30px;"></md-circular-progress>';
document.getElementById('forecast').scrollLeft = 0;
document.getElementById('weather_wrap').scrollTop = 0;
});
@@ -637,7 +644,7 @@ function checkNoInternet(){
document.addEventListener('DOMContentLoaded', async function() {
const currentVersion = 'v1.7.2';
const currentVersion = 'v1.7.4';
const githubRepo = 'PranshulGG/WeatherMaster';
const releasesUrl = `https://api.github.com/repos/${githubRepo}/releases/latest`;
@@ -681,6 +688,18 @@ const scrollView = document.querySelector('.insights');
const scrollIndicators = document.getElementById('scroll-indicators');
function saveScrollPosition() {
const scrollPosition = scrollView.scrollLeft;
localStorage.setItem('scrollPosition', scrollPosition);
}
function restoreScrollPosition() {
const savedScrollPosition = localStorage.getItem('scrollPosition');
if (savedScrollPosition) {
scrollView.scrollLeft = savedScrollPosition;
}
}
function createScrollDots(){
const sections = document.querySelectorAll('.insights_item');
@@ -712,13 +731,14 @@ const updateActiveIndicator = () => {
};
window.addEventListener('beforeunload', saveScrollPosition);
scrollView.addEventListener('scroll', updateActiveIndicator);
document.addEventListener('DOMContentLoaded', ()=>{
createScrollDots()
updateActiveIndicator();
restoreScrollPosition();
});
+51 -3
View File
@@ -882,7 +882,6 @@ function displayStars(){
var anim1fog
function displayFog(){
fogAnimation.startAnimation()
var animationContainer1 = document.getElementById('background_animation');
var animationContainer2 = document.getElementById('foreground_animation');
@@ -894,7 +893,7 @@ function displayFog(){
animationContainer1.innerHTML = ''
animationContainer2.innerHTML = ''
var animationData1 = 'lottie_animations/mostly_cloudy_background.json';
var animationData1 = 'lottie_animations/haze_smoke_foreground.json';
anim1fog = bodymovin.loadAnimation({
@@ -951,6 +950,52 @@ function displayLeaves() {
});
}
var anim1CloudFull
var anim2CloudFull
function displayCloudsFull(){
var animationContainer1 = document.getElementById('background_animation');
var animationContainer2 = document.getElementById('foreground_animation');
if (anim1CloudFull) {
anim1CloudFull.destroy();
}
animationContainer1.innerHTML = ''
animationContainer2.innerHTML = ''
var animationData1 = 'lottie_animations/mostly_cloudy_background.json';
var animationData2 = 'lottie_animations/mostly_cloudy_background.json';
anim1CloudFull = bodymovin.loadAnimation({
container: animationContainer1,
renderer: 'svg',
loop: true,
autoplay: true,
path: animationData1,
rendererSettings: {
preserveAspectRatio: 'xMidYMid slice'
}
});
anim2CloudFull = bodymovin.loadAnimation({
container: animationContainer2,
renderer: 'svg',
loop: true,
autoplay: true,
path: animationData2,
rendererSettings: {
preserveAspectRatio: 'xMidYMid slice'
}
});
}
// remove animations
@@ -971,7 +1016,6 @@ function removeStars(){
}
function removeFog(){
fogAnimation.clearCanvas()
if (anim1fog) anim1fog.destroy();
}
@@ -992,3 +1036,7 @@ function removeLeaves(){
if (anim2) anim2.destroy();
}
function removeCloudsFull(){
if (anim1CloudFull) anim1CloudFull.destroy();
if (anim2CloudFull) anim2CloudFull.destroy();
}
+2 -2
View File
@@ -16,8 +16,8 @@ function ReportFromdaily(data) {
}
function GenerateSummary(data) {
let hourlyWeather = getWeatherLabelInLangNoAnimText(data.hourlyData,1 , localStorage.getItem('AppLanguageCode'));
let dailyWeather = getWeatherLabelInLangNoAnim(data.dailyData, 1, localStorage.getItem('AppLanguageCode'));
let hourlyWeather = getWeatherLabelInLangNoAnimText(data.hourlyData, 1, 'en');
let dailyWeather = getWeatherLabelInLangNoAnim(data.dailyData, 1, 'en');
let weatherComment = '';
+1 -1
View File
@@ -5,7 +5,7 @@ function getCountryName(code) {
async function DecodeWeather(lat, lon) {
const apiKey = 'KEYS';
const apiKey = ' YOUR_KEY';
const url = `https://api.timezonedb.com/v2.1/get-time-zone?key=${apiKey}&format=json&by=position&lat=${lat}&lng=${lon}`;
try {
+3 -3
View File
@@ -1040,7 +1040,7 @@ function UvIndex(uvIndexValue) {
function MoreDetails(latSum, lonSum) {
fetch(`https://api.weatherapi.com/v1/forecast.json?key=ef2cb48d90984d828a8140518240209&q=${latSum},${lonSum}`)
fetch(`https://api.weatherapi.com/v1/forecast.json?key= YOUR_KEY&q=${latSum},${lonSum}`)
.then(response => response.json())
.then(data => {
@@ -1193,7 +1193,7 @@ function MoreDetails(latSum, lonSum) {
}
function astronomyData(latSum, lonSum) {
fetch(`https://api.weatherapi.com/v1/astronomy.json?key=ef2cb48d90984d828a8140518240209&q=${latSum},${lonSum}`)
fetch(`https://api.weatherapi.com/v1/astronomy.json?key= YOUR_KEY&q=${latSum},${lonSum}`)
.then(response => response.json())
.then(data => {
@@ -1262,7 +1262,7 @@ function astronomyData(latSum, lonSum) {
function FetchAlert(lat, lon){
fetch(`https://api.weatherapi.com/v1/alerts.json?key=10baabdf43ea48d191075955241810&q=${lat},${lon}`)
fetch(`https://api.weatherapi.com/v1/alerts.json?key= YOUR_KEY&q=${lat},${lon}`)
.then(response => response.json())
.then(data => {
+1 -1
View File
@@ -3161,4 +3161,4 @@ function applyTranslations(langCode) {
const translationKey = el.getAttribute("data-translate");
el.textContent = getTranslationByLang(langCode, translationKey);
});
}
}
+41 -2
View File
@@ -209,6 +209,7 @@ function GetWeatherLabel(iconCode, isDay) {
if (iconCode === 0) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
removeRain()
@@ -223,6 +224,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 1) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
displayClouds()
removeRain()
@@ -238,6 +240,7 @@ function GetWeatherLabel(iconCode, isDay) {
}else{
removeDrizzle()
displayClouds()
removeCloudsFull()
removeRain()
removeFog()
removeSnow()
@@ -250,7 +253,8 @@ function GetWeatherLabel(iconCode, isDay) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeDrizzle()
displayClouds()
removeClouds()
displayCloudsFull()
removeRain()
removeLeaves()
removeFog()
@@ -262,6 +266,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 45 || iconCode === 48) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
removeRain()
@@ -275,6 +280,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 51 || iconCode === 53 || iconCode === 55) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
displayDrizzle()
removeClouds()
removeRain()
@@ -288,6 +294,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 56 || iconCode === 57) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
displayDrizzle()
removeClouds()
removeRain()
@@ -301,6 +308,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 61 || iconCode === 63) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
displayRain()
@@ -314,6 +322,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 65) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
displayRain()
@@ -327,6 +336,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 66 || iconCode === 67) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
displayRain()
@@ -340,6 +350,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 71) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
removeRain()
@@ -353,6 +364,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 73) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
removeRain()
@@ -366,6 +378,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 75) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
removeRain()
@@ -379,6 +392,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 77) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
removeRain()
@@ -392,6 +406,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 80 || iconCode === 81) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
displayRain()
@@ -405,6 +420,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 82) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
displayRain()
@@ -418,6 +434,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 85) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
removeRain()
@@ -431,6 +448,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 86) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
removeRain()
@@ -444,6 +462,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 95) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
displayRain()
@@ -457,6 +476,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 96 || iconCode === 99) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
displayRain()
@@ -472,6 +492,7 @@ function GetWeatherLabel(iconCode, isDay) {
if (iconCode === 0) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
removeRain()
@@ -500,6 +521,7 @@ function GetWeatherLabel(iconCode, isDay) {
}else{
removeDrizzle()
displayClouds()
removeCloudsFull()
removeRain()
removeFog()
removeSnow()
@@ -512,7 +534,8 @@ function GetWeatherLabel(iconCode, isDay) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeDrizzle()
displayClouds()
removeClouds()
displayCloudsFull()
removeRain()
removeFog()
removeLeaves()
@@ -524,6 +547,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 45 || iconCode === 48) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
removeLeaves()
@@ -537,6 +561,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 51 || iconCode === 53 || iconCode === 55) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
displayDrizzle()
removeClouds()
removeLeaves()
@@ -550,6 +575,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 56 || iconCode === 57) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
displayDrizzle()
removeClouds()
removeRain()
@@ -563,6 +589,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 61 || iconCode === 63) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
displayRain()
@@ -576,6 +603,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 65) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
displayRain()
@@ -589,6 +617,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 66 || iconCode === 67) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
removeLeaves()
@@ -602,6 +631,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 71) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
removeRain()
@@ -615,6 +645,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 73) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
removeRain()
@@ -628,6 +659,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 75) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
removeRain()
@@ -641,6 +673,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 77) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
removeRain()
@@ -654,6 +687,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 80 || iconCode === 81) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
displayRain()
@@ -667,6 +701,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 82) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
displayRain()
@@ -680,6 +715,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 85) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
removeRain()
@@ -693,6 +729,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 86) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
removeRain()
@@ -706,6 +743,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 95) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
displayRain()
@@ -719,6 +757,7 @@ function GetWeatherLabel(iconCode, isDay) {
} else if (iconCode === 96 || iconCode === 99) {
if(localStorage.getItem('UseBackgroundAnimations') && localStorage.getItem('UseBackgroundAnimations') === 'false'){
}else{
removeCloudsFull()
removeDrizzle()
removeClouds()
displayRain()
+350 -301
View File
@@ -1,5 +1,6 @@
<!DOCTYPE html>
<html lang="en" Theme="about_page" data-theme="dark">
<html lang="en" Theme="about_page" data-theme="dark" >
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
@@ -11,18 +12,179 @@
<link rel="stylesheet" href="../components/components.css">
<link rel="stylesheet" href="../ripple-files/ripple.css">
<link rel="stylesheet" href="../components/md-buttons.css">
<script src="../modules/lottie.js"></script>
<style>
#updateMessageDiv{
animation: opacity 0.3s ease-out;
transition: opacity 0.2s ease-in;
.top_header_area_app_about {
display: flex;
align-items: center;
justify-content: space-around;
padding-top: 20px;
}
.top_header_area_app_about .app_icon_holder_about {
width: 100px;
height: 100px;
display: flex;
align-items: center;
justify-content: center;
color: var(--On-Surface);
margin: 0;
margin-bottom: 5px;
background-color: var(--Surface-Container);
border-radius: 20px;
padding: 15px;
}
test {
width: 100px;
height: 0;
display: flex;
opacity: 0;
align-items: center;
justify-content: center;
background-color: var(--Surface-Container);
border-radius: 20px;
padding: 15px;
}
.top_header_area_app_about .app_icon_holder_about img {
width: 90px;
}
.top_header_area_app_about .app_label_about p {
margin: 0;
font-size: 40px;
font-family: var(--outfit-mid);
color: var(--On-Surface);
margin-bottom: 10px;
line-height: 1;
}
.top_header_area_app_about .app_label_about span {
border: 1.4px solid var(--Outline-Variant);
padding-left: 10px;
padding-right: 10px;
padding-top: 2px;
padding-bottom: 2px;
color: var(--On-Surface-Variant);
font-size: 15px;
font-family: var(--google-normal);
border-radius: 50px;
}
.top_header_area_app_about .app_label_about {
display: flex;
flex-direction: column;
align-items: flex-start;
}
.check_update_btn_about_holder {
display: flex;
align-items: center;
justify-content: space-around;
padding-top: 20px;
}
#version_check_loader {
position: absolute;
top: 0;
width: 100%;
}
.about_actions_main {
position: absolute;
bottom: 15px;
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 5px;
width: calc(100% - 20px);
gap: 10px;
padding: 10px;
align-content: center;
justify-items: center;
}
.about_actions_main .bottom_action_btn_about div {
width: 50px;
height: 50px;
border-radius: 50px;
background-color: var(--Primary-Container);
display: flex;
align-items: center;
justify-content: center;
color: var(--On-Primary-Container);
}
.about_actions_main .bottom_action_btn_about {
display: flex;
align-items: center;
flex-direction: column;
position: relative;
padding: 10px;
background-color: var(--Surface-Container-Low);
justify-content: center;
gap: 5px;
border-radius: 20px;
max-width: 200px;
width: calc(100% - 20px);
}
.about_actions_main .bottom_action_btn_about p {
margin: 0;
color: var(--On-Surface);
font-family: var(--google-mid);
font-size: 15px;
text-align: center;
}
.about_actions_main .bottom_action_btn_about md-ripple {
--md-ripple-pressed-opacity: 0.1;
}
.top_animation_about{
position: absolute;
top: 10px;
z-index: -1;
}
@media screen and (min-width: 600px){
.all_about_wrap{
width:600px;
}
.about_actions_main{
width: 600px;
}
.center_all{
display: flex;
align-items: center;
flex-direction: column;
}
.top_animation_about{
width: 600px;
}
#version_check_loader{
width: 600px;
}
}
#updateMessageDiv {
position: absolute;
bottom: 220px;
left: 0;
color: var(--On-Surface-Variant);
animation: opacity 0.3s ease-out;
transition: opacity 0.2s ease-in;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
}
@keyframes opacity {
0%{
opacity: 0;
@@ -31,344 +193,231 @@
opacity: 1;
}
}
#updateMessage{
background-color: var(--Secondary-Container);
color: var(--On-Secondary-Container);
padding: 5px;
border-radius: 5px;
}
.about_app_icon{
display: flex;
align-items: center;
justify-content: center;
margin-top: 30px;
position: relative;
}
.about_app_icon > div{
width: 150px;
height: 150px;
background-color: var(--Surface-Container);
border-radius: 9999px;
display: flex;
align-items: center;
justify-content: center;
padding: 10px;
}
.about_app_icon > div > img{
height: 130px;
z-index: 1;
}
.about_app_icon > md-circular-progress{
position: absolute;
width: 170px;
height: 170px;
}
.app_label_about_name{
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
padding-top: 10px;
gap: 10px;
}
.app_label_about_name > p{
margin: 0;
font-family: var(--outfit-mid);
font-size: 30px;
color: var(--Secondary);
z-index: 1;
}
.app_label_about_name > span{
color: var(--On-Surface-Variant);
font-family: var(--google-mid);
z-index: 1;
display: flex;
border: 1.3px solid var(--Outline-Variant);
align-items: center;
justify-content: center;
padding-left: 8px;
padding-right: 8px;
border-radius: 50px;
height: 25px;
}
.other_about_actions{
display: grid;
grid-template-columns: repeat(1, 1fr);
gap: 5px;
padding: 10px;
position: absolute;
bottom: 5px;
width: calc(100% - 20px);
}
.other_about_actions > md-list-item{
background-color: var(--Surface-Container-Low);
border-radius: 50px;
}
.heart {
position: absolute;
width: 5px;
height: 5px;
background-color: transparent !important;
opacity: 1;
z-index: 200;
animation: ripple 0.8s ease-out forwards;
font-family: 'Material symbols';
font-weight: normal !important;
font-style: normal !important;
font-variation-settings: 'FILL' 1;
line-height: 1;
color: rgb(243, 125, 125);
font-size: 40px;
}
@keyframes ripple {
0% {
transform: scale(0);
opacity: 1;
}
100% {
transform: scale(4);
opacity: 0;
}
}
</style>
</head>
<body style="--md-list-item-label-text-size: 1.15rem; --md-list-item-pressed-state-layer-opacity: 0.15; --md-ref-typeface-plain: var(--google-normal); background-color: var(--Surface);">
<body class="center_all" style="--md-list-item-label-text-size: 1.15rem; --md-list-item-pressed-state-layer-opacity: 0.15; --md-ref-typeface-plain: var(--google-normal); background-color: var(--Surface);">
<div class="about_app_icon" onclick="createRipple(event)">
<div>
<img src="../weather-icons/mostly_clear_day.svg" alt=""></div>
<md-circular-progress indeterminate hidden id="version_check_loader"></md-circular-progress>
</div>
<div class="all_about_wrap">
<div class="top_header_area_app_about">
<div class="app_label_about_name" style="position: relative;">
<p>WeatherMaster</p>
<span>1.7.3 (W)</span>
<img src="https://gitlab.com/bignutty/google-weather-icons/-/raw/main/froggie/v2/mobile/26-haze-fog-dust-smoke/26-haze-fog-dust-smoke-fruit-stand.png?ref_type=heads" alt="" style="width: 100%; position: absolute; opacity: 0.4; bottom:30px;" >
<div class="app_label_about">
<p>Weather <br>Master</p>
<md-elevated-button trailing-icon style="margin-top: 15px;" id="checkUpdatesBtn" ><span data-translate="latest_version">Latest version</span> <md-icon icon-outlined slot="icon" style="font-size: 20px;">refresh</md-icon></md-elevated-button>
</div>
<span>1.7.4 (W)</span>
</div>
<div class="app_icon_holder_about">
<img src="../weather-icons/mostly_clear_day.svg" alt="">
</div>
</div>
<div class="check_update_btn_about_holder">
<md-elevated-button trailing-icon id="checkUpdatesBtn"><span data-translate="latest_version">Latest
version</span> <md-icon icon-outlined slot="icon"
style="font-size: 22px;">refresh</md-icon></md-elevated-button>
<test></test>
</div>
<div class="check_update_btn_about_holder" onclick="window.location.href='https://github.com/PranshulGG/WeatherMaster/issues/new'">
<md-elevated-button trailing-icon><span>Create an issue</span> <md-icon
icon-outlined slot="icon" style="font-size: 22px;">bug_report</md-icon></md-elevated-button>
<test></test>
</div>
<div class="about_actions_main">
<div class="bottom_action_btn_about" onclick="window.location.href='https://github.com/PranshulGG/WeatherMaster'">
<div>
<md-icon icon-filled>code</md-icon>
</div>
<p>Source code</p>
<md-ripple></md-ripple>
</div>
<div class="other_about_actions">
<div class="bottom_action_btn_about" onclick="sendThemeToAndroid('OpenTermsConditions')">
<div>
<md-icon icon-filled>privacy_tip</md-icon>
</div>
<p>Terms & Conditions</p>
<md-ripple></md-ripple>
</div>
<div class="bottom_action_btn_about" onclick="sendThemeToAndroid('OpenPrivacyPolicy')">
<div>
<md-icon icon-filled>policy</md-icon>
</div>
<p>Privacy Policy</p>
<md-ripple></md-ripple>
</div>
<div class="bottom_action_btn_about" onclick="sendThemeToAndroid('OpenLicenses')">
<div>
<md-icon icon-filled>copyright</md-icon>
</div>
<p>Licenses</p>
<md-ripple></md-ripple>
</div>
</div>
<p id="updateMessageDiv" hidden>
<span id="updateMessage">New version available!</span>
</p>
<div id="version_check_loader" hidden>
<md-linear-progress indeterminate></md-linear-progress>
</div>
<md-list-item type="button" onclick="sendThemeToAndroid('OpenTermsConditions')">
<md-icon slot="start" icon-filled>privacy_tip</md-icon>
<div slot="headline" data-translate="terms_conditions">Terms and Conditions</div>
</md-list-item>
<div id="updateMessageDiv" hidden>
<p id="updateMessage">New version available!</p>
</div>
<md-list-item type="button" onclick="sendThemeToAndroid('OpenPrivacyPolicy')">
<md-icon slot="start" icon-filled>policy</md-icon>
<div slot="headline" data-translate="privacy_policy">Privacy Policy</div>
</md-list-item>
<div class="top_animation_about">
<md-list-item type="button" onclick="window.location.href='https://github.com/PranshulGG/WeatherMaster'">
<md-icon slot="start" icon-filled>code</md-icon>
<div slot="headline" data-translate="view_source_code">View source code</div>
</md-list-item>
<div id="animation_main_about"></div>
<md-list-item type="button" onclick="sendThemeToAndroid('OpenLicenses')">
<md-icon slot="start" icon-filled>copyright</md-icon>
<div slot="headline" data-translate="third_party_licenses">Third party licenses</div>
</div>
</md-list-item>
</div>
<div class="toast_version" hidden>
</div>
</div>
</div>
<script>
const AppLanguageCodeValue = localStorage.getItem('AppLanguageCode');
const AppLanguageCodeValue = localStorage.getItem('AppLanguageCode');
if (AppLanguageCodeValue) {
applyTranslations(AppLanguageCodeValue);
}
const user6 = document.getElementById('headUser-6')
const user6 = document.getElementById('headUser-6')
function changeColorOnScroll6() {
var container = document.getElementById('headUser-6');
var scrollY = container.scrollTop;
function changeColorOnScroll6() {
var container = document.getElementById('headUser-6');
var scrollY = container.scrollTop;
if (scrollY >= 50) {
document.getElementById('head-6').style.backgroundColor = 'var(--Surface-Container)';
document.getElementById('head-6').style.transition = '';
if (scrollY >= 50) {
document.getElementById('head-6').style.backgroundColor = 'var(--Surface-Container)';
document.getElementById('head-6').style.transition = '';
document.getElementById('headUser-6').style.scrollSnapType = 'unset';
container.removeEventListener('scroll', changeColorOnScroll6);
sendThemeToAndroid('Scrolled')
document.getElementById('headUser-6').style.scrollSnapType = 'unset';
container.removeEventListener('scroll', changeColorOnScroll6);
sendThemeToAndroid('Scrolled')
} else {
} else {
}
}
if(user6){
document.getElementById('headUser-6').addEventListener('scroll', changeColorOnScroll6);
}
function changeColorOnScroll6A() {
var container = document.getElementById('headUser-6');
var scrollY = container.scrollTop;
if (scrollY <= 1) {
document.getElementById('head-6').style.backgroundColor = '';
document.getElementById('head-6').style.transition = 'background-color 0.2s ease-in';
sendThemeToAndroid('ScrollFalse')
container.addEventListener('scroll', changeColorOnScroll6);
if(scrollY <= 20); {
document.getElementById('headUser-6').style.scrollSnapType = '';
}
} else{
}
}
if(user6){
document.getElementById('headUser-6').addEventListener('scroll', changeColorOnScroll6A);
}
function sendThemeToAndroid(theme) {
AndroidInterface.updateStatusBarColor(theme);
};
document.getElementById('checkUpdatesBtn').addEventListener('click', async function() {
const currentVersion = 'v1.7.3';
const githubRepo = 'PranshulGG/WeatherMaster';
const releasesUrl = `https://api.github.com/repos/${githubRepo}/releases/latest`;
try {
const response = await fetch(releasesUrl);
if (!response.ok) throw new Error('Network response was not ok.');
const data = await response.json();
const latestVersion = data.tag_name;
document.getElementById('version_check_loader').hidden = false;
document.getElementById('checkUpdatesBtn').disabled = true;
setTimeout(()=>{
if (latestVersion !== currentVersion) {
document.getElementById('updateMessage').innerText = 'New version available!';
document.getElementById('version_check_loader').hidden = true;
document.getElementById('checkUpdatesBtn').disabled = false;
document.querySelector('#updateMessageDiv').hidden = false;
setTimeout(()=>{
window.location.href = 'https://github.com/PranshulGG/WeatherMaster/releases';
}, 1000);
} else {
document.getElementById('updateMessage').innerText = 'You are using the latest version!';
document.getElementById('version_check_loader').hidden = true;
document.getElementById('checkUpdatesBtn').disabled = false;
document.querySelector('#updateMessageDiv').hidden = false;
}
}
}, 2000);
if (user6) {
document.getElementById('headUser-6').addEventListener('scroll', changeColorOnScroll6);
}
setTimeout(()=>{
document.querySelector('#updateMessageDiv').style.opacity = '0';
}, 3800);
setTimeout(()=>{
document.querySelector('#updateMessageDiv').hidden = true;
document.querySelector('#updateMessageDiv').style.opacity = '';
}, 4000);
}catch (error) {
document.getElementById('updateMessage').innerText = 'Error checking for updates.';
console.error('Error:', error);
}
});
function changeColorOnScroll6A() {
var container = document.getElementById('headUser-6');
var scrollY = container.scrollTop;
if (scrollY <= 1) {
document.getElementById('head-6').style.backgroundColor = '';
document.getElementById('head-6').style.transition = 'background-color 0.2s ease-in';
sendThemeToAndroid('ScrollFalse')
container.addEventListener('scroll', changeColorOnScroll6);
if (scrollY <= 20); {
document.getElementById('headUser-6').style.scrollSnapType = '';
}
} else {
}
}
if (user6) {
document.getElementById('headUser-6').addEventListener('scroll', changeColorOnScroll6A);
}
function sendThemeToAndroid(theme) {
AndroidInterface.updateStatusBarColor(theme);
};
document.getElementById('checkUpdatesBtn').addEventListener('click', async function () {
const currentVersion = 'v1.7.4';
const githubRepo = 'PranshulGG/WeatherMaster';
const releasesUrl = `https://api.github.com/repos/${githubRepo}/releases/latest`;
try {
const response = await fetch(releasesUrl);
if (!response.ok) throw new Error('Network response was not ok.');
const data = await response.json();
const latestVersion = data.tag_name;
document.getElementById('version_check_loader').hidden = false;
document.getElementById('checkUpdatesBtn').disabled = true;
setTimeout(() => {
if (latestVersion !== currentVersion) {
document.getElementById('updateMessage').innerText = 'New version available!';
document.getElementById('version_check_loader').hidden = true;
document.getElementById('checkUpdatesBtn').disabled = false;
document.querySelector('#updateMessageDiv').hidden = false;
setTimeout(() => {
window.location.href = 'https://github.com/PranshulGG/WeatherMaster/releases';
}, 1000);
} else {
document.getElementById('updateMessage').innerText = 'You are using the latest version!';
document.getElementById('version_check_loader').hidden = true;
document.getElementById('checkUpdatesBtn').disabled = false;
document.querySelector('#updateMessageDiv').hidden = false;
}
}, 2000);
setTimeout(() => {
document.querySelector('#updateMessageDiv').style.opacity = '0';
}, 3800);
setTimeout(() => {
document.querySelector('#updateMessageDiv').hidden = true;
document.querySelector('#updateMessageDiv').style.opacity = '';
}, 4000);
} catch (error) {
document.getElementById('updateMessage').innerText = 'Error checking for updates.';
console.error('Error:', error);
}
});
var animationContainer = document.getElementById('animation_main_about');
var animationData = '../lottie_animations/haze_smoke_foreground.json';
function createRipple(event) {
const container = event.currentTarget;
const heart = document.createElement('div');
heart.classList.add('heart');
const colors = ['orange', 'yellow', 'red', 'var(--Primary)', '#ff0077'];
const icons = ['cloud', 'sunny', 'rainy', 'favorite', 'thunderstorm', 'cloudy_snowing', 'foggy', 'dark_mode']
const randomColor = colors[Math.floor(Math.random() * colors.length)];
const RandomIcon = icons[Math.floor(Math.random() * icons.length)];
heart.style.color = randomColor;
// Get click position relative to the container
const rect = container.getBoundingClientRect();
const x = event.clientX - rect.left;
const y = event.clientY - rect.top;
// Position the heart at the click location
heart.style.left = `${x}px`;
heart.style.top = `${y}px`;
heart.innerHTML = RandomIcon
container.appendChild(heart);
heart.addEventListener('animationend', () => {
heart.remove();
anim = bodymovin.loadAnimation({
container: animationContainer,
renderer: 'svg',
loop: true,
autoplay: true,
path: animationData
});
}
</script>
@@ -276,6 +276,14 @@
<md-ripple></md-ripple>
</label>
<label class="language_item">
<input name="app_language_radios" value="Persian" lang="fa" onclick="updateImgAreas()" type="radio">
<img_area>
<i class="fas fi-ir"></i>
</img_area>
Persian
<md-ripple></md-ripple>
</label>
</md-list>
+25 -1
View File
@@ -211,7 +211,7 @@ touch_search{
.left_current_weather .temp_img p{
color: var(--Primary);
font-size: 60px;
font-family: Arial, Helvetica, sans-serif;
font-family: var(--google-mid);
margin: 0;
font-weight: 500;
}
@@ -2508,4 +2508,28 @@ max-width: 150px;
margin: 0;
font-family: var(--outfit-mid);
}
@media screen and (min-width: 600px){
.weather {
max-width: 50%;
margin-left: auto;
}
#search-container{
display: block;
max-width: 50%;
height: calc(100% - 65px);
top: 65px;
left: 0;
}
touch_search{
pointer-events: none;
}
.close_search{
display: none !important;
}
}
@@ -217,6 +217,7 @@ public class AboutPage extends AppCompatActivity {
url.startsWith("https://app-privacy-policy-generator.nisrulz.com/") ||
url.startsWith("https://github.com/PranshulGG/WeatherMaster") ||
url.startsWith("mailto:pranshul.devmain@gmail.com")||
url.startsWith("https://github.com/PranshulGG/WeatherMaster/issues/new") ||
url.startsWith("https://github.com/PranshulGG/WeatherMaster/releases");
@@ -1 +1 @@
<p><i>WeatherMaster</i> is developed with pure HTML, CSS, JavaScript, and Java. Designed to mimic the look and feel of a native Android app.</p><p><br><b>Features:</b></p><ul><li><b>🌤️ Current Weather:</b> Get real-time updates on weather conditions in your area.</li><li><b>📢 Government Weather Alerts:</b> Receive official alerts and warnings to stay safe.</li><li><b>⏳ 48-Hour Forecast:</b> Plan your short-term activities with accurate forecasts for the next two days.</li><li><b>📅 8-Day Forecast:</b> View detailed weather predictions for the upcoming week.</li><li><b>🌙 Moon Phases:</b> Track the phases of the moon and plan accordingly.</li><li><b>🌑 Moonrise & Moonset:</b> Know the exact times for moonrise and moonset each day.</li><li><b>🌅 Sunrise & Sunset:</b> Stay informed about sunrise and sunset times to optimize your day.</li><li><b>📏 Day Length:</b> Check how long the daylight lasts each day.</li><li><b>📝 Day Description:</b> Get a brief summary of the day’s weather conditions.</li><li><b>🌧️ Rain Bar:</b> See a visual representation of expected rainfall.</li><li><b>👁️ Visibility:</b> Monitor how far you can see clearly based on weather conditions.</li><li><b>💧 Humidity:</b> Check the current humidity levels to stay comfortable.</li><li><b>🧭 Pressure:</b> Track atmospheric pressure to understand weather changes.</li><li><b>🌬️ Wind Direction & Speed:</b> Stay aware of wind patterns and strength.</li><li><b>❄️ Snow Amount:</b> Know the expected snowfall for winter planning.</li><li><b>☁️ Cloudiness:</b> See how much of the sky is covered by clouds.</li><li><b>🌡️ Min-Max Temperature:</b> View the range of temperatures for the day.</li><li><b>🌬️ Feels Like Temperature:</b> Understand how the temperature feels based on wind and humidity.</li><li><b>🌧️ Precipitation Type & Area Coverage:</b> Get details on what kind of precipitation is expected and its coverage area.</li><li><b>🌞 UV Index:</b> Stay protected from harmful UV rays with UV index updates.</li><li><b>🌿 Air Quality:</b> Monitor air quality to stay informed about pollution levels.</li><li><b>🗺️ Live Map:</b> Access a real-time map to track weather conditions in different areas.</li><li><b>📍 Location Picker:</b> Easily select and view weather information for different locations.</li><li><b>⭐ Save Favorite Locations:</b> Save your preferred locations for quick access to their weather updates.</li><li><b>👗 Clothing Recommendations:</b> Get suggestions on what to wear based on the current weather conditions.</li></ul>
<p><i>WeatherMaster</i> inspired by the Google Pixel weather app, but with more features</p> <p><br><b>Features:</b></p> <ul> <li><b>🌤️ Current Weather:</b> Get real-time updates on weather conditions in your area.</li> <li><b>📢 Government Weather Alerts:</b> Receive official alerts and warnings to stay safe.</li> <li><b>⏳ 24-Hour Forecast:</b> Plan your short-term activities with accurate forecasts for the next two days.</li> <li><b>📅 14-Day Forecast:</b> View detailed weather predictions for the upcoming week.</li> <li><b>🌙 Moon Phases:</b> Track the phases of the moon and plan accordingly.</li> <li><b>🌑 Moonrise & Moonset:</b> Know the exact times for moonrise and moonset each day.</li> <li><b>🌅 Sunrise & Sunset:</b> Stay informed about sunrise and sunset times to optimize your day.</li> <li><b>📏 Day Length:</b> Check how long the daylight lasts each day.</li> <li><b>📝 Day Description:</b> Get a brief summary of the day’s weather conditions.</li> <li><b>🌧️ Rain Bar:</b> See a visual representation of expected rainfall.</li> <li><b>👁️ Visibility:</b> Monitor how far you can see clearly based on weather conditions.</li> <li><b>💧 Humidity:</b> Check the current humidity levels to stay comfortable.</li> <li><b>🧭 Pressure:</b> Track atmospheric pressure to understand weather changes.</li> <li><b>🌬️ Wind Direction & Speed:</b> Stay aware of wind patterns and strength.</li> <li><b>❄️ Snow Amount:</b> Know the expected snowfall for winter planning.</li> <li><b>☁️ Cloudiness:</b> See how much of the sky is covered by clouds.</li> <li><b>🌡️ Min-Max Temperature:</b> View the range of temperatures for the day.</li> <li><b>🌬️ Feels Like Temperature:</b> Understand how the temperature feels based on wind and humidity.</li> <li><b>🌧️ Precipitation Type & Area Coverage:</b> Get details on what kind of precipitation is expected and its coverage area.</li> <li><b>🌞 UV Index:</b> Stay protected from harmful UV rays with UV index updates.</li> <li><b>🌿 Air Quality:</b> Monitor air quality to stay informed about pollution levels.</li> <li><b>🗺️ Live Map:</b> Access a real-time map to track weather conditions in different areas.</li> <li><b>📍 Location Picker:</b> Easily select and view weather information for different locations.</li> <li><b>⭐ Save Favorite Locations:</b> Save your preferred locations for quick access to their weather updates.</li> <li><b>👗 Clothing Recommendations:</b> Get suggestions on what to wear based on the current weather conditions. </li> <li><b>🌾 Pollen Data (Europe Only)</b> View pollen levels for grass, trees, and weeds in your area.</li> </ul>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 629 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 596 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 607 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 581 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 517 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 528 KiB

@@ -1 +1 @@
Weather, Forecast, Moon Phases and more
Weather, Forecasts, Moon Phases, and More