Skip to content

Commit

Permalink
Merge pull request #3241 from deltachat/r10s/use-system-language
Browse files Browse the repository at this point in the history
use system language, support per-app-language-selection
  • Loading branch information
adbenitez committed Aug 25, 2024
2 parents fbc32e6 + 1af8bea commit c4698fc
Show file tree
Hide file tree
Showing 51 changed files with 136 additions and 480 deletions.
5 changes: 5 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,11 @@ android {
jniLibs.srcDirs = ['libs']
}
}

androidResources {
generateLocaleConfig true
}

lint {
abortOnError false
}
Expand Down
1 change: 0 additions & 1 deletion scripts/add-language.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ cp $RES/values/strings.xml $RES/values-$LANG/strings.xml
touch -t 201901010000 $RES/values-$LANG/strings.xml

echo "$RES/values-$LANG/strings.xml added:"
echo "- add the name to $RES/values/arrays.xml"
echo "- if needed, language mappings can be added to .tx/config"
echo "- pull translations using ./scripts/tx-pull-translations.sh"
echo " (on problems, 'tx -d pull' gives verbose output)"
11 changes: 2 additions & 9 deletions src/main/java/org/thoughtcrime/securesms/ApplicationContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,14 +44,13 @@
import org.thoughtcrime.securesms.notifications.InChatSounds;
import org.thoughtcrime.securesms.notifications.NotificationCenter;
import org.thoughtcrime.securesms.util.AndroidSignalProtocolLogger;
import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.Prefs;
import org.thoughtcrime.securesms.util.SignalProtocolLoggerProvider;
import org.thoughtcrime.securesms.util.Util;

import java.io.File;
import java.util.concurrent.TimeUnit;
//import com.squareup.leakcanary.LeakCanary;

