From d8a14105c97abe508960400270486ee4bcd9c713 Mon Sep 17 00:00:00 2001 From: opyale Date: Sat, 13 Feb 2021 20:31:38 +0100 Subject: [PATCH] Fixing and improving scaling of images, improving performance by doing work that has to be done once only once and using different terminology. (#831) remove unknown case for editing Improve var names and code formatting Minor improvements. Restoring ACRA functionality. Fixing and improving scaling of images, improving performance by doing work that has to be done once only once and using different terminology. Co-authored-by: M M Arif Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/831 Reviewed-by: M M Arif Co-Authored-By: opyale Co-Committed-By: opyale --- app/src/main/AndroidManifest.xml | 7 +- .../org/mian/gitnex/actions/IssueActions.java | 2 +- .../mian/gitnex/activities/BaseActivity.java | 102 +-------- .../gitnex/activities/CreateFileActivity.java | 7 +- .../activities/CreateLabelActivity.java | 7 +- .../activities/CreateMilestoneActivity.java | 2 +- .../activities/CreateNewUserActivity.java | 7 +- .../CreateOrganizationActivity.java | 4 +- .../gitnex/activities/CreateRepoActivity.java | 3 +- .../activities/CreateTeamByOrgActivity.java | 5 +- .../gitnex/activities/DeepLinksActivity.java | 2 +- .../gitnex/activities/FileViewActivity.java | 204 +++++++++--------- .../mian/gitnex/activities/MainActivity.java | 2 +- .../SettingsFileViewerActivity.java | 2 +- .../activities/SettingsGeneralActivity.java | 4 +- .../SettingsNotificationsActivity.java | 8 +- .../gitnex/adapters/PullRequestsAdapter.java | 2 +- .../org/mian/gitnex/core/MainApplication.java | 127 +++++++++++ .../fragments/OrganizationsFragment.java | 2 +- .../java/org/mian/gitnex/helpers/AppUtil.java | 75 ++++--- .../java/org/mian/gitnex/helpers/Images.java | 34 +-- .../helpers/ssl/MemorizingActivity.java | 6 +- .../helpers/ssl/MemorizingTrustManager.java | 20 +- ...icationsMaster.java => Notifications.java} | 6 +- .../notifications/NotificationsWorker.java | 6 +- .../main/res/layout/activity_deeplinks.xml | 2 +- app/src/main/res/layout/activity_login.xml | 2 +- .../main/res/layout/activity_org_detail.xml | 4 +- .../main/res/layout/activity_repo_detail.xml | 12 +- .../layout/activity_settings_fileviewer.xml | 4 +- app/src/main/res/layout/badge_release.xml | 2 +- app/src/main/res/layout/fragment_about.xml | 4 +- .../main/res/layout/list_collaborators.xml | 4 +- app/src/main/res/layout/list_repositories.xml | 2 +- app/src/main/res/menu/drawer_menu.xml | 2 +- app/src/main/res/values/strings.xml | 72 +++---- 36 files changed, 387 insertions(+), 369 deletions(-) create mode 100644 app/src/main/java/org/mian/gitnex/core/MainApplication.java rename app/src/main/java/org/mian/gitnex/notifications/{NotificationsMaster.java => Notifications.java} (93%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 840c9b46..0eab7a1f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,9 +9,10 @@ fileDownloadActivityResultLauncher = registerForActivityResult( - new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - - @Override - public void onActivityResult(ActivityResult result) { + ActivityResultLauncher fileDownloadActivityResultLauncher = + registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { if (result.getResultCode() == Activity.RESULT_OK) { @@ -443,15 +440,14 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie outputStream.close(); Toasty.success(ctx, getString(R.string.downloadFileSaved)); - } catch(IOException e) { Log.e("errorFileDownloading", Objects.requireNonNull(e.getMessage())); } } - } - }); + + }); private void initCloseListener() { diff --git a/app/src/main/java/org/mian/gitnex/activities/MainActivity.java b/app/src/main/java/org/mian/gitnex/activities/MainActivity.java index 8923940b..764161ba 100644 --- a/app/src/main/java/org/mian/gitnex/activities/MainActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/MainActivity.java @@ -214,7 +214,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig Menu menu = navigationView.getMenu(); navNotifications = menu.findItem(R.id.nav_notifications); - ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); + ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigationDrawerOpen, R.string.navigationDrawerClose); drawer.addDrawerListener(toggle); drawer.addDrawerListener(new DrawerLayout.DrawerListener() { diff --git a/app/src/main/java/org/mian/gitnex/activities/SettingsFileViewerActivity.java b/app/src/main/java/org/mian/gitnex/activities/SettingsFileViewerActivity.java index 42f37e8c..d3e86f63 100644 --- a/app/src/main/java/org/mian/gitnex/activities/SettingsFileViewerActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/SettingsFileViewerActivity.java @@ -54,7 +54,7 @@ public class SettingsFileViewerActivity extends BaseActivity { AlertDialog.Builder fvtsBuilder = new AlertDialog.Builder(SettingsFileViewerActivity.this); - fvtsBuilder.setTitle(R.string.fileviewerSourceCodeThemeSelectorDialogTitle); + fvtsBuilder.setTitle(R.string.fileViewerSourceCodeThemeSelectorDialogTitle); fvtsBuilder.setCancelable(fileViewerSourceCodeThemesSelectedChoice != -1); fvtsBuilder.setSingleChoiceItems(fileViewerSourceCodeThemesList, fileViewerSourceCodeThemesSelectedChoice, (dialogInterfaceTheme, i) -> { diff --git a/app/src/main/java/org/mian/gitnex/activities/SettingsGeneralActivity.java b/app/src/main/java/org/mian/gitnex/activities/SettingsGeneralActivity.java index a96bbb2c..f63762a5 100644 --- a/app/src/main/java/org/mian/gitnex/activities/SettingsGeneralActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/SettingsGeneralActivity.java @@ -113,7 +113,7 @@ public class SettingsGeneralActivity extends BaseActivity { // home screen // link handler - String[] defaultScreen_ = {getResources().getString(R.string.generalDeepLinkSelectedText), getResources().getString(R.string.navRepos), getResources().getString(R.string.navOrgs), getResources().getString(R.string.pageTitleNotifications), getResources().getString(R.string.navExplore)}; + String[] defaultScreen_ = {getResources().getString(R.string.generalDeepLinkSelectedText), getResources().getString(R.string.navRepos), getResources().getString(R.string.navOrg), getResources().getString(R.string.pageTitleNotifications), getResources().getString(R.string.navExplore)}; defaultScreen = new ArrayList<>(Arrays.asList(defaultScreen_)); String[] linksArray = new String[defaultScreen.size()]; @@ -131,7 +131,7 @@ public class SettingsGeneralActivity extends BaseActivity { } else if(defaultLinkHandlerScreenSelectedChoice == 2) { - viewBinding.generalDeepLinkSelected.setText(getResources().getString(R.string.navOrgs)); + viewBinding.generalDeepLinkSelected.setText(getResources().getString(R.string.navOrg)); } else if(defaultLinkHandlerScreenSelectedChoice == 3) { diff --git a/app/src/main/java/org/mian/gitnex/activities/SettingsNotificationsActivity.java b/app/src/main/java/org/mian/gitnex/activities/SettingsNotificationsActivity.java index 3a231f34..b668625b 100644 --- a/app/src/main/java/org/mian/gitnex/activities/SettingsNotificationsActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/SettingsNotificationsActivity.java @@ -10,7 +10,7 @@ import org.mian.gitnex.R; import org.mian.gitnex.databinding.ActivitySettingsNotificationsBinding; import org.mian.gitnex.helpers.StaticGlobalVariables; import org.mian.gitnex.helpers.Toasty; -import org.mian.gitnex.notifications.NotificationsMaster; +import org.mian.gitnex.notifications.Notifications; /** * Template Author M M Arif @@ -43,7 +43,7 @@ public class SettingsNotificationsActivity extends BaseActivity { viewBinding.enableNotificationsMode.setOnCheckedChangeListener((buttonView, isChecked) -> { tinyDB.putBoolean("notificationsEnabled", isChecked); - if(!isChecked) NotificationsMaster.fireWorker(ctx); + if(!isChecked) Notifications.stopWorker(ctx); Toasty.info(appCtx, getResources().getString(R.string.settingsSave)); }); @@ -66,8 +66,8 @@ public class SettingsNotificationsActivity extends BaseActivity { tinyDB.putInt("pollingDelayMinutes", numberPicker.getValue()); - NotificationsMaster.fireWorker(ctx); - NotificationsMaster.hireWorker(ctx); + Notifications.stopWorker(ctx); + Notifications.startWorker(ctx); viewBinding.pollingDelaySelected.setText(String.format(getString(R.string.pollingDelaySelectedText), numberPicker.getValue())); Toasty.info(appCtx, getResources().getString(R.string.settingsSave)); diff --git a/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java index de24d474..0535ca4c 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java @@ -199,7 +199,7 @@ public class PullRequestsAdapter extends RecyclerView.Adapter, FileType> extensions = new HashMap<>(); + + // AppUtil should not be instantiated. + private AppUtil() {} + + static { + + extensions.put(Arrays.asList("jpg", "jpeg", "gif", "png", "ico"), FileType.IMAGE); + extensions.put(Arrays.asList("doc", "docx", "ppt", "pptx", "xls", "xlsx", "xlsm", "odt", "ott", "odf", "ods", "ots", "exe", "jar", "odg", "otg", "odp", "otp", "bin", "dmg", "psd", "xcf", "pdf"), FileType.DOCUMENT); + extensions.put(Arrays.asList("txt", "md", "json", "java", "go", "php", "c", "cc", "cpp", "h", "cxx", "cyc", "m", "cs", "bash", "sh", "bsh", "cv", "python", "perl", "pm", "rb", "ruby", "javascript", "coffee", "rc", "rs", "rust", "basic", "clj", "css", "dart", "lisp", "erl", "hs", "lsp", "rkt", "ss", "llvm", "ll", "lua", "matlab", "pascal", "r", "scala", "sql", "latex", "tex", "vb", "vbs", "vhd", "tcl", "wiki.meta", "yaml", "yml", "markdown", "xml", "proto", "regex", "py", "pl", "js", "html", "htm", "volt", "ini", "htaccess", "conf", "gitignore", "gradle", "txt", "properties", "bat", "twig", "cvs", "cmake", "in", "info", "spec", "m4", "am", "dist", "pam", "hx", "ts"), FileType.TEXT); + } + + public static FileType getFileType(String extension) { + + for(List e : extensions.keySet()) { + + if(e.contains(extension)) { + + return extensions.get(e); + } + } + + return FileType.UNKNOWN; + } + public static boolean hasNetworkConnection(Context context) { return NetworkStatusObserver.get(context).hasNetworkConnection(); @@ -57,19 +86,19 @@ public class AppUtil { return context.getPackageName().equals("org.mian.gitnex.pro"); } - public Boolean checkStringsWithAlphaNumeric(String str) { // [a-zA-Z0-9] + public static Boolean checkStringsWithAlphaNumeric(String str) { // [a-zA-Z0-9] return str.matches("^[\\w]+$"); } - public Boolean checkStrings(String str) { // [a-zA-Z0-9-_. ] + public static Boolean checkStrings(String str) { // [a-zA-Z0-9-_. ] return str.matches("^[\\w .-]+$"); } - public Boolean checkStringsWithAlphaNumericDashDotUnderscore(String str) { // [a-zA-Z0-9-_] + public static Boolean checkStringsWithAlphaNumericDashDotUnderscore(String str) { // [a-zA-Z0-9-_] return str.matches("^[\\w.-]+$"); } - public Boolean checkStringsWithDash(String str) { // [a-zA-Z0-9-_. ] + public static Boolean checkStringsWithDash(String str) { // [a-zA-Z0-9-_. ] return str.matches("^[\\w-]+$"); } @@ -168,7 +197,7 @@ public class AppUtil { } - public String encodeBase64(String str) { + public static String encodeBase64(String str) { String base64Str = str; if(!str.equals("")) { @@ -180,7 +209,7 @@ public class AppUtil { } - public String decodeBase64(String str) { + public static String decodeBase64(String str) { String base64Str = str; if(!str.equals("")) { @@ -192,39 +221,7 @@ public class AppUtil { } - public Boolean sourceCodeExtension(String ext) { - - String[] extValues = new String[]{"md", "json", "java", "go", "php", "c", "cc", "cpp", "h", "cxx", "cyc", "m", "cs", "bash", "sh", "bsh", "cv", "python", "perl", "pm", "rb", "ruby", "javascript", "coffee", "rc", "rs", "rust", "basic", "clj", "css", "dart", "lisp", "erl", "hs", "lsp", "rkt", "ss", "llvm", "ll", "lua", "matlab", "pascal", "r", "scala", "sql", "latex", "tex", "vb", "vbs", "vhd", "tcl", "wiki.meta", "yaml", "yml", "markdown", "xml", "proto", "regex", "py", "pl", "js", "html", "htm", "volt", "ini", "htaccess", "conf", "gitignore", "gradle", "txt", "properties", "bat", "twig", "cvs", "cmake", "in", "info", "spec", "m4", "am", "dist", "pam", "hx", "ts"}; - - return Arrays.asList(extValues).contains(ext); - - } - - public Boolean pdfExtension(String ext) { - - String[] extValues = new String[]{"pdf"}; - - return Arrays.asList(extValues).contains(ext); - - } - - public Boolean imageExtension(String ext) { - - String[] extValues = new String[]{"jpg", "jpeg", "gif", "png", "ico"}; - - return Arrays.asList(extValues).contains(ext); - - } - - public Boolean excludeFilesInFileViewerExtension(String ext) { - - String[] extValues = new String[]{"doc", "docx", "ppt", "pptx", "xls", "xlsx", "xlsm", "odt", "ott", "odf", "ods", "ots", "exe", "jar", "odg", "otg", "odp", "otp", "bin", "dmg", "psd", "xcf"}; - - return Arrays.asList(extValues).contains(ext); - - } - - public String getLastCharactersOfWord(String str, int count) { + public static String getLastCharactersOfWord(String str, int count) { return str.substring(str.length() - count); diff --git a/app/src/main/java/org/mian/gitnex/helpers/Images.java b/app/src/main/java/org/mian/gitnex/helpers/Images.java index 84f62ae4..d3aa82dd 100644 --- a/app/src/main/java/org/mian/gitnex/helpers/Images.java +++ b/app/src/main/java/org/mian/gitnex/helpers/Images.java @@ -9,24 +9,34 @@ import android.graphics.BitmapFactory; public class Images { - public static Bitmap scaleImage(byte[] imageData, int maxSizeWidth, int maxSizeScaledWidth) { + public static Bitmap scaleImage(byte[] imageData, int sizeLimit) { - Bitmap scaledImage; - Bitmap image = BitmapFactory.decodeByteArray(imageData, 0, imageData.length); - int orgWidth = image.getWidth(); - int orgHeight = image.getHeight(); + Bitmap original = BitmapFactory.decodeByteArray(imageData, 0, imageData.length); - if(orgWidth > maxSizeWidth) { + if(original.getHeight() > sizeLimit && original.getWidth() <= original.getHeight()) { + + double reductionPercentage = (double) sizeLimit / original.getHeight(); + + Bitmap scaled = Bitmap.createScaledBitmap(original, (int) (reductionPercentage * original.getWidth()), sizeLimit, false); + original.recycle(); + + return scaled; - int aspectRatio = orgWidth / orgHeight; - int scaledHeight = maxSizeScaledWidth * aspectRatio; - scaledImage = Bitmap.createScaledBitmap(image, maxSizeScaledWidth, scaledHeight, false); } - else { + else if(original.getWidth() > sizeLimit && original.getHeight() < original.getWidth()) { + + double reductionPercentage = (double) sizeLimit / original.getWidth(); + + Bitmap scaled = Bitmap.createScaledBitmap(original, sizeLimit, (int) (reductionPercentage * original.getHeight()), false); + original.recycle(); + + return scaled; - scaledImage = Bitmap.createScaledBitmap(image, orgWidth, orgHeight, false); } - return scaledImage; + // Image size does not exceed bounds. + return original; + } + } diff --git a/app/src/main/java/org/mian/gitnex/helpers/ssl/MemorizingActivity.java b/app/src/main/java/org/mian/gitnex/helpers/ssl/MemorizingActivity.java index 23395ad5..cf31106c 100644 --- a/app/src/main/java/org/mian/gitnex/helpers/ssl/MemorizingActivity.java +++ b/app/src/main/java/org/mian/gitnex/helpers/ssl/MemorizingActivity.java @@ -19,15 +19,15 @@ public class MemorizingActivity extends Activity { Intent intent = getIntent(); int decisionId = intent.getIntExtra("DECISION_INTENT_ID", MTMDecision.DECISION_INVALID); - int titleId = intent.getIntExtra("DECISION_TITLE_ID", R.string.mtm_accept_cert); + int titleId = intent.getIntExtra("DECISION_TITLE_ID", R.string.mtmAcceptCert); String cert = intent.getStringExtra("DECISION_INTENT_CERT"); AlertDialog.Builder builder = new AlertDialog.Builder(MemorizingActivity.this); builder.setTitle(titleId); builder.setMessage(cert); - builder.setPositiveButton(R.string.mtm_decision_always, (dialog, which) -> onSendResult(decisionId, MTMDecision.DECISION_ALWAYS)); - builder.setNeutralButton(R.string.mtm_decision_abort, (dialog, which) -> onSendResult(decisionId, MTMDecision.DECISION_ABORT)); + builder.setPositiveButton(R.string.mtmDecisionAlways, (dialog, which) -> onSendResult(decisionId, MTMDecision.DECISION_ALWAYS)); + builder.setNeutralButton(R.string.mtmDecisionAbort, (dialog, which) -> onSendResult(decisionId, MTMDecision.DECISION_ABORT)); builder.setOnCancelListener(dialog -> onSendResult(decisionId, MTMDecision.DECISION_ABORT)); builder.create().show(); diff --git a/app/src/main/java/org/mian/gitnex/helpers/ssl/MemorizingTrustManager.java b/app/src/main/java/org/mian/gitnex/helpers/ssl/MemorizingTrustManager.java index 2d06e043..cc5161c0 100644 --- a/app/src/main/java/org/mian/gitnex/helpers/ssl/MemorizingTrustManager.java +++ b/app/src/main/java/org/mian/gitnex/helpers/ssl/MemorizingTrustManager.java @@ -449,10 +449,10 @@ public class MemorizingTrustManager implements X509TrustManager { StringBuilder stringBuilder = new StringBuilder(); if(isPathException(e)) { - stringBuilder.append(context.getString(R.string.mtm_trust_anchor)); + stringBuilder.append(context.getString(R.string.mtmTrustAnchor)); } else if(isExpiredException(e)) { - stringBuilder.append(context.getString(R.string.mtm_cert_expired)); + stringBuilder.append(context.getString(R.string.mtmCertExpired)); } else { // get to the cause @@ -464,9 +464,9 @@ public class MemorizingTrustManager implements X509TrustManager { } stringBuilder.append("\n\n"); - stringBuilder.append(context.getString(R.string.mtm_connect_anyway)); + stringBuilder.append(context.getString(R.string.mtmConnectAnyway)); stringBuilder.append("\n\n"); - stringBuilder.append(context.getString(R.string.mtm_cert_details)); + stringBuilder.append(context.getString(R.string.mtmCertDetails)); for(X509Certificate c : chain) { certDetails(stringBuilder, c); @@ -479,7 +479,7 @@ public class MemorizingTrustManager implements X509TrustManager { StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(context.getString(R.string.mtm_hostname_mismatch, hostname)); + stringBuilder.append(context.getString(R.string.mtmHostnameMismatch, hostname)); stringBuilder.append("\n\n"); try { @@ -510,9 +510,9 @@ public class MemorizingTrustManager implements X509TrustManager { } stringBuilder.append("\n"); - stringBuilder.append(context.getString(R.string.mtm_connect_anyway)); + stringBuilder.append(context.getString(R.string.mtmConnectAnyway)); stringBuilder.append("\n\n"); - stringBuilder.append(context.getString(R.string.mtm_cert_details)); + stringBuilder.append(context.getString(R.string.mtmCertDetails)); certDetails(stringBuilder, cert); return stringBuilder.toString(); } @@ -544,7 +544,7 @@ public class MemorizingTrustManager implements X509TrustManager { private void startActivityNotification(Intent intent, int decisionId, String certName) { final PendingIntent call = PendingIntent.getActivity(context, 0, intent, 0); - final String mtmNotification = context.getString(R.string.mtm_notification); + final String mtmNotification = context.getString(R.string.mtmNotification); NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "ssl") .setSmallIcon(android.R.drawable.ic_lock_lock) @@ -596,7 +596,7 @@ public class MemorizingTrustManager implements X509TrustManager { private void interactCert(final X509Certificate[] chain, String authType, CertificateException cause) throws CertificateException { - if(interact(certChainMessage(chain, cause), R.string.mtm_accept_cert) == MTMDecision.DECISION_ALWAYS) { + if(interact(certChainMessage(chain, cause), R.string.mtmAcceptCert) == MTMDecision.DECISION_ALWAYS) { storeCert(chain[0]); // only store the server cert, not the whole chain } else { throw (cause); @@ -605,7 +605,7 @@ public class MemorizingTrustManager implements X509TrustManager { private boolean interactHostname(X509Certificate cert, String hostname) { - if(interact(hostNameMessage(cert, hostname), R.string.mtm_accept_server_name) == MTMDecision.DECISION_ALWAYS) { + if(interact(hostNameMessage(cert, hostname), R.string.mtmAcceptServerName) == MTMDecision.DECISION_ALWAYS) { storeCert(hostname, cert); return true; } diff --git a/app/src/main/java/org/mian/gitnex/notifications/NotificationsMaster.java b/app/src/main/java/org/mian/gitnex/notifications/Notifications.java similarity index 93% rename from app/src/main/java/org/mian/gitnex/notifications/NotificationsMaster.java rename to app/src/main/java/org/mian/gitnex/notifications/Notifications.java index aca4981e..37d90a5f 100644 --- a/app/src/main/java/org/mian/gitnex/notifications/NotificationsMaster.java +++ b/app/src/main/java/org/mian/gitnex/notifications/Notifications.java @@ -16,7 +16,7 @@ import java.util.concurrent.TimeUnit; * Author opyale */ -public class NotificationsMaster { +public class Notifications { private static int notificationsSupported = -1; @@ -30,12 +30,12 @@ public class NotificationsMaster { } } - public static void fireWorker(Context context) { + public static void stopWorker(Context context) { WorkManager.getInstance(context).cancelAllWorkByTag(context.getPackageName()); } - public static void hireWorker(Context context) { + public static void startWorker(Context context) { TinyDB tinyDB = TinyDB.getInstance(context); diff --git a/app/src/main/java/org/mian/gitnex/notifications/NotificationsWorker.java b/app/src/main/java/org/mian/gitnex/notifications/NotificationsWorker.java index 02724e12..1972f016 100644 --- a/app/src/main/java/org/mian/gitnex/notifications/NotificationsWorker.java +++ b/app/src/main/java/org/mian/gitnex/notifications/NotificationsWorker.java @@ -36,8 +36,8 @@ public class NotificationsWorker extends Worker { private static final int MAXIMUM_NOTIFICATIONS = 100; private static final long[] VIBRATION_PATTERN = new long[]{ 1000, 1000 }; - private Context context; - private TinyDB tinyDB; + private final Context context; + private final TinyDB tinyDB; public NotificationsWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) { @@ -157,7 +157,7 @@ public class NotificationsWorker extends Worker { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - NotificationChannel notificationChannel = new NotificationChannel(context.getPackageName(), context.getString(R.string.app_name), + NotificationChannel notificationChannel = new NotificationChannel(context.getPackageName(), context.getString(R.string.appName), NotificationManager.IMPORTANCE_DEFAULT); notificationChannel.setDescription(context.getString(R.string.notificationChannelDescription)); diff --git a/app/src/main/res/layout/activity_deeplinks.xml b/app/src/main/res/layout/activity_deeplinks.xml index c47935fd..298aef6f 100644 --- a/app/src/main/res/layout/activity_deeplinks.xml +++ b/app/src/main/res/layout/activity_deeplinks.xml @@ -94,7 +94,7 @@ android:id="@+id/organization" android:layout_width="match_parent" android:layout_height="60dp" - android:text="@string/navOrgs" + android:text="@string/navOrg" android:textColor="@color/btnTextColor" android:textSize="16sp" android:layout_marginTop="8dp" /> diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 2e9a4b17..d2bf34ea 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -22,7 +22,7 @@ android:layout_marginTop="20dp" android:layout_marginBottom="20dp" android:baselineAligned="false" - android:contentDescription="@string/app_name" + android:contentDescription="@string/appName" android:src="@mipmap/app_logo" /> + android:text="@string/tabTextInfo" /> + android:text="@string/tabTextLabels" /> + android:text="@string/tabTextInfo" /> + android:text="@string/tabTextFiles" /> + android:text="@string/tabTextReleases" /> + android:text="@string/tabTextMl" /> + android:text="@string/tabTextLabels" /> + android:text="@string/tabTextCollaborators" /> diff --git a/app/src/main/res/layout/activity_settings_fileviewer.xml b/app/src/main/res/layout/activity_settings_fileviewer.xml index 6ae20e31..3099c53e 100644 --- a/app/src/main/res/layout/activity_settings_fileviewer.xml +++ b/app/src/main/res/layout/activity_settings_fileviewer.xml @@ -59,7 +59,7 @@ android:layout_marginTop="10dp" android:layout_marginStart="44dp" android:layout_marginEnd="24dp" - android:text="@string/settingsFileviewerSourceCodeHeaderText" + android:text="@string/settingsFileViewerSourceCodeHeaderText" android:textColor="?attr/primaryTextColor"/> diff --git a/app/src/main/res/layout/badge_release.xml b/app/src/main/res/layout/badge_release.xml index 4167accc..37515ae1 100644 --- a/app/src/main/res/layout/badge_release.xml +++ b/app/src/main/res/layout/badge_release.xml @@ -11,7 +11,7 @@ android:gravity="center" android:textSize="16sp" app:textAllCaps="true" - android:text="@string/tab_text_releases" + android:text="@string/tabTextReleases" android:textColor="@color/lightGray" /> diff --git a/app/src/main/res/layout/list_repositories.xml b/app/src/main/res/layout/list_repositories.xml index 42373fbf..498c5785 100644 --- a/app/src/main/res/layout/list_repositories.xml +++ b/app/src/main/res/layout/list_repositories.xml @@ -107,7 +107,7 @@ android:id="@+id/repoFullName" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="@string/repoFullname" + android:text="@string/repoFullName" android:textColor="?attr/primaryTextColor" android:textSize="16sp" android:textStyle="bold" /> diff --git a/app/src/main/res/menu/drawer_menu.xml b/app/src/main/res/menu/drawer_menu.xml index 22a04944..bf084a1e 100644 --- a/app/src/main/res/menu/drawer_menu.xml +++ b/app/src/main/res/menu/drawer_menu.xml @@ -17,7 +17,7 @@ + android:title="@string/navOrg" /> - GitNex + GitNex gitnex@swatian.com Source code https://codeberg.org/gitnex/GitNex @@ -25,7 +25,7 @@ Repositories Profile Settings - Organizations + Organizations About Rate GitNex Logout @@ -62,7 +62,7 @@ Demo repo - Repo with ORG + Repo with ORG Demo description No repositories found @@ -87,8 +87,8 @@ Password LOGIN Instance URL - Open Navigation Drawer - Close Navigation Drawer + Open Navigation Drawer + Close Navigation Drawer Login to Gitea Protocol 1- Choose the correct protocol(https or http). \n2- Enter Gitea url e.g: try.gitea.io. \n3- If you have enabled 2FA for your account, enter the code in the OTP Code field. \n4- For HTTP basic auth use USERNAME@DOMAIN.COM in the URL field. @@ -136,14 +136,14 @@ Remove Instance has returned an error. Code\u0020 - RepoDetailActivity - Details - Files - Milestones - Releases - Branches - Labels - Collaborators + RepoDetailActivity + Details + Files + Milestones + Releases + Branches + Labels + Collaborators Pull Requests No issues found @@ -252,9 +252,9 @@ PDF Night Mode File Viewer Counter Badges - Source Code Theme - Sublime - Select Source Code Theme + Source Code Theme + Sublime + Select Source Code Theme Data Cache Size Data Cache Size 50 MB @@ -309,7 +309,7 @@ Cancel - OrgDetailActivity + OrgDetailActivity Repositories Teams Members @@ -397,15 +397,6 @@ Unsubscribe - - Select Entries - Please select at least - You can only select up to - option - options - Select all - - Repository Meta @@ -496,7 +487,7 @@ No files found Sorry this file cannot be viewed as API returned an error \u0020:\u0020 - + Files of this type cannot be edited Not supported @@ -556,7 +547,7 @@ Instance has returned an error - Unauthorized. Check your credentials and try again Token is required - Deleted Fork + Deleted Fork No pull requests found Creator :\u0020 Edit Pull Request @@ -586,7 +577,7 @@ Download This File Please wait for the file to load to memory File saved successfully - This file type is not supported in file viewer. Download it instead from the three dotted menu? + This file type is not supported in file viewer. Download it instead from the three dotted menu? Delete This File Edit This File Delete %1$s @@ -605,23 +596,23 @@ Changelog - Certificate Verification - Accept Unknown Certificate? - The server certificate is not signed by a known Certificate Authority - The server certificate is expired. - Accept Mismatching Server Name? - Server could not authenticate as \"%s\". The certificate is only valid for: - Do you want to connect anyway? - Certificate details: - Trust - Abort + Certificate Verification + Accept Unknown Certificate? + The server certificate is not signed by a known Certificate Authority + The server certificate is expired. + Accept Mismatching Server Name? + Server could not authenticate as \"%s\". The certificate is only valid for: + Do you want to connect anyway? + Certificate details: + Trust + Abort Subscribed successfully You have already subscribed Subscription failed Unsubscribed successfully You have already Unsubscribed - Un-Subscription failed + Un-Subscription failed Close Milestone Open Milestone @@ -741,4 +732,5 @@ Grey on Black White on Grey Dark on White +