Refactor: move translation to appearance

This commit is contained in:
M M Arif 2023-04-13 13:36:28 +05:00
parent 6fc664a418
commit 684a2f0776
8 changed files with 108 additions and 263 deletions

View File

@ -126,9 +126,6 @@
<activity
android:name=".activities.SettingsSecurityActivity"
android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"/>
<activity
android:name=".activities.SettingsTranslationActivity"
android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"/>
<activity
android:name=".activities.AddNewTeamMemberActivity"
android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"/>

View File

@ -11,6 +11,8 @@ import android.widget.TimePicker;
import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import java.util.LinkedHashMap;
import java.util.Locale;
import org.mian.gitnex.R;
import org.mian.gitnex.databinding.ActivitySettingsAppearanceBinding;
import org.mian.gitnex.fragments.SettingsFragment;
@ -29,6 +31,7 @@ public class SettingsAppearanceActivity extends BaseActivity {
private static String[] themeList;
private static int themeSelectedChoice = 0;
private View.OnClickListener onClickListener;
private static int langSelectedChoice = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
@ -39,6 +42,12 @@ public class SettingsAppearanceActivity extends BaseActivity {
ActivitySettingsAppearanceBinding.inflate(getLayoutInflater());
setContentView(activitySettingsAppearanceBinding.getRoot());
LinkedHashMap<String, String> lang = new LinkedHashMap<>();
lang.put("", getString(R.string.settingsLanguageSystem));
for (String langCode : getResources().getStringArray(R.array.languages)) {
lang.put(langCode, getLanguageDisplayName(langCode));
}
ImageView closeActivity = activitySettingsAppearanceBinding.close;
LinearLayout customFontFrame = activitySettingsAppearanceBinding.customFontFrame;
@ -196,6 +205,48 @@ public class SettingsAppearanceActivity extends BaseActivity {
materialAlertDialogBuilder.create().show();
});
// language selector dialog
LinearLayout langFrame = activitySettingsAppearanceBinding.langFrame;
activitySettingsAppearanceBinding.helpTranslate.setOnClickListener(
v12 -> {
AppUtil.openUrlInBrowser(this, getResources().getString(R.string.crowdInLink));
});
langSelectedChoice = tinyDB.getInt("langId");
activitySettingsAppearanceBinding.tvLanguageSelected.setText(
lang.get(lang.keySet().toArray(new String[0])[langSelectedChoice]));
// language dialog
langFrame.setOnClickListener(
view -> {
MaterialAlertDialogBuilder materialAlertDialogBuilder =
new MaterialAlertDialogBuilder(ctx)
.setTitle(R.string.settingsLanguageSelectorDialogTitle)
.setCancelable(langSelectedChoice != -1)
.setNeutralButton(getString(R.string.cancelButton), null)
.setSingleChoiceItems(
lang.values().toArray(new String[0]),
langSelectedChoice,
(dialogInterface, i) -> {
String selectedLanguage =
lang.keySet().toArray(new String[0])[i];
tinyDB.putInt("langId", i);
tinyDB.putString("locale", selectedLanguage);
SettingsFragment.refreshParent = true;
this.overridePendingTransition(0, 0);
dialogInterface.dismiss();
Toasty.success(
appCtx,
getResources()
.getString(R.string.settingsSave));
this.recreate();
});
materialAlertDialogBuilder.create().show();
});
}
private void initCloseListener() {
@ -255,4 +306,12 @@ public class SettingsAppearanceActivity extends BaseActivity {
requireActivity().recreate();
}
}
private static String getLanguageDisplayName(String langCode) {
Locale english = new Locale("en");
Locale translated = new Locale(langCode);
return String.format(
"%s (%s)",
translated.getDisplayName(translated), translated.getDisplayName(english));
}
}

View File