public class ApplicationContext extends MultiDexApplication {
private static final String TAG = ApplicationContext.class.getSimpleName();
Expand Down Expand Up @@ -191,19 +190,13 @@ public void onLinkPropertiesChanged(@NonNull android.net.Network network, LinkPr
InChatSounds.getInstance(this);

dcLocationManager = new DcLocationManager(this);
try {
DynamicLanguage.setContextLocale(this, DynamicLanguage.getSelectedLocale(this));
}
catch (Exception e) {
e.printStackTrace();
}

DynamicTheme.setDefaultDayNightMode(this);

IntentFilter filter = new IntentFilter(Intent.ACTION_LOCALE_CHANGED);
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Util.localeChanged();
DcHelper.setStockTranslations(context);
}
}, filter);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,6 @@ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, Strin
if (key.equals(Prefs.THEME_PREF)) {
DynamicTheme.setDefaultDayNightMode(this);
recreate();
} else if (key.equals(Prefs.LANGUAGE_PREF)) {
finish();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,24 +15,19 @@
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;

import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.Prefs;

import java.lang.reflect.Field;
import java.util.Locale;


public abstract class BaseActionBarActivity extends AppCompatActivity {

private static final String TAG = BaseActionBarActivity.class.getSimpleName();
public static final String LOCALE_EXTRA = "locale_extra";
protected final DynamicLanguage dynamicLanguage = new DynamicLanguage();
protected DynamicTheme dynamicTheme = new DynamicTheme();

protected void onPreCreate() {
dynamicTheme.onCreate(this);
dynamicLanguage.onCreate(this);
}

@Override
Expand All @@ -49,14 +44,6 @@ protected void onResume() {
super.onResume();
initializeScreenshotSecurity();
dynamicTheme.onResume(this);
dynamicLanguage.onResume(this);
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// on orientation changes locale is reset in the context/activity so set locale as onCreate()
dynamicLanguage.onCreate(this);
}

@Override
Expand Down Expand Up @@ -121,18 +108,9 @@ protected <T extends Fragment> T initFragment(@IdRes int target,

protected <T extends Fragment> T initFragment(@IdRes int target,
@NonNull T fragment,
@Nullable Locale locale)
{
return initFragment(target, fragment, locale, null);
}

protected <T extends Fragment> T initFragment(@IdRes int target,
@NonNull T fragment,
@Nullable Locale locale,
@Nullable Bundle extras)
{
Bundle args = new Bundle();
args.putSerializable(LOCALE_EXTRA, locale);

if (extras != null) {
args.putAll(extras);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;

public abstract class BaseConversationListFragment extends Fragment implements ActionMode.Callback {
Expand Down Expand Up @@ -92,11 +91,11 @@ protected void initializeFabClickListener(boolean isActionMode) {
ArrayList<Uri> uris = getSharedUris(getActivity());
String message;
if (isForwarding(getActivity())) {
message = String.format(Locale.getDefault(), getString(R.string.ask_forward_multiple), selectedChats.size());
message = String.format(Util.getLocale(), getString(R.string.ask_forward_multiple), selectedChats.size());
} else if (!uris.isEmpty()) {
message = String.format(Locale.getDefault(), getString(R.string.share_multiple_attachments_multiple_chats), uris.size(), selectedChats.size());
message = String.format(Util.getLocale(), getString(R.string.share_multiple_attachments_multiple_chats), uris.size(), selectedChats.size());
} else {
message = String.format(Locale.getDefault(), getString(R.string.share_text_multiple_chats), selectedChats.size(), getSharedText(getActivity()));
message = String.format(Util.getLocale(), getString(R.string.share_text_multiple_chats), selectedChats.size(), getSharedText(getActivity()));
}
Context context = getContext();
if (context != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,12 @@
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.recipients.Recipient;

import java.util.Locale;
import java.util.Set;

public interface BindableConversationItem extends Unbindable {
void bind(@NonNull DcMsg messageRecord,
@NonNull DcChat dcChat,
@NonNull GlideRequests glideRequests,
@NonNull Locale locale,
@NonNull Set<DcMsg> batchSelected,
@NonNull Recipient recipients,
boolean pulseHighlight);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,13 @@
import org.thoughtcrime.securesms.database.model.ThreadRecord;
import org.thoughtcrime.securesms.mms.GlideRequests;

import java.util.Locale;
import java.util.Set;

public interface BindableConversationListItem extends Unbindable {

public void bind(@NonNull ThreadRecord thread,
int msgId,
@NonNull DcLot dcSummary,
@NonNull GlideRequests glideRequests, @NonNull Locale locale,
@NonNull GlideRequests glideRequests,
@NonNull Set<Long> selectedThreads, boolean batchMode);
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class BlockedContactsActivity extends PassphraseRequiredActionBarActivity
public void onCreate(Bundle bundle, boolean ready) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle(R.string.pref_blocked_contacts);
initFragment(android.R.id.content, new BlockedAndShareContactsFragment(), null, getIntent().getExtras());
initFragment(android.R.id.content, new BlockedAndShareContactsFragment(), getIntent().getExtras());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ protected void onCreate(Bundle state, boolean ready) {

getWindow().getDecorView().setBackgroundColor(color);

fragment = initFragment(R.id.fragment_content, new ConversationFragment(), dynamicLanguage.getCurrentLocale());
fragment = initFragment(R.id.fragment_content, new ConversationFragment());

initializeActionBar();
initializeViews();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.Locale;
import java.util.Map;
import java.util.Set;

Expand All @@ -66,7 +65,6 @@ public class ConversationAdapter <V extends View & BindableConversationItem>
{

private static final int MAX_CACHE_SIZE = 40;
private static final String TAG = ConversationAdapter.class.getSimpleName();
private final Map<Integer,SoftReference<DcMsg>> recordCache =
Collections.synchronizedMap(new LRUCache<Integer,SoftReference<DcMsg>>(MAX_CACHE_SIZE));

Expand All @@ -87,7 +85,6 @@ public class ConversationAdapter <V extends View & BindableConversationItem>

private final @Nullable ItemClickListener clickListener;
private final @NonNull GlideRequests glideRequests;
private final @NonNull Locale locale;
private final @NonNull Recipient recipient;
private final @NonNull LayoutInflater inflater;
private final @NonNull Context context;
Expand Down Expand Up @@ -213,12 +210,10 @@ interface ItemClickListener extends BindableConversationItem.EventListener {
public ConversationAdapter(@NonNull Context context,
@NonNull DcChat dcChat,
@NonNull GlideRequests glideRequests,
@NonNull Locale locale,
@Nullable ItemClickListener clickListener,
@NonNull Recipient recipient) {
this.dcChat = dcChat;
this.glideRequests = glideRequests;
this.locale = locale;
this.clickListener = clickListener;
this.recipient = recipient;
this.context = context;
Expand All @@ -243,7 +238,7 @@ public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
long elapsed = now - pulseHighlightingSince;
boolean pulseHighlight = (positionCurrentlyPulseHighlighting == position && elapsed < PULSE_HIGHLIGHT_MILLIS);

holder.getItem().bind(getMsg(position), dcChat, glideRequests, locale, batchSelected, recipient, pulseHighlight);
holder.getItem().bind(getMsg(position), dcChat, glideRequests, batchSelected, recipient, pulseHighlight);
}

@Override
Expand Down Expand Up @@ -374,7 +369,7 @@ public HeaderViewHolder onCreateHeaderViewHolder(ViewGroup parent) {
*/
@Override
public void onBindHeaderViewHolder(HeaderViewHolder viewHolder, int position) {
viewHolder.setText(DateUtils.getRelativeDate(getContext(), locale, getSortTimestamp(position)));
viewHolder.setText(DateUtils.getRelativeDate(getContext(), getSortTimestamp(position)));
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
Expand All @@ -85,7 +84,6 @@
public class ConversationFragment extends MessageSelectorFragment
{
private static final String TAG = ConversationFragment.class.getSimpleName();
private static final String KEY_LIMIT = "limit";

private static final int SCROLL_ANIMATION_THRESHOLD = 50;
private static final int CODE_ADD_EDIT_CONTACT = 77;
Expand All @@ -99,7 +97,6 @@ public class ConversationFragment extends MessageSelectorFragment
private long chatId;
private int startingPosition;
private boolean firstLoad;
private Locale locale;
private RecyclerView list;
private RecyclerView.ItemDecoration lastSeenDecoration;
private StickyHeaderDecoration dateDecoration;
Expand All @@ -115,7 +112,6 @@ public class ConversationFragment extends MessageSelectorFragment
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
this.locale = (Locale) getArguments().getSerializable(PassphraseRequiredActionBarActivity.LOCALE_EXTRA);
this.dcContext = DcHelper.getContext(getContext());

DcEventCenter eventCenter = DcHelper.getEventCenter(getContext());
Expand Down Expand Up @@ -285,7 +281,7 @@ private void initializeResources() {

private void initializeListAdapter() {
if (this.recipient != null && this.chatId != -1) {
ConversationAdapter adapter = new ConversationAdapter(getActivity(), this.recipient.getChat(), GlideApp.with(this), locale, selectionClickListener, this.recipient);
ConversationAdapter adapter = new ConversationAdapter(getActivity(), this.recipient.getChat(), GlideApp.with(this), selectionClickListener, this.recipient);
list.setAdapter(adapter);

if (dateDecoration != null) {
Expand Down
10 changes: 3 additions & 7 deletions src/main/java/org/thoughtcrime/securesms/ConversationItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@
import org.thoughtcrime.securesms.util.views.Stub;

import java.util.List;
import java.util.Locale;
import java.util.Set;

/**
Expand All @@ -97,7 +96,6 @@ public class ConversationItem extends BaseConversationItem
private static final int MAX_MEASURE_CALLS = 3;

private DcContact dcContact;
private Locale locale;
// Whether the sender's avatar and name should be shown (usually the case in group threads):
private boolean showSender;
private GlideRequests glideRequests;
Expand Down Expand Up @@ -172,13 +170,11 @@ protected void onFinishInflate() {
public void bind(@NonNull DcMsg messageRecord,
@NonNull DcChat dcChat,
@NonNull GlideRequests glideRequests,
@NonNull Locale locale,
@NonNull Set<DcMsg> batchSelected,
@NonNull Recipient recipients,
boolean pulseHighlight)
{
bind(messageRecord, dcChat, batchSelected, pulseHighlight, recipients);
this.locale = locale;
this.glideRequests = glideRequests;
this.showSender = (dcChat.isMultiUser() && !messageRecord.isOutgoing()) || messageRecord.getOverrideSenderName() != null;

Expand All @@ -196,7 +192,7 @@ public void bind(@NonNull DcMsg messageRecord,
setAuthor(messageRecord, showSender);
setMessageSpacing(context);
setReactions(messageRecord);
setFooter(messageRecord, locale);
setFooter(messageRecord);
setQuote(messageRecord);
if (Util.isTouchExplorationEnabled(context)) {
setContentDescription();
Expand Down Expand Up @@ -748,15 +744,15 @@ private void setGutterSizes(@NonNull DcMsg current, boolean showSender) {
}
}

private void setFooter(@NonNull DcMsg current, @NonNull Locale locale) {
private void setFooter(@NonNull DcMsg current) {
ViewUtil.updateLayoutParams(footer, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

footer.setVisibility(GONE);
if (mediaThumbnailStub.resolved()) mediaThumbnailStub.get().getFooter().setVisibility(GONE);

ConversationItemFooter activeFooter = getActiveFooter(current);
activeFooter.setVisibility(VISIBLE);
activeFooter.setMessageRecord(current, locale);
activeFooter.setMessageRecord(current);
}

private void setReactions(@NonNull DcMsg current) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ protected void onCreate(Bundle icicle, boolean ready) {
fragmentContainer = findViewById(R.id.fragment_container);

Bundle bundle = new Bundle();
conversationListFragment = initFragment(R.id.fragment_container, new ConversationListFragment(), dynamicLanguage.getCurrentLocale(), bundle);
conversationListFragment = initFragment(R.id.fragment_container, new ConversationListFragment(), bundle);

initializeSearchListener();

Expand Down Expand Up @@ -384,7 +384,7 @@ public void onSearchTextChange(String text) {

if (trimmed.length() > 0) {
if (searchFragment == null) {
searchFragment = SearchFragment.newInstance(dynamicLanguage.getCurrentLocale());
searchFragment = SearchFragment.newInstance();
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, searchFragment, null)
.commit();
Expand Down
Loading

0 comments on commit c4698fc

Please sign in to comment.