Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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
53 changes: 53 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,53 @@
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));
}

}
13 changes: 13 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,13 @@
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,73 @@
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);
}
}
}
37 changes: 37 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,37 @@
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,17 +1,35 @@
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.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 +40,75 @@ 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 -> 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);

// Update current language
currentLanguageCode = selectedLanguageCode;

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

// Restart activity to apply language changes immediately
recreate();
}
}

@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(LocaleHelper.attachBaseContext(newBase));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,6 @@ public void onClick(View v) {
binding.relLang.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

Toast.makeText(requireContext(), "Coming Soon", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getContext(), LanguageActivity.class);
startActivity(intent);
}
Expand Down
26 changes: 26 additions & 0 deletions app/src/main/res/layout/item_language.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:background="?android:attr/selectableItemBackground">

<TextView
android:id="@+id/txt_language_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="English"
android:textSize="16sp"
android:textColor="@color/black" />

<ImageView
android:id="@+id/img_selected"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:src="@drawable/ic_done_24"
android:visibility="gone" />
Comment thread
gyanu2507 marked this conversation as resolved.
Resolved

</RelativeLayout>
16 changes: 16 additions & 0 deletions app/src/main/res/values-ar/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<resources>
<string name="app_name">UpdateApp</string>
<string name="hello_blank_fragment">Hello blank fragment</string>
Comment thread
gyanu2507 marked this conversation as resolved.
Resolved
<string name="default_web_client_id">610596201338-8jkqtv5msdu5q7mi0qs0gho2tu8a8esv.apps.googleusercontent.com</string>
<string name="language">اللغة</string>
<string name="language_english">الإنجليزية</string>
<string name="language_chinese">الصينية</string>
<string name="language_hindi">الهندية</string>
<string name="language_spanish">الإسبانية</string>
<string name="language_arabic">العربية</string>
<string name="language_french">الفرنسية</string>
<string name="language_bengali">البنغالية</string>
<string name="language_portuguese">البرتغالية</string>
<string name="language_russian">الروسية</string>
<string name="language_urdu">الأردية</string>
Comment thread
gyanu2507 marked this conversation as resolved.
Resolved
</resources>
16 changes: 16 additions & 0 deletions app/src/main/res/values-bn/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<resources>
<string name="app_name">UpdateApp</string>
<string name="hello_blank_fragment">Hello blank fragment</string>
<string name="default_web_client_id">610596201338-8jkqtv5msdu5q7mi0qs0gho2tu8a8esv.apps.googleusercontent.com</string>
<string name="language">ভাষা</string>
<string name="language_english">ইংরেজি</string>
<string name="language_chinese">চীনা</string>
<string name="language_hindi">হিন্দি</string>
<string name="language_spanish">স্প্যানিশ</string>
<string name="language_arabic">আরবি</string>
<string name="language_french">ফরাসি</string>
<string name="language_bengali">বাংলা</string>
<string name="language_portuguese">পর্তুগিজ</string>
<string name="language_russian">রাশিয়ান</string>
<string name="language_urdu">উর্দু</string>
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved
</resources>
Loading