diff --git a/app/src/main/java/me/tangobee/weathernaut/MainActivity.kt b/app/src/main/java/me/tangobee/weathernaut/MainActivity.kt index 313dded..22744f9 100644 --- a/app/src/main/java/me/tangobee/weathernaut/MainActivity.kt +++ b/app/src/main/java/me/tangobee/weathernaut/MainActivity.kt @@ -1,8 +1,8 @@ package me.tangobee.weathernaut import android.content.Intent +import android.content.res.Configuration import android.os.Bundle -import android.util.Log import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen @@ -22,6 +22,7 @@ import me.tangobee.weathernaut.utils.WeatherHelper import me.tangobee.weathernaut.viewmodels.WeatherViewModel import me.tangobee.weathernaut.viewmodels.WeatherViewModelFactory import java.net.UnknownHostException +import java.util.Locale import kotlin.system.exitProcess class MainActivity : AppCompatActivity() { @@ -59,11 +60,12 @@ class MainActivity : AppCompatActivity() { val settingsModel = SharedPreferencesHelper(this).getSettings() if(settingsModel?.isMusicOn != false) { - val startMusicIntent = Intent(this, WeatherMusicService::class.java) + var startMusicIntent = Intent(this, WeatherMusicService::class.java) startService(startMusicIntent) } fetchData() + setLanguage() splashScreen.setKeepOnScreenCondition { (weatherViewModel.weatherLiveData.value == null) } setContentView(binding.root) @@ -96,7 +98,12 @@ class MainActivity : AppCompatActivity() { } } } - + private fun setLanguage(){ + Locale.setDefault(Locale(sharedPreferencesHelper.getSettings()?.Language ?:"")) + val config = Configuration() + config.locale = Locale(sharedPreferencesHelper.getSettings()?.Language ?:"") + resources.updateConfiguration(config, resources.displayMetrics) + } private fun createLocalDB(weatherData: WeatherData) { val currentSettings = sharedPreferencesHelper.getSettings() if (currentSettings != null) { diff --git a/app/src/main/java/me/tangobee/weathernaut/models/SettingsModel.kt b/app/src/main/java/me/tangobee/weathernaut/models/SettingsModel.kt index 4bba851..284115f 100644 --- a/app/src/main/java/me/tangobee/weathernaut/models/SettingsModel.kt +++ b/app/src/main/java/me/tangobee/weathernaut/models/SettingsModel.kt @@ -4,5 +4,7 @@ data class SettingsModel( var tempUnit: String = "celsius", var windSpeedUnit: String = "kmh", var pressureUnit: String = "hpa", - var isMusicOn: Boolean = true + var isMusicOn: Boolean = true, + var Language: String= "", + var LanguageName: String="" ) \ No newline at end of file diff --git a/app/src/main/java/me/tangobee/weathernaut/ui/SettingsFragment.kt b/app/src/main/java/me/tangobee/weathernaut/ui/SettingsFragment.kt index 04dce3e..2b2bab4 100644 --- a/app/src/main/java/me/tangobee/weathernaut/ui/SettingsFragment.kt +++ b/app/src/main/java/me/tangobee/weathernaut/ui/SettingsFragment.kt @@ -1,9 +1,9 @@ package me.tangobee.weathernaut.ui import android.content.Intent +import android.content.res.Configuration import android.net.Uri import android.os.Bundle -import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.MenuItem import android.view.View @@ -12,6 +12,7 @@ import android.widget.ScrollView import android.widget.Toast import androidx.appcompat.widget.PopupMenu import androidx.core.content.ContextCompat +import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import me.tangobee.weathernaut.R import me.tangobee.weathernaut.constants.UnitsMapper @@ -22,6 +23,8 @@ import me.tangobee.weathernaut.services.WeatherMusicService import me.tangobee.weathernaut.utils.SharedPreferencesHelper import me.tangobee.weathernaut.utils.WeatherHelper import me.tangobee.weathernaut.viewmodels.WeatherViewModel +import java.util.Locale + class SettingsFragment : Fragment() { @@ -68,6 +71,7 @@ class SettingsFragment : Fragment() { binding.temperatureUnit.setOnClickListener {showTemperatureUnitPopup(binding.temperatureSpinner)} binding.windSpeedUnit.setOnClickListener {showWindSpeedUnitPopup(binding.windSpeedSpinner)} binding.atmosphericPressureUnit.setOnClickListener {showAtmosphericPressureUnitPopup(binding.atmosphericPressureSpinner)} + binding.weatherLanguageWrapper.setOnClickListener{showLanguagePopup(binding.languageSpinner)} binding.backButton.setOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() @@ -111,6 +115,7 @@ class SettingsFragment : Fragment() { binding.atmosphericPressureSpinner.text = UnitsMapper.getShorthandUnit(settingsModel.pressureUnit) binding.weatherMusicSwitch.setChecked(settingsModel.isMusicOn) + binding.languageSpinner.text=settingsModel.LanguageName } private fun weatherMusicToggle(musicFlag: Boolean) { @@ -248,6 +253,52 @@ class SettingsFragment : Fragment() { popup.show() } + //language update + private fun showLanguagePopup(view: View) { + val popup = PopupMenu(requireContext(), view) + popup.inflate(R.menu.language_menu) + popup.setOnMenuItemClickListener { item: MenuItem? -> + when (item!!.itemId) { + R.id.english -> { + binding.languageSpinner.text = item.title + Locale.setDefault(Locale("")) + val config = Configuration() + config.locale = Locale("") + resources.updateConfiguration(config, resources.displayMetrics) + sharedPreferencesHelper.updateSettings { + it.Language = "" + it.LanguageName= item.title.toString() + it + } + + val currentSettings = sharedPreferencesHelper.getSettings() + updateWeatherData(currentSettings) + } + R.id.hindi -> { + binding.languageSpinner.text = item.title + Locale.setDefault(Locale("hi")) + val config = Configuration() + config.locale = Locale("hi") + resources.updateConfiguration(config, resources.displayMetrics) + + sharedPreferencesHelper.updateSettings { + it.Language = "hi" + it.LanguageName=item.title.toString() + it + } + + val currentSettings = sharedPreferencesHelper.getSettings() + updateWeatherData(currentSettings) + } + + } + + true + } + + popup.show() + } + private fun updateWeatherData(currentSettings: SettingsModel?) { if(currentSettings != null) { val weatherHelper = WeatherHelper(currentSettings, weatherData) diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index b5c3900..a7b0e68 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -1,41 +1,41 @@ + android:fitsSystemWindows="true" + tools:context=".ui.SettingsFragment"> + android:src="@drawable/icon_back" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="@id/backButton" /> + android:scrollbarSize="0dp" + app:layout_constraintTop_toBottomOf="@id/backButton"> + android:orientation="vertical" + app:layout_constraintTop_toTopOf="parent"> + android:textSize="@dimen/_10ssp" /> + android:weightSum="2"> + android:textSize="@dimen/_13ssp" /> + app:drawableEndCompat="@drawable/icon_dropdown" + app:drawableTint="@color/placeholderColor" /> @@ -101,36 +101,36 @@ android:id="@+id/windSpeedUnit" android:layout_width="match_parent" android:layout_height="wrap_content" - android:orientation="horizontal" android:clickable="true" android:focusable="true" android:foreground="?attr/selectableItemBackground" + android:gravity="center" + android:orientation="horizontal" android:paddingVertical="@dimen/_15sdp" - android:weightSum="2" - android:gravity="center"> + android:weightSum="2"> + android:textSize="@dimen/_13ssp" /> + app:drawableEndCompat="@drawable/icon_dropdown" + app:drawableTint="@color/placeholderColor" /> @@ -138,36 +138,36 @@ android:id="@+id/atmosphericPressureUnit" android:layout_width="match_parent" android:layout_height="wrap_content" - android:orientation="horizontal" android:clickable="true" android:focusable="true" android:foreground="?attr/selectableItemBackground" + android:gravity="center" + android:orientation="horizontal" android:paddingVertical="@dimen/_15sdp" - android:weightSum="2" - android:gravity="center"> + android:weightSum="2"> + android:textSize="@dimen/_13ssp" /> + app:drawableEndCompat="@drawable/icon_dropdown" + app:drawableTint="@color/placeholderColor" /> @@ -176,8 +176,8 @@ android:id="@+id/separator" android:layout_width="match_parent" android:layout_height="@dimen/_1sdp" - android:background="#EAEAEA" android:layout_marginTop="@dimen/_25sdp" + android:background="#EAEAEA" app:layout_constraintTop_toBottomOf="@+id/unitLayout" /> + android:orientation="vertical" + app:layout_constraintTop_toBottomOf="@id/separator"> + android:textSize="@dimen/_10ssp" /> + android:layout_weight="1" + android:orientation="vertical"> + @@ -235,12 +236,62 @@ android:id="@+id/weatherMusicSwitch" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_gravity="center" + android:layout_weight="1" android:checked="true" - app:switcher_off_color="#EAEAEA" - app:switcher_on_color="@android:color/holo_green_light" app:elevation="0dp" + app:switcher_off_color="#EAEAEA" + app:switcher_on_color="@android:color/holo_green_light" /> + + + + + + + + + + + + android:drawablePadding="@dimen/_5sdp" + android:fontFamily="@font/inter" + android:gravity="center|end" + android:text="@string/english" + android:textColor="@color/placeholderColor" + app:drawableEndCompat="@android:drawable/arrow_down_float" + app:drawableTint="@color/placeholderColor" /> + @@ -250,8 +301,8 @@ android:id="@+id/separator1" android:layout_width="match_parent" android:layout_height="@dimen/_1sdp" - android:background="#EAEAEA" android:layout_marginTop="@dimen/_25sdp" + android:background="#EAEAEA" app:layout_constraintTop_toBottomOf="@+id/otherLayout" /> @@ -260,75 +311,75 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/_25sdp" - app:layout_constraintTop_toBottomOf="@id/separator1" - android:orientation="vertical" > + android:orientation="vertical" + app:layout_constraintTop_toBottomOf="@id/separator1"> + android:textSize="@dimen/_10ssp" /> + android:paddingVertical="@dimen/_15sdp" + android:text="@string/feedback" + android:textColor="@color/black" + android:textSize="@dimen/_13ssp" + app:drawableEndCompat="@drawable/icon_right_arrow" /> + android:paddingVertical="@dimen/_15sdp" + android:text="@string/privacy_policy" + android:textColor="@color/black" + android:textSize="@dimen/_13ssp" + app:drawableEndCompat="@drawable/icon_right_arrow" /> + android:paddingVertical="@dimen/_15sdp" + android:text="@string/donate_us" + android:textColor="@color/black" + android:textSize="@dimen/_13ssp" + app:drawableEndCompat="@drawable/icon_right_arrow" /> + android:text="@string/credits" + android:textColor="@color/black" + android:textSize="@dimen/_13ssp" + app:drawableEndCompat="@drawable/icon_right_arrow" /> diff --git a/app/src/main/res/menu/language_menu.xml b/app/src/main/res/menu/language_menu.xml new file mode 100644 index 0000000..b53d9fa --- /dev/null +++ b/app/src/main/res/menu/language_menu.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml new file mode 100644 index 0000000..17c6c29 --- /dev/null +++ b/app/src/main/res/values-hi/strings.xml @@ -0,0 +1,48 @@ + + + Weathernaut + कोई भी भाषा चुनें + कुछ गड़बड़ हो गई! चिंता न करें, यह आप नहीं, हम हैं। बाद में प्रयास करें। + कोई इंटरनेट कनेक्शन नहीं + शहर खोजें बटन + ऐप सेटिंग बटन + वायुमंडलीय दबाव चिह्न + पिछला बटन + अगले 7 दिन + कल + मौसम चिह्न + संदेशों + साथ-साथ करना + आपका हस्ताक्षर + ईमेल को समय-समय पर सिंक करें + आने वाले अनुलग्नकों को डाउनलोड करें + दबाव + हवा की गति + नमी + आज + सूर्यास्त आइकन + सूर्योदय आइकन + सेटिंग्स + इकाइयों + तापमान इकाइयाँ + पवन गति इकाइयाँ + वायुमंडलीय दबाव इकाइयाँ + मौसम के अनुसार संगीत. + वेदरनॉट के बारे में + प्रतिक्रिया + गोपनीयता नीति + क्रेडिट + अन्य सेटिंग्स + मौसम संगीत + हमें दान करें + रद्द करना + अपना शहर खोजें + देश + शहर + कोई स्थान नहीं मिला + लोड हो रहा है… + कुछ गलत हो गया! + भाषा + English + Hindi + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8c45fef..6fbb8a3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,7 +1,6 @@ Weathernaut - Something went wrong!\nDon\'t worry its not you, its us. Try later. No Internet Connection Search Cities Button App Settings Button @@ -16,15 +15,15 @@ Your signature - Default reply action + Default reply action Sync email periodically Download incoming attachments - Automatically download attachments for incoming emails + Automatically download attachments for incoming emails - Only download attachments when manually requested - Hello blank fragment + Only download attachments when manually requested + Hello blank fragment Pressure Wind Speed Humidity @@ -34,15 +33,15 @@ Settings Units Temperature units - °C - °F + °C + °F Wind speed units - hPa - atm + hPa + atm Atmospheric pressure units - m/s - km/h - mph + m/s + km/h + mph Music according to the weather. About Weathernaut Feedback @@ -53,10 +52,21 @@ Donate Us Cancel Search Your City - Add remove button + Add remove button Country City No locations found Loading… Something went wrong! + Language + Select any language + Something went wrong! Don\'t worry its not you, its us. Try later. + English + Hindi + + + + English + Hindi + \ No newline at end of file