diff --git a/app/src/main/java/fr/ralala/hexviewer/ApplicationCtx.java b/app/src/main/java/fr/ralala/hexviewer/ApplicationCtx.java index 49a2002..ef8af97 100644 --- a/app/src/main/java/fr/ralala/hexviewer/ApplicationCtx.java +++ b/app/src/main/java/fr/ralala/hexviewer/ApplicationCtx.java @@ -61,6 +61,7 @@ public class ApplicationCtx extends Application { private boolean mSequential = false; private String mDefaultMemoryThreshold; private boolean mDefaultPartialOpenButWholeFileIsOpened; + private Configuration mConfiguration = null; @Override public void onCreate() { @@ -153,6 +154,16 @@ public void onCreate() { setApplicationLanguage(mLanguage); } + public void setConfiguration(Configuration cfg) { + mConfiguration = cfg; + } + + public Configuration getConfiguration() { + if (mConfiguration == null) + mConfiguration = getResources().getConfiguration(); + return mConfiguration; + } + public Queue getLogBuffer() { if (mLogs == null) mLogs = new CircularFifoQueue<>(CIRCULAR_BUFFER_DEPTH); diff --git a/app/src/main/java/fr/ralala/hexviewer/ui/activities/AbstractBaseMainActivity.java b/app/src/main/java/fr/ralala/hexviewer/ui/activities/AbstractBaseMainActivity.java index 7aacd71..b827163 100644 --- a/app/src/main/java/fr/ralala/hexviewer/ui/activities/AbstractBaseMainActivity.java +++ b/app/src/main/java/fr/ralala/hexviewer/ui/activities/AbstractBaseMainActivity.java @@ -4,6 +4,7 @@ import android.app.SearchManager; import android.content.Context; import android.content.pm.PackageManager; +import android.content.res.Configuration; import android.os.Build; import android.os.Bundle; import android.text.InputType; @@ -12,6 +13,7 @@ import android.widget.SearchView; import androidx.activity.OnBackPressedCallback; +import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; @@ -84,7 +86,7 @@ protected void onCreate(final Bundle savedInstanceState) { Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE }, 1); - + getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) { @Override public void handleOnBackPressed() { @@ -93,6 +95,17 @@ public void handleOnBackPressed() { }); } + /** + * Called by the system when the device configuration changes while your activity is running. + * + * @param newConfig The new device configuration. This value cannot be null. + */ + @Override + public void onConfigurationChanged(@NonNull Configuration newConfig) { + super.onConfigurationChanged(newConfig); + mApp.setConfiguration(newConfig); + } + protected void setSearchView(MenuItem si) { // Searchable configuration SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); diff --git a/app/src/main/java/fr/ralala/hexviewer/ui/activities/LineUpdateActivity.java b/app/src/main/java/fr/ralala/hexviewer/ui/activities/LineUpdateActivity.java index 2f8152d..36090b8 100644 --- a/app/src/main/java/fr/ralala/hexviewer/ui/activities/LineUpdateActivity.java +++ b/app/src/main/java/fr/ralala/hexviewer/ui/activities/LineUpdateActivity.java @@ -128,7 +128,8 @@ protected void onCreate(final Bundle savedInstanceState) { mEtInputHex = findViewById(R.id.etInputHex); mTilInputHex = findViewById(R.id.tilInputHex); - if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { + Configuration cfg = mApp.getConfiguration(); + if (cfg.orientation == Configuration.ORIENTATION_LANDSCAPE) { mEtInputHex.setTextSize(mApp.getListSettingsLineEditLandscape().getFontSize()); } else { mEtInputHex.setTextSize(mApp.getListSettingsLineEditPortrait().getFontSize()); @@ -233,6 +234,7 @@ public void onDestroy() { @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); + mApp.setConfiguration(newConfig); mAdapterSource.notifyDataSetChanged(); mAdapterResult.notifyDataSetChanged(); // Checks the orientation of the screen diff --git a/app/src/main/java/fr/ralala/hexviewer/ui/activities/LogsActivity.java b/app/src/main/java/fr/ralala/hexviewer/ui/activities/LogsActivity.java index 8111317..6432023 100644 --- a/app/src/main/java/fr/ralala/hexviewer/ui/activities/LogsActivity.java +++ b/app/src/main/java/fr/ralala/hexviewer/ui/activities/LogsActivity.java @@ -2,12 +2,14 @@ import android.content.Context; import android.content.Intent; +import android.content.res.Configuration; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.ArrayAdapter; import android.widget.ListView; +import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; @@ -37,6 +39,7 @@ public class LogsActivity extends AppCompatActivity { private CircularFifoQueue mCfq = null; private String mContent = null; private ListView mLogs = null; + private ApplicationCtx mApp = null; /** * Starts an activity. @@ -55,7 +58,7 @@ public static void startActivity(final Context c) { public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_logs); - ApplicationCtx app = (ApplicationCtx) getApplicationContext(); + mApp = (ApplicationCtx) getApplicationContext(); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { @@ -65,7 +68,7 @@ public void onCreate(final Bundle savedInstanceState) { mLogs = findViewById(R.id.logs); - mCfq = (CircularFifoQueue) app.getLogBuffer(); + mCfq = (CircularFifoQueue) mApp.getLogBuffer(); final String[] lines = mCfq.toArray(new String[]{}); final StringBuilder sb = new StringBuilder(); for (final String s : lines) @@ -76,6 +79,17 @@ public void onCreate(final Bundle savedInstanceState) { R.layout.listview_simple_row, R.id.label1, lines)); } + /** + * Detects the configuration changed. + * + * @param newConfig The new device configuration. + */ + @Override + public void onConfigurationChanged(@NonNull Configuration newConfig) { + super.onConfigurationChanged(newConfig); + mApp.setConfiguration(newConfig); + } + /** * Called when the options menu is created. * diff --git a/app/src/main/java/fr/ralala/hexviewer/ui/activities/MainActivity.java b/app/src/main/java/fr/ralala/hexviewer/ui/activities/MainActivity.java index 1d37ba7..c6d10c8 100644 --- a/app/src/main/java/fr/ralala/hexviewer/ui/activities/MainActivity.java +++ b/app/src/main/java/fr/ralala/hexviewer/ui/activities/MainActivity.java @@ -82,6 +82,7 @@ protected void onCreate(final Bundle savedInstanceState) { ApplicationCtx.addLog(this, "Main", "Application started with language: '" + ((ApplicationCtx) getApplicationContext()).getApplicationLanguage(this) + "'"); + mApp.setConfiguration(getResources().getConfiguration()); mUnDoRedo = new UnDoRedo(this); mPopup = new MainPopupWindow(this, mUnDoRedo, this::onPopupItemClick); @@ -311,6 +312,7 @@ public void refreshTitle() { @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); + mApp.setConfiguration(newConfig); if (mPayloadPlainSwipe.isVisible()) { mPayloadPlainSwipe.refresh(); } else if (mPayloadHexHelper.isVisible()) diff --git a/app/src/main/java/fr/ralala/hexviewer/ui/activities/PartialOpenActivity.java b/app/src/main/java/fr/ralala/hexviewer/ui/activities/PartialOpenActivity.java index f69ccb4..710b022 100644 --- a/app/src/main/java/fr/ralala/hexviewer/ui/activities/PartialOpenActivity.java +++ b/app/src/main/java/fr/ralala/hexviewer/ui/activities/PartialOpenActivity.java @@ -2,6 +2,7 @@ import android.content.Context; import android.content.Intent; +import android.content.res.Configuration; import android.graphics.Typeface; import android.os.Bundle; import android.text.Editable; @@ -20,6 +21,7 @@ import android.widget.TextView; import androidx.activity.result.ActivityResultLauncher; +import androidx.annotation.NonNull; import androidx.annotation.StringRes; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; @@ -236,6 +238,17 @@ protected void onCreate(final Bundle savedInstanceState) { evaluateSize(); } + /** + * Called by the system when the device configuration changes while your activity is running. + * + * @param newConfig The new device configuration. This value cannot be null. + */ + @Override + public void onConfigurationChanged(@NonNull Configuration newConfig) { + super.onConfigurationChanged(newConfig); + ((ApplicationCtx) getApplicationContext()).setConfiguration(newConfig); + } + /** * Called when the options menu is clicked. * diff --git a/app/src/main/java/fr/ralala/hexviewer/ui/activities/RecentlyOpenActivity.java b/app/src/main/java/fr/ralala/hexviewer/ui/activities/RecentlyOpenActivity.java index b5775d7..28ca38a 100644 --- a/app/src/main/java/fr/ralala/hexviewer/ui/activities/RecentlyOpenActivity.java +++ b/app/src/main/java/fr/ralala/hexviewer/ui/activities/RecentlyOpenActivity.java @@ -2,6 +2,7 @@ import android.content.Context; import android.content.Intent; +import android.content.res.Configuration; import android.os.Bundle; import android.view.MenuItem; @@ -100,6 +101,17 @@ protected void onCreate(final Bundle savedInstanceState) { setTitle(getString(R.string.action_recently_open_title)); } + /** + * Called by the system when the device configuration changes while your activity is running. + * + * @param newConfig The new device configuration. This value cannot be null. + */ + @Override + public void onConfigurationChanged(@NonNull Configuration newConfig) { + super.onConfigurationChanged(newConfig); + mApp.setConfiguration(newConfig); + } + /** * Called when the options item is clicked (home). * diff --git a/app/src/main/java/fr/ralala/hexviewer/ui/adapters/HexTextArrayAdapter.java b/app/src/main/java/fr/ralala/hexviewer/ui/adapters/HexTextArrayAdapter.java index b1e69af..d86d157 100644 --- a/app/src/main/java/fr/ralala/hexviewer/ui/adapters/HexTextArrayAdapter.java +++ b/app/src/main/java/fr/ralala/hexviewer/ui/adapters/HexTextArrayAdapter.java @@ -113,7 +113,7 @@ private void applyUpdated(final TextView tv, final LineEntry fd) { */ protected String getTextAccordingToUserConfig(final String text) { String txt; - Configuration cfg = getContext().getResources().getConfiguration(); + Configuration cfg = mApp.getConfiguration(); if (mUserConfigLandscape != null && cfg.orientation == Configuration.ORIENTATION_LANDSCAPE && mUserConfigLandscape.isDataColumnNotDisplayed()) txt = text.substring(0, mApp.getNbBytesPerLine() == SysHelper.MAX_BY_ROW_16 ? SysHelper.MAX_BYTES_ROW_16 : SysHelper.MAX_BYTES_ROW_8); else if (mUserConfigPortrait != null && cfg.orientation == Configuration.ORIENTATION_PORTRAIT && mUserConfigPortrait.isDataColumnNotDisplayed()) diff --git a/app/src/main/java/fr/ralala/hexviewer/ui/adapters/LineUpdateHexArrayAdapter.java b/app/src/main/java/fr/ralala/hexviewer/ui/adapters/LineUpdateHexArrayAdapter.java index 7c09908..ca73107 100644 --- a/app/src/main/java/fr/ralala/hexviewer/ui/adapters/LineUpdateHexArrayAdapter.java +++ b/app/src/main/java/fr/ralala/hexviewer/ui/adapters/LineUpdateHexArrayAdapter.java @@ -200,7 +200,7 @@ View inflateView(final View convertView) { * @param tv TextView */ private void applyUserConfig(final TextView tv) { - Configuration cfg = getContext().getResources().getConfiguration(); + Configuration cfg = mApp.getConfiguration(); ListSettings landscape = mApp.getListSettingsLineEditLandscape(); ListSettings portrait = mApp.getListSettingsLineEditPortrait(); if (landscape != null && cfg.orientation == Configuration.ORIENTATION_LANDSCAPE) { diff --git a/app/src/main/java/fr/ralala/hexviewer/ui/adapters/SearchableListArrayAdapter.java b/app/src/main/java/fr/ralala/hexviewer/ui/adapters/SearchableListArrayAdapter.java index 050df57..dc33fe5 100644 --- a/app/src/main/java/fr/ralala/hexviewer/ui/adapters/SearchableListArrayAdapter.java +++ b/app/src/main/java/fr/ralala/hexviewer/ui/adapters/SearchableListArrayAdapter.java @@ -17,6 +17,7 @@ import java.util.List; import java.util.Set; +import fr.ralala.hexviewer.ApplicationCtx; import fr.ralala.hexviewer.models.LineEntries; import fr.ralala.hexviewer.models.LineEntry; import fr.ralala.hexviewer.ui.adapters.config.UserConfig; @@ -208,7 +209,7 @@ public void addAll(@NonNull Collection collection) { * @param tv TextView */ protected void applyUserConfig(final TextView tv) { - Configuration cfg = getContext().getResources().getConfiguration(); + Configuration cfg = ((ApplicationCtx) getContext().getApplicationContext()).getConfiguration(); if (mUserConfigLandscape != null && cfg.orientation == Configuration.ORIENTATION_LANDSCAPE) { tv.setTextSize(mUserConfigLandscape.getFontSize()); ViewGroup.LayoutParams lp = tv.getLayoutParams(); diff --git a/app/src/main/java/fr/ralala/hexviewer/ui/utils/UIHelper.java b/app/src/main/java/fr/ralala/hexviewer/ui/utils/UIHelper.java index e86aded..999d6c4 100644 --- a/app/src/main/java/fr/ralala/hexviewer/ui/utils/UIHelper.java +++ b/app/src/main/java/fr/ralala/hexviewer/ui/utils/UIHelper.java @@ -32,6 +32,7 @@ import com.google.android.material.snackbar.Snackbar; import com.google.android.material.textfield.TextInputLayout; +import fr.ralala.hexviewer.ApplicationCtx; import fr.ralala.hexviewer.R; import fr.ralala.hexviewer.models.FileData; import fr.ralala.hexviewer.ui.adapters.config.UserConfig; @@ -147,7 +148,8 @@ public static int getTextWidth(final Context context, final UserConfig landscape TextView tv = new TextView(context); tv.setText(text); tv.setTypeface(monospace); - Configuration cfg = context.getResources().getConfiguration(); + ApplicationCtx app = (ApplicationCtx) context.getApplicationContext(); + Configuration cfg = app.getConfiguration(); if (landscape != null && cfg.orientation == Configuration.ORIENTATION_LANDSCAPE) { fontSize = landscape.getFontSize(); } else if (portrait != null) { diff --git a/app/src/main/java/fr/ralala/hexviewer/utils/SysHelper.java b/app/src/main/java/fr/ralala/hexviewer/utils/SysHelper.java index 8d872fc..819a13e 100644 --- a/app/src/main/java/fr/ralala/hexviewer/utils/SysHelper.java +++ b/app/src/main/java/fr/ralala/hexviewer/utils/SysHelper.java @@ -17,6 +17,7 @@ import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; +import fr.ralala.hexviewer.ApplicationCtx; import fr.ralala.hexviewer.R; import fr.ralala.hexviewer.models.LineEntry; @@ -68,8 +69,8 @@ public static boolean isRTL(final View view) { * @return boolean */ public static boolean isRTL(final Context context) { - final Configuration config = context.getResources().getConfiguration(); - return config.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL; + Configuration cfg = ((ApplicationCtx) context.getApplicationContext()).getConfiguration(); + return cfg.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL; } /**