@ -1,103 +0,0 @@
package org.mian.gitnex.activities;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import java.util.LinkedHashMap;
import java.util.Locale;
import org.mian.gitnex.R;
import org.mian.gitnex.databinding.ActivitySettingsTranslationBinding;
import org.mian.gitnex.fragments.SettingsFragment;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.Toasty;
/**
* @author M M Arif
*/
public class SettingsTranslationActivity extends BaseActivity {
private static int langSelectedChoice = 0;
private View.OnClickListener onClickListener;
private static String getLanguageDisplayName(String langCode) {
Locale english = new Locale("en");
Locale translated = new Locale(langCode);
return String.format(
"%s (%s)",
translated.getDisplayName(translated), translated.getDisplayName(english));
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinkedHashMap<String, String> langs = new LinkedHashMap<>();
langs.put("", getString(R.string.settingsLanguageSystem));
for (String langCode : getResources().getStringArray(R.array.languages)) {
langs.put(langCode, getLanguageDisplayName(langCode));
}
ActivitySettingsTranslationBinding activitySettingsTranslationBinding =
ActivitySettingsTranslationBinding.inflate(getLayoutInflater());
setContentView(activitySettingsTranslationBinding.getRoot());
ImageView closeActivity = activitySettingsTranslationBinding.close;
initCloseListener();
closeActivity.setOnClickListener(onClickListener);
final TextView tvLanguageSelected =
activitySettingsTranslationBinding.tvLanguageSelected; // setter for en, fr
TextView helpTranslate = activitySettingsTranslationBinding.helpTranslate;
LinearLayout langFrame = activitySettingsTranslationBinding.langFrame;
helpTranslate.setOnClickListener(
v12 -> {
AppUtil.openUrlInBrowser(this, getResources().getString(R.string.crowdInLink));
});
langSelectedChoice = tinyDB.getInt("langId");
tvLanguageSelected.setText(
langs.get(langs.keySet().toArray(new String[0])[langSelectedChoice]));
// language dialog
langFrame.setOnClickListener(
view -> {
MaterialAlertDialogBuilder materialAlertDialogBuilder =
new MaterialAlertDialogBuilder(ctx)
.setTitle(R.string.settingsLanguageSelectorDialogTitle)
.setCancelable(langSelectedChoice != -1)
.setNeutralButton(getString(R.string.cancelButton), null)
.setSingleChoiceItems(
langs.values().toArray(new String[0]),
langSelectedChoice,
(dialogInterface, i) -> {
String selectedLanguage =
langs.keySet().toArray(new String[0])[i];
tinyDB.putInt("langId", i);
tinyDB.putString("locale", selectedLanguage);
SettingsFragment.refreshParent = true;
this.overridePendingTransition(0, 0);
dialogInterface.dismiss();
Toasty.success(
appCtx,
getResources()
.getString(R.string.settingsSave));
this.recreate();
});
materialAlertDialogBuilder.create().show();
});
}
private void initCloseListener() {
onClickListener = view -> finish();
}
}

View File

@ -19,7 +19,6 @@ import org.mian.gitnex.activities.SettingsAppearanceActivity;
import org.mian.gitnex.activities.SettingsGeneralActivity;
import org.mian.gitnex.activities.SettingsNotificationsActivity;
import org.mian.gitnex.activities.SettingsSecurityActivity;
import org.mian.gitnex.activities.SettingsTranslationActivity;
import org.mian.gitnex.databinding.CustomAboutDialogBinding;
import org.mian.gitnex.databinding.FragmentSettingsBinding;
import org.mian.gitnex.helpers.AppUtil;
@ -70,9 +69,6 @@ public class SettingsFragment extends Fragment {
fragmentSettingsBinding.notificationsFrame.setOnClickListener(
v1 -> startActivity(new Intent(ctx, SettingsNotificationsActivity.class)));
fragmentSettingsBinding.languagesFrame.setOnClickListener(
v1 -> startActivity(new Intent(ctx, SettingsTranslationActivity.class)));
fragmentSettingsBinding.rateAppFrame.setOnClickListener(rateApp -> rateThisApp());
fragmentSettingsBinding.aboutAppFrame.setOnClickListener(aboutApp -> showAboutAppDialog());

View File

@ -216,7 +216,7 @@
android:id="@+id/labelsInListFrame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dimen60dp"
android:layout_marginBottom="@dimen/dimen6dp"
android:background="?android:attr/selectableItemBackground"
android:orientation="horizontal"
android:padding="@dimen/dimen16dp">
@ -268,4 +268,51 @@
</RelativeLayout>
<LinearLayout
android:id="@+id/langFrame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:orientation="vertical"
android:padding="@dimen/dimen16dp">
<TextView
android:id="@+id/tvLanguageHeaderSelector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dimen24dp"
android:layout_marginEnd="@dimen/dimen24dp"
android:text="@string/settingsLanguageSelectorHeader"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen18sp"/>
<TextView
android:id="@+id/tvLanguageSelected"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dimen24dp"
android:layout_marginEnd="@dimen/dimen24dp"
android:text="@string/settingsLanguageSelectedHeaderDefault"
android:textColor="?attr/selectedTextColor"
android:textSize="@dimen/dimen16sp"/>
</LinearLayout>
<TextView
android:id="@+id/helpTranslate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autoLink="web"
android:background="?android:attr/selectableItemBackground"
android:paddingStart="@dimen/dimen40dp"
android:paddingTop="@dimen/dimen12dp"
android:paddingBottom="@dimen/dimen12dp"
android:paddingEnd="@dimen/dimen24dp"
android:layout_marginBottom="@dimen/dimen2dp"
android:text="@string/settingsHelpTranslateText"
android:textColor="@color/lightBlue"
android:textSize="@dimen/dimen16sp" />
</LinearLayout>

View File

@ -1,96 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/primaryBackgroundColor"
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dimen10dp"
android:theme="@style/Widget.AppCompat.SearchView"
app:elevation="@dimen/dimen0dp">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/primaryBackgroundColor">
<ImageView
android:id="@+id/close"
android:layout_width="@dimen/dimen26dp"
android:layout_height="@dimen/dimen26dp"
android:layout_marginStart="@dimen/dimen16dp"
android:layout_marginEnd="@dimen/dimen16dp"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:contentDescription="@string/close"
android:focusable="true"
android:gravity="center_vertical"
android:src="@drawable/ic_close"/>
<TextView
android:id="@+id/toolbar_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:maxLines="1"
android:text="@string/settingsLanguageHeaderText"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen20sp"/>
</com.google.android.material.appbar.MaterialToolbar>
</com.google.android.material.appbar.AppBarLayout>
<LinearLayout
android:id="@+id/langFrame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:orientation="vertical"
android:padding="@dimen/dimen16dp">
<TextView
android:id="@+id/tvLanguageHeaderSelector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dimen24dp"
android:layout_marginEnd="@dimen/dimen24dp"
android:text="@string/settingsLanguageSelectorHeader"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen18sp"/>
<TextView
android:id="@+id/tvLanguageSelected"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dimen24dp"
android:layout_marginEnd="@dimen/dimen24dp"
android:text="@string/settingsLanguageSelectedHeaderDefault"
android:textColor="?attr/selectedTextColor"
android:textSize="@dimen/dimen16sp"/>
</LinearLayout>
<TextView
android:id="@+id/helpTranslate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autoLink="web"
android:background="?android:attr/selectableItemBackground"
android:paddingStart="@dimen/dimen40dp"
android:paddingTop="@dimen/dimen16dp"
android:paddingEnd="@dimen/dimen24dp"
android:paddingBottom="@dimen/dimen16dp"
android:text="@string/settingsHelpTranslateText"
android:textColor="@color/lightBlue"
android:textSize="@dimen/dimen16sp"/>
</LinearLayout>

View File

@ -293,61 +293,6 @@
</LinearLayout>
<LinearLayout
android:id="@+id/languagesFrame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="15dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/generalImgContentText"
app:srcCompat="@drawable/ic_flag"/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/tvLanguages"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="12dp"
android:paddingEnd="12dp"
android:text="@string/settingsLanguageHeaderText"
android:textColor="?attr/primaryTextColor"
android:textSize="18sp"/>
<TextView
android:id="@+id/languagesHintText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:paddingStart="12dp"
android:paddingEnd="12dp"
android:text="@string/languagesHintText"
android:textColor="?attr/primaryTextColor"
android:textSize="12sp"/>
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/generalImgContentText"
app:srcCompat="@drawable/ic_chevron_right"/>
</LinearLayout>
<LinearLayout
android:id="@+id/rateAppFrame"
android:layout_width="match_parent"

View File

@ -622,7 +622,7 @@
<string name="resetCounterDialogMessage">Do you want to reset counter for repository %s?</string>
<string name="resetCounterAllDialogMessage">This will reset all the counters for this account repositories.</string>
<string name="appearanceHintText">Themes, fonts, badges</string>
<string name="appearanceHintText">Themes, fonts, badges, translation</string>
<string name="securityHintText">Biometric authentication, SSL certificates, cache</string>
<string name="languagesHintText">Languages</string>
<string name="reportsHintText">Crash reports</string>