Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<application
android:name=".UpdateAppApplication"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
Expand Down
54 changes: 54 additions & 0 deletions app/src/main/java/com/example/updateapp/Helpers/LocaleHelper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.example.updateapp.Helpers;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
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);

Configuration configuration = context.getResources().getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
configuration.setLocale(locale);
} else {
configuration.locale = locale;
}

context.getResources().updateConfiguration(configuration, context.getResources().getDisplayMetrics());

// Save language preference
SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
prefs.edit().putString(KEY_LANGUAGE, languageCode).apply();
}
Comment thread
gyanu2507 marked this conversation as resolved.
Resolved

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
}
}

7 changes: 7 additions & 0 deletions app/src/main/java/com/example/updateapp/MainActivity.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.example.updateapp;

import android.content.Context;
import android.os.Bundle;
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.views.fragments.ChatbotFragment;
import com.example.updateapp.views.fragments.ProfileFragment;
Expand Down Expand Up @@ -54,4 +56,9 @@ private void loadFragment(Fragment fragment) {
transaction.commit();
}

@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(LocaleHelper.attachBaseContext(newBase));
}

}
14 changes: 14 additions & 0 deletions app/src/main/java/com/example/updateapp/UpdateAppApplication.java
Original file line number Diff line number Diff line change
@@ -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));
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package com.example.updateapp.adapters;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.example.updateapp.R;
import com.example.updateapp.models.LanguageModel;

import java.util.List;

public class LanguageAdapter extends RecyclerView.Adapter<LanguageAdapter.ViewHolder> {

private List<LanguageModel> languageList;
private OnLanguageClickListener listener;

public interface OnLanguageClickListener {
void onLanguageClick(LanguageModel language);
}

public LanguageAdapter(List<LanguageModel> languageList, OnLanguageClickListener listener) {
this.languageList = languageList;
this.listener = listener;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_language, parent, false);
return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
LanguageModel language = languageList.get(position);
holder.languageName.setText(language.getLanguageName());
holder.selectedIcon.setVisibility(language.isSelected() ? View.VISIBLE : View.GONE);

holder.itemView.setOnClickListener(v -> {
if (listener != null) {
listener.onLanguageClick(language);
}
});
}

@Override
public int getItemCount() {
return languageList.size();
}

public void updateSelection(String selectedLanguageCode) {
for (LanguageModel language : languageList) {
language.setSelected(language.getLanguageCode().equals(selectedLanguageCode));
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved
}
notifyDataSetChanged();
}

public class ViewHolder extends RecyclerView.ViewHolder {
TextView languageName;
ImageView selectedIcon;

public ViewHolder(@NonNull View itemView) {
super(itemView);
languageName = itemView.findViewById(R.id.txt_language_name);
selectedIcon = itemView.findViewById(R.id.img_selected);
}
}
}

38 changes: 38 additions & 0 deletions app/src/main/java/com/example/updateapp/models/LanguageModel.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.example.updateapp.models;

public class LanguageModel {
private String languageCode;
private String languageName;
private boolean isSelected;

public LanguageModel(String languageCode, String languageName, boolean isSelected) {
this.languageCode = languageCode;
this.languageName = languageName;
this.isSelected = isSelected;
}

public String getLanguageCode() {
return languageCode;
}

public void setLanguageCode(String languageCode) {
this.languageCode = languageCode;
}

public String getLanguageName() {
return languageName;
}

public void setLanguageName(String languageName) {
this.languageName = languageName;
}

public boolean isSelected() {
return isSelected;
}

public void setSelected(boolean selected) {
isSelected = selected;
}
}

Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.example.updateapp.views.activites;

import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
Expand All @@ -9,6 +10,7 @@
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import com.example.updateapp.Helpers.LocaleHelper;
import com.example.updateapp.databinding.ActivityForgetBinding;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
Expand Down Expand Up @@ -81,4 +83,9 @@ public void onClick(View v) {
}
});
}

@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(LocaleHelper.attachBaseContext(newBase));
}
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,36 @@
package com.example.updateapp.views.activites;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.example.updateapp.Helpers.LocaleHelper;
import com.example.updateapp.Helpers.SaveState;
import com.example.updateapp.R;
import com.example.updateapp.adapters.LanguageAdapter;
import com.example.updateapp.models.LanguageModel;

import java.util.ArrayList;
import java.util.List;

public class LanguageActivity extends AppCompatActivity {

private RecyclerView recyclerView;
private LanguageAdapter adapter;
private List<LanguageModel> languageList;
private String currentLanguageCode;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Expand All @@ -22,5 +41,90 @@ protected void onCreate(Bundle savedInstanceState) {
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});

// Initialize views
recyclerView = findViewById(R.id.rev_langauge);
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved
TextView titleText = findViewById(R.id.txt_title);
ImageView doneButton = findViewById(R.id.img_done);

// Get current language
currentLanguageCode = LocaleHelper.getSavedLanguage(this);

// Setup RecyclerView
languageList = createLanguageList();
adapter = new LanguageAdapter(languageList, this::onLanguageSelected);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);

// Update selection UI
adapter.updateSelection(currentLanguageCode);

// Done button click handler
doneButton.setOnClickListener(v -> {
// Check if this is first launch
boolean isFirstLaunch = getIntent().getBooleanExtra("isFirstLaunch", false);
if (isFirstLaunch) {
// Mark language as selected and go to onboarding
SaveState languageState = new SaveState(this, "LANGUAGE_SELECTED");
languageState.setState(1);
Intent intent = new Intent(LanguageActivity.this, OnboardingActivity.class);
startActivity(intent);
}
finish();
});

// Set title
titleText.setText(getString(R.string.language));
}

private List<LanguageModel> createLanguageList() {
List<LanguageModel> list = new ArrayList<>();
String[] languageCodes = {"en", "zh", "hi", "es", "ar", "fr", "bn", "pt", "ru", "ur"};
String[] languageNames = {
getString(R.string.language_english),
getString(R.string.language_chinese),
getString(R.string.language_hindi),
getString(R.string.language_spanish),
getString(R.string.language_arabic),
getString(R.string.language_french),
getString(R.string.language_bengali),
getString(R.string.language_portuguese),
getString(R.string.language_russian),
getString(R.string.language_urdu)
};

for (int i = 0; i < languageCodes.length; i++) {
boolean isSelected = languageCodes[i].equals(currentLanguageCode);
list.add(new LanguageModel(languageCodes[i], languageNames[i], isSelected));
}

return list;
}

private void onLanguageSelected(LanguageModel language) {
String selectedLanguageCode = language.getLanguageCode();

if (!selectedLanguageCode.equals(currentLanguageCode)) {
// Save and apply new language
LocaleHelper.setLocale(this, selectedLanguageCode);

// Mark language as selected (for first launch)
SaveState languageState = new SaveState(this, "LANGUAGE_SELECTED");
languageState.setState(1);

// Update current language
currentLanguageCode = selectedLanguageCode;

// Update adapter selection
adapter.updateSelection(selectedLanguageCode);

// Restart activity to apply language changes immediately
recreate();
}
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved

@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(LocaleHelper.attachBaseContext(newBase));
}
}
Loading