diff --git a/app/src/main/java/com/example/updateapp/Helpers/LocaleHelper.java b/app/src/main/java/com/example/updateapp/Helpers/LocaleHelper.java new file mode 100644 index 0000000..7dab015 --- /dev/null +++ b/app/src/main/java/com/example/updateapp/Helpers/LocaleHelper.java @@ -0,0 +1,47 @@ +package com.example.updateapp.Helpers; + +import android.content.Context; +import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.os.Build; + +import java.util.Locale; + +public class LocaleHelper { + private static final String PREFS_NAME = "app_prefs"; + private static final String KEY_LANGUAGE = "selected_language"; + + public static void setLocale(Context context, String languageCode) { + Locale locale = new Locale(languageCode); + Locale.setDefault(locale); + + // Save language preference + SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); + prefs.edit().putString(KEY_LANGUAGE, languageCode).apply(); + + // Note: Configuration update is handled by attachBaseContext when activity is recreated + // This avoids using deprecated updateConfiguration method + } + + public static Context attachBaseContext(Context context) { + String languageCode = getSavedLanguage(context); + Locale locale = new Locale(languageCode); + Locale.setDefault(locale); + + Configuration configuration = context.getResources().getConfiguration(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + configuration.setLocale(locale); + return context.createConfigurationContext(configuration); + } else { + configuration.locale = locale; + context.getResources().updateConfiguration(configuration, context.getResources().getDisplayMetrics()); + return context; + } + } + + public static String getSavedLanguage(Context context) { + SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); + return prefs.getString(KEY_LANGUAGE, "en"); // Default to English + } +} + diff --git a/app/src/main/java/com/example/updateapp/MainActivity.java b/app/src/main/java/com/example/updateapp/MainActivity.java index e3aa67d..1994849 100644 --- a/app/src/main/java/com/example/updateapp/MainActivity.java +++ b/app/src/main/java/com/example/updateapp/MainActivity.java @@ -5,6 +5,7 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentTransaction; +import com.example.updateapp.Helpers.LocaleHelper; import com.example.updateapp.databinding.ActivityMainBinding; import com.example.updateapp.utils.LocaleHelper; import com.example.updateapp.views.fragments.ChatbotFragment; diff --git a/app/src/main/java/com/example/updateapp/UpdateAppApplication.java b/app/src/main/java/com/example/updateapp/UpdateAppApplication.java new file mode 100644 index 0000000..d734aa6 --- /dev/null +++ b/app/src/main/java/com/example/updateapp/UpdateAppApplication.java @@ -0,0 +1,14 @@ +package com.example.updateapp; + +import android.app.Application; +import android.content.Context; + +import com.example.updateapp.Helpers.LocaleHelper; + +public class UpdateAppApplication extends Application { + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(LocaleHelper.attachBaseContext(base)); + } +} + diff --git a/app/src/main/java/com/example/updateapp/adapters/LanguageAdapter.java b/app/src/main/java/com/example/updateapp/adapters/LanguageAdapter.java index f58709e..b4f3246 100644 --- a/app/src/main/java/com/example/updateapp/adapters/LanguageAdapter.java +++ b/app/src/main/java/com/example/updateapp/adapters/LanguageAdapter.java @@ -79,4 +79,4 @@ public LanguageViewHolder(@NonNull View itemView) { imgSelected = itemView.findViewById(R.id.img_selected); } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/updateapp/models/LanguageModel.java b/app/src/main/java/com/example/updateapp/models/LanguageModel.java index 9133124..56ac767 100644 --- a/app/src/main/java/com/example/updateapp/models/LanguageModel.java +++ b/app/src/main/java/com/example/updateapp/models/LanguageModel.java @@ -44,4 +44,4 @@ public boolean isSelected() { public void setSelected(boolean selected) { isSelected = selected; } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/updateapp/views/activites/LanguageActivity.java b/app/src/main/java/com/example/updateapp/views/activites/LanguageActivity.java index 67fe6a6..6242f5d 100644 --- a/app/src/main/java/com/example/updateapp/views/activites/LanguageActivity.java +++ b/app/src/main/java/com/example/updateapp/views/activites/LanguageActivity.java @@ -7,6 +7,7 @@ import android.widget.Toast; import androidx.activity.EdgeToEdge; +import androidx.activity.OnBackPressedCallback; import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; @@ -32,6 +33,11 @@ public class LanguageActivity extends AppCompatActivity implements LanguageAdapt private TextView txtTitle; private int selectedPosition = 0; + private RecyclerView recyclerView; + private LanguageAdapter adapter; + private List languageList; + private String currentLanguageCode; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); diff --git a/app/src/main/java/com/example/updateapp/views/activites/LoginActivity.java b/app/src/main/java/com/example/updateapp/views/activites/LoginActivity.java index 8700ad9..cae6563 100644 --- a/app/src/main/java/com/example/updateapp/views/activites/LoginActivity.java +++ b/app/src/main/java/com/example/updateapp/views/activites/LoginActivity.java @@ -12,6 +12,7 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import com.example.updateapp.Helpers.LocaleHelper; import com.example.updateapp.MainActivity; import com.example.updateapp.R; import com.example.updateapp.databinding.ActivityLoginBinding; @@ -222,7 +223,7 @@ public void onComplete(@NonNull Task task) { this, getString(R.string.google_signin_error, e.getStatusCode(), e.getMessage()), Toast.LENGTH_LONG - ).show(); + ) .show(); } } } diff --git a/app/src/main/java/com/example/updateapp/views/activites/NewUpdateActivity.java b/app/src/main/java/com/example/updateapp/views/activites/NewUpdateActivity.java index 864daf2..4dbfc74 100644 --- a/app/src/main/java/com/example/updateapp/views/activites/NewUpdateActivity.java +++ b/app/src/main/java/com/example/updateapp/views/activites/NewUpdateActivity.java @@ -11,6 +11,7 @@ import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; +import com.example.updateapp.Helpers.LocaleHelper; import com.example.updateapp.R; import com.example.updateapp.databinding.ActivityNewUpdateBinding; import com.example.updateapp.utils.LocaleHelper; diff --git a/app/src/main/java/com/example/updateapp/views/activites/OTPActivity.java b/app/src/main/java/com/example/updateapp/views/activites/OTPActivity.java index 918ed05..becd5e8 100644 --- a/app/src/main/java/com/example/updateapp/views/activites/OTPActivity.java +++ b/app/src/main/java/com/example/updateapp/views/activites/OTPActivity.java @@ -16,6 +16,7 @@ import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; +import com.example.updateapp.Helpers.LocaleHelper; import com.example.updateapp.MainActivity; import com.example.updateapp.R; import com.example.updateapp.databinding.ActivityOtpactivityBinding; diff --git a/app/src/main/java/com/example/updateapp/views/activites/OnboardingActivity.java b/app/src/main/java/com/example/updateapp/views/activites/OnboardingActivity.java index 8f7312e..7c9d11d 100644 --- a/app/src/main/java/com/example/updateapp/views/activites/OnboardingActivity.java +++ b/app/src/main/java/com/example/updateapp/views/activites/OnboardingActivity.java @@ -13,6 +13,7 @@ import androidx.cardview.widget.CardView; import androidx.viewpager.widget.ViewPager; +import com.example.updateapp.Helpers.LocaleHelper; import com.example.updateapp.Helpers.SaveState; import com.example.updateapp.R; import com.example.updateapp.adapters.OnboardingAdapter; diff --git a/app/src/main/java/com/example/updateapp/views/activites/SignUpActivity.java b/app/src/main/java/com/example/updateapp/views/activites/SignUpActivity.java index 7829cf7..b128ac8 100644 --- a/app/src/main/java/com/example/updateapp/views/activites/SignUpActivity.java +++ b/app/src/main/java/com/example/updateapp/views/activites/SignUpActivity.java @@ -11,6 +11,7 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import com.example.updateapp.Helpers.LocaleHelper; import com.example.updateapp.R; import com.example.updateapp.databinding.ActivitySignUpBinding; import com.example.updateapp.utils.LocaleHelper; diff --git a/app/src/main/java/com/example/updateapp/views/activites/SplashScreenActivity.java b/app/src/main/java/com/example/updateapp/views/activites/SplashScreenActivity.java index b2534dd..d964788 100644 --- a/app/src/main/java/com/example/updateapp/views/activites/SplashScreenActivity.java +++ b/app/src/main/java/com/example/updateapp/views/activites/SplashScreenActivity.java @@ -11,6 +11,8 @@ import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; +import com.example.updateapp.Helpers.LocaleHelper; +import com.example.updateapp.Helpers.SaveState; import com.example.updateapp.R; import com.example.updateapp.utils.LocaleHelper; @@ -28,6 +30,9 @@ protected void onCreate(Bundle savedInstanceState) { ); setContentView(R.layout.activity_splash_screen); + // Check if language has been selected before + SaveState languageState = new SaveState(this, "LANGUAGE_SELECTED"); + boolean languageSelected = languageState.getState() == 1; new Timer().schedule(new TimerTask() { @Override @@ -35,14 +40,26 @@ public void run() { runOnUiThread(new Runnable() { @Override public void run() { - Intent intent = new Intent(); - intent.setClass(SplashScreenActivity.this, OnboardingActivity.class); + Intent intent; + if (!languageSelected) { + // Show language selection screen on first launch + intent = new Intent(SplashScreenActivity.this, LanguageActivity.class); + intent.putExtra("isFirstLaunch", true); + } else { + // Go to onboarding + intent = new Intent(SplashScreenActivity.this, OnboardingActivity.class); + } startActivity(intent); finish(); } }); } - },500); + }, 500); + } + + @Override + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(LocaleHelper.attachBaseContext(newBase)); } @Override diff --git a/app/src/main/res/layout/activity_language.xml b/app/src/main/res/layout/activity_language.xml index 7d11fac..5cf0495 100644 --- a/app/src/main/res/layout/activity_language.xml +++ b/app/src/main/res/layout/activity_language.xml @@ -73,7 +73,7 @@ android:layout_below="@+id/rel_top"> - \ No newline at end of file + diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index b77608a..d32a553 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -106,4 +106,4 @@ العودة إلى نسيت كلمة المرور يرجى التحقق من بريدك الإلكتروني - \ No newline at end of file + diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index bd9a7c5..a642fdb 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -106,4 +106,4 @@ ফিরে যান পাসওয়ার্ড ভুলে গেছেন অনুগ্রহ করে আপনার ইমেইল চেক করুন - \ No newline at end of file + diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index d402f79..79339b8 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -106,4 +106,4 @@ Volver a OLVIDÉ MI CONTRASEÑA Por Favor Revisa Tu Email - \ No newline at end of file + diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 76ceeb4..0e2eb60 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -106,4 +106,4 @@ Retour à MOT DE PASSE OUBLIÉ Veuillez Vérifier Votre Email - \ 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 index 780dcaf..125a9f1 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -106,4 +106,4 @@ वापस जाएं पासवर्ड भूल गए कृपया अपना ईमेल जांचें - \ No newline at end of file + diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index bc906cc..2eada52 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -106,4 +106,4 @@ Voltar para ESQUECI A SENHA Por Favor Verifique Seu Email - \ No newline at end of file + diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 61cd9fd..5a64647 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -106,4 +106,4 @@ Вернуться к ЗАБЫЛИ ПАРОЛЬ Пожалуйста, Проверьте Ваш Email - \ No newline at end of file + diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index 8417a1e..6095c7d 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -106,4 +106,4 @@ واپس جائیں پاس ورڈ بھول گئے براہ کرم اپنا ای میل چیک کریں - \ No newline at end of file + diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index a9234f9..4e7d2ea 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -106,4 +106,4 @@ 验证码验证失败 验证码错误: %1$s 身份验证错误:登录后未找到用户 - \ No newline at end of file +