diff --git a/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java b/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java index ce8ee3da..7680c9fe 100644 --- a/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java @@ -10,6 +10,7 @@ import java.util.Locale; import java.util.concurrent.Executor; import org.mian.gitnex.R; import org.mian.gitnex.core.MainApplication; +import org.mian.gitnex.helpers.AppDatabaseSettings; import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.helpers.TimeHelper; import org.mian.gitnex.helpers.TinyDB; @@ -34,7 +35,10 @@ public abstract class BaseActivity extends AppCompatActivity { this.appCtx = getApplicationContext(); this.tinyDB = TinyDB.getInstance(appCtx); - switch (tinyDB.getInt("themeId", 6)) { + AppDatabaseSettings.initDefaultSettings(ctx); + + switch (Integer.parseInt( + AppDatabaseSettings.getSettingsValue(ctx, AppDatabaseSettings.APP_THEME_KEY))) { case 0: setTheme(R.style.AppTheme); break; @@ -43,10 +47,18 @@ public abstract class BaseActivity extends AppCompatActivity { break; case 2: if (TimeHelper.timeBetweenHours( - tinyDB.getInt("darkThemeTimeHour", 18), - tinyDB.getInt("lightThemeTimeHour", 6), - tinyDB.getInt("darkThemeTimeMinute", 0), - tinyDB.getInt("lightThemeTimeMinute", 0))) { + Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_THEME_AUTO_DARK_HOUR_KEY)), + Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_THEME_AUTO_LIGHT_HOUR_KEY)), + Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_THEME_AUTO_DARK_MIN_KEY)), + Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_THEME_AUTO_LIGHT_MIN_KEY)))) { setTheme(R.style.AppTheme); } else { @@ -59,10 +71,18 @@ public abstract class BaseActivity extends AppCompatActivity { break; case 4: if (TimeHelper.timeBetweenHours( - tinyDB.getInt("darkThemeTimeHour", 18), - tinyDB.getInt("lightThemeTimeHour", 6), - tinyDB.getInt("darkThemeTimeMinute", 0), - tinyDB.getInt("lightThemeTimeMinute", 0))) { + Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_THEME_AUTO_DARK_HOUR_KEY)), + Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_THEME_AUTO_LIGHT_HOUR_KEY)), + Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_THEME_AUTO_DARK_MIN_KEY)), + Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_THEME_AUTO_LIGHT_MIN_KEY)))) { setTheme(R.style.AppTheme); } else { @@ -87,11 +107,14 @@ public abstract class BaseActivity extends AppCompatActivity { break; } - String locale = tinyDB.getString("locale"); - if (locale.isEmpty()) { + String[] locale = + AppDatabaseSettings.getSettingsValue(ctx, AppDatabaseSettings.APP_LOCALE_KEY) + .split("\\|"); + + if (locale[0].equals("0")) { AppUtil.setAppLocale(getResources(), Locale.getDefault().getLanguage()); } else { - AppUtil.setAppLocale(getResources(), locale); + AppUtil.setAppLocale(getResources(), locale[1]); } Notifications.startWorker(ctx); diff --git a/app/src/main/java/org/mian/gitnex/activities/OrganizationDetailActivity.java b/app/src/main/java/org/mian/gitnex/activities/OrganizationDetailActivity.java index 3ccd3b67..41acaddf 100644 --- a/app/src/main/java/org/mian/gitnex/activities/OrganizationDetailActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/OrganizationDetailActivity.java @@ -28,6 +28,7 @@ import org.mian.gitnex.fragments.OrganizationLabelsFragment; import org.mian.gitnex.fragments.OrganizationMembersFragment; import org.mian.gitnex.fragments.OrganizationRepositoriesFragment; import org.mian.gitnex.fragments.OrganizationTeamsFragment; +import org.mian.gitnex.helpers.AppDatabaseSettings; import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.helpers.ViewPager2Transformers; import org.mian.gitnex.structs.BottomSheetListener; @@ -129,7 +130,10 @@ public class OrganizationDetailActivity extends BaseActivity implements BottomSh viewPager.setAdapter(new OrganizationDetailActivity.ViewPagerAdapter(this)); ViewPager2Transformers.returnSelectedTransformer( - viewPager, tinyDB.getInt("fragmentTabsAnimationId", 0)); + viewPager, + Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_TABS_ANIMATION_KEY))); List tabsList = new ArrayList<>(); tabsList.add(getResources().getString(R.string.tabTextInfo)); diff --git a/app/src/main/java/org/mian/gitnex/activities/OrganizationTeamInfoActivity.java b/app/src/main/java/org/mian/gitnex/activities/OrganizationTeamInfoActivity.java index 5df687c5..5430003c 100644 --- a/app/src/main/java/org/mian/gitnex/activities/OrganizationTeamInfoActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/OrganizationTeamInfoActivity.java @@ -14,6 +14,7 @@ import org.mian.gitnex.databinding.ActivityOrgTeamInfoBinding; import org.mian.gitnex.fragments.OrganizationTeamInfoMembersFragment; import org.mian.gitnex.fragments.OrganizationTeamInfoPermissionsFragment; import org.mian.gitnex.fragments.OrganizationTeamInfoReposFragment; +import org.mian.gitnex.helpers.AppDatabaseSettings; import org.mian.gitnex.helpers.ViewPager2Transformers; /** @@ -37,6 +38,7 @@ public class OrganizationTeamInfoActivity extends BaseActivity { team = (Team) getIntent().getSerializableExtra("team"); + assert team != null; if (team.getName() != null && !team.getName().isEmpty()) { binding.toolbarTitle.setText(team.getName()); } else { @@ -68,7 +70,10 @@ public class OrganizationTeamInfoActivity extends BaseActivity { }); ViewPager2Transformers.returnSelectedTransformer( - binding.pager, tinyDB.getInt("fragmentTabsAnimationId", 0)); + binding.pager, + Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_TABS_ANIMATION_KEY))); new TabLayoutMediator( binding.tabs, diff --git a/app/src/main/java/org/mian/gitnex/activities/ProfileActivity.java b/app/src/main/java/org/mian/gitnex/activities/ProfileActivity.java index a44d1652..8e69354c 100644 --- a/app/src/main/java/org/mian/gitnex/activities/ProfileActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/ProfileActivity.java @@ -26,6 +26,7 @@ import org.mian.gitnex.fragments.profile.FollowingFragment; import org.mian.gitnex.fragments.profile.OrganizationsFragment; import org.mian.gitnex.fragments.profile.RepositoriesFragment; import org.mian.gitnex.fragments.profile.StarredRepositoriesFragment; +import org.mian.gitnex.helpers.AppDatabaseSettings; import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.helpers.ViewPager2Transformers; @@ -76,7 +77,10 @@ public class ProfileActivity extends BaseActivity implements BottomSheetListener viewPager.setAdapter(new ViewPagerAdapter(this)); ViewPager2Transformers.returnSelectedTransformer( - viewPager, tinyDB.getInt("fragmentTabsAnimationId", 0)); + viewPager, + Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_TABS_ANIMATION_KEY))); String[] tabTitles = { ctx.getResources().getString(R.string.tabTextInfo), diff --git a/app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java b/app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java index b2ab63f1..501b9aa4 100644 --- a/app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java @@ -50,6 +50,7 @@ import org.mian.gitnex.fragments.PullRequestsFragment; import org.mian.gitnex.fragments.ReleasesFragment; import org.mian.gitnex.fragments.RepoInfoFragment; import org.mian.gitnex.fragments.WikiFragment; +import org.mian.gitnex.helpers.AppDatabaseSettings; import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.helpers.ViewPager2Transformers; @@ -539,7 +540,10 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetListe viewPager.setAdapter(new ViewPagerAdapter(this)); ViewPager2Transformers.returnSelectedTransformer( - viewPager, tinyDB.getInt("fragmentTabsAnimationId", 0)); + viewPager, + Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_TABS_ANIMATION_KEY))); String[] tabTitles = { ctx.getResources().getString(R.string.tabTextInfo), @@ -578,7 +582,8 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetListe } } - if (tinyDB.getBoolean("enableCounterBadges", true)) { + if (Boolean.parseBoolean( + AppDatabaseSettings.getSettingsValue(ctx, AppDatabaseSettings.APP_COUNTER_KEY))) { @SuppressLint("InflateParams") View tabHeader2 = LayoutInflater.from(ctx).inflate(R.layout.badge_issue, null); if (textViewBadgeIssue == null) { diff --git a/app/src/main/java/org/mian/gitnex/activities/SettingsAppearanceActivity.java b/app/src/main/java/org/mian/gitnex/activities/SettingsAppearanceActivity.java index 53790374..f8f9a619 100644 --- a/app/src/main/java/org/mian/gitnex/activities/SettingsAppearanceActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/SettingsAppearanceActivity.java @@ -2,6 +2,7 @@ package org.mian.gitnex.activities; import android.os.Build; import android.os.Bundle; +import android.os.Handler; import android.view.View; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.timepicker.MaterialTimePicker; @@ -10,10 +11,10 @@ import java.util.Locale; import org.mian.gitnex.R; import org.mian.gitnex.databinding.ActivitySettingsAppearanceBinding; import org.mian.gitnex.fragments.SettingsFragment; +import org.mian.gitnex.helpers.AppDatabaseSettings; import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.helpers.FontsOverride; import org.mian.gitnex.helpers.SnackBar; -import org.mian.gitnex.helpers.TinyDB; /** * @author M M Arif @@ -21,12 +22,12 @@ import org.mian.gitnex.helpers.TinyDB; public class SettingsAppearanceActivity extends BaseActivity { private static String[] customFontList; - private static int customFontSelectedChoice = 0; + private static int customFontSelectedChoice; private static String[] themeList; - private static int themeSelectedChoice = 0; - private static int langSelectedChoice = 0; + private static int themeSelectedChoice; + private static int langSelectedChoice; private static String[] fragmentTabsAnimationList; - private static int fragmentTabsAnimationSelectedChoice = 0; + private static int fragmentTabsAnimationSelectedChoice; @Override public void onCreate(Bundle savedInstanceState) { @@ -38,7 +39,7 @@ public class SettingsAppearanceActivity extends BaseActivity { setContentView(activitySettingsAppearanceBinding.getRoot()); LinkedHashMap lang = new LinkedHashMap<>(); - lang.put("", getString(R.string.settingsLanguageSystem)); + lang.put("sys", getString(R.string.settingsLanguageSystem)); for (String langCode : getResources().getStringArray(R.array.languages)) { lang.put(langCode, getLanguageDisplayName(langCode)); } @@ -55,8 +56,14 @@ public class SettingsAppearanceActivity extends BaseActivity { activitySettingsAppearanceBinding.topAppBar.setNavigationOnClickListener(v -> finish()); - String lightMinute = String.valueOf(tinyDB.getInt("lightThemeTimeMinute")); - String lightHour = String.valueOf(tinyDB.getInt("lightThemeTimeHour")); + String lightMinute = + String.valueOf( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_THEME_AUTO_LIGHT_MIN_KEY)); + String lightHour = + String.valueOf( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_THEME_AUTO_LIGHT_HOUR_KEY)); if (lightMinute.length() == 1) { lightMinute = "0" + lightMinute; } @@ -64,8 +71,14 @@ public class SettingsAppearanceActivity extends BaseActivity { lightHour = "0" + lightHour; } - String darkMinute = String.valueOf(tinyDB.getInt("darkThemeTimeMinute")); - String darkHour = String.valueOf(tinyDB.getInt("darkThemeTimeHour")); + String darkMinute = + String.valueOf( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_THEME_AUTO_DARK_MIN_KEY)); + String darkHour = + String.valueOf( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_THEME_AUTO_DARK_HOUR_KEY)); if (darkMinute.length() == 1) { darkMinute = "0" + darkMinute; } @@ -73,9 +86,18 @@ public class SettingsAppearanceActivity extends BaseActivity { darkHour = "0" + darkHour; } - fragmentTabsAnimationSelectedChoice = tinyDB.getInt("fragmentTabsAnimationId", 0); - customFontSelectedChoice = tinyDB.getInt("customFontId", 1); - themeSelectedChoice = tinyDB.getInt("themeId", 6); // use system theme as default + fragmentTabsAnimationSelectedChoice = + Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_TABS_ANIMATION_KEY)); + customFontSelectedChoice = + Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_FONT_KEY)); + themeSelectedChoice = + Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_THEME_KEY)); activitySettingsAppearanceBinding.lightThemeSelectedTime.setText( ctx.getResources() @@ -100,12 +122,15 @@ public class SettingsAppearanceActivity extends BaseActivity { } activitySettingsAppearanceBinding.switchCounterBadge.setChecked( - tinyDB.getBoolean("enableCounterBadges", true)); + Boolean.parseBoolean( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_COUNTER_KEY))); // counter badge switcher activitySettingsAppearanceBinding.switchCounterBadge.setOnCheckedChangeListener( (buttonView, isChecked) -> { - tinyDB.putBoolean("enableCounterBadges", isChecked); + AppDatabaseSettings.updateSettingsValue( + ctx, String.valueOf(isChecked), AppDatabaseSettings.APP_COUNTER_KEY); SnackBar.success( ctx, findViewById(android.R.id.content), @@ -118,11 +143,16 @@ public class SettingsAppearanceActivity extends BaseActivity { // show labels in lists(issues, pr) - default is color dots activitySettingsAppearanceBinding.switchLabelsInListBadge.setChecked( - tinyDB.getBoolean("showLabelsInList", false)); + Boolean.parseBoolean( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_LABELS_IN_LIST_KEY))); activitySettingsAppearanceBinding.switchLabelsInListBadge.setOnCheckedChangeListener( (buttonView, isChecked) -> { - tinyDB.putBoolean("showLabelsInList", isChecked); + AppDatabaseSettings.updateSettingsValue( + ctx, + String.valueOf(isChecked), + AppDatabaseSettings.APP_LABELS_IN_LIST_KEY); SnackBar.success( ctx, findViewById(android.R.id.content), @@ -147,7 +177,10 @@ public class SettingsAppearanceActivity extends BaseActivity { themeSelectedChoice = i; activitySettingsAppearanceBinding.themeSelected .setText(themeList[i]); - tinyDB.putInt("themeId", i); + AppDatabaseSettings.updateSettingsValue( + ctx, + String.valueOf(i), + AppDatabaseSettings.APP_THEME_KEY); SettingsFragment.refreshParent = true; this.recreate(); @@ -182,13 +215,26 @@ public class SettingsAppearanceActivity extends BaseActivity { customFontSelectedChoice = i; activitySettingsAppearanceBinding.customFontSelected .setText(customFontList[i]); - tinyDB.putInt("customFontId", i); - AppUtil.typeface = null; // reset typeface - FontsOverride.setDefaultFont(this); + AppDatabaseSettings.updateSettingsValue( + ctx, + String.valueOf(i), + AppDatabaseSettings.APP_FONT_KEY); + + new Handler() + .postDelayed( + () -> { + AppUtil.typeface = + null; // reset typeface + FontsOverride.setDefaultFont( + this); + SettingsFragment.refreshParent = + true; + this.recreate(); + this.overridePendingTransition( + 0, 0); + }, + 1000); - SettingsFragment.refreshParent = true; - this.recreate(); - this.overridePendingTransition(0, 0); dialogInterfaceCustomFont.dismiss(); SnackBar.success( ctx, @@ -209,19 +255,20 @@ public class SettingsAppearanceActivity extends BaseActivity { .setSingleChoiceItems( fragmentTabsAnimationList, fragmentTabsAnimationSelectedChoice, - (dialogInterfaceCustomFont, i) -> { + (dialogInterfaceTabsAnimation, i) -> { fragmentTabsAnimationSelectedChoice = i; activitySettingsAppearanceBinding .fragmentTabsAnimationFrameSelected.setText( fragmentTabsAnimationList[i]); - tinyDB.putInt("fragmentTabsAnimationId", i); - AppUtil.typeface = null; // reset typeface - FontsOverride.setDefaultFont(this); + AppDatabaseSettings.updateSettingsValue( + ctx, + String.valueOf(i), + AppDatabaseSettings.APP_TABS_ANIMATION_KEY); SettingsFragment.refreshParent = true; this.recreate(); this.overridePendingTransition(0, 0); - dialogInterfaceCustomFont.dismiss(); + dialogInterfaceTabsAnimation.dismiss(); SnackBar.success( ctx, findViewById(android.R.id.content), @@ -237,7 +284,10 @@ public class SettingsAppearanceActivity extends BaseActivity { AppUtil.openUrlInBrowser( this, getResources().getString(R.string.crowdInLink))); - langSelectedChoice = tinyDB.getInt("langId"); + String[] locale = + AppDatabaseSettings.getSettingsValue(ctx, AppDatabaseSettings.APP_LOCALE_KEY) + .split("\\|"); + langSelectedChoice = Integer.parseInt(locale[0]); activitySettingsAppearanceBinding.tvLanguageSelected.setText( lang.get(lang.keySet().toArray(new String[0])[langSelectedChoice])); @@ -255,8 +305,10 @@ public class SettingsAppearanceActivity extends BaseActivity { (dialogInterface, i) -> { String selectedLanguage = lang.keySet().toArray(new String[0])[i]; - tinyDB.putInt("langId", i); - tinyDB.putString("locale", selectedLanguage); + AppDatabaseSettings.updateSettingsValue( + ctx, + i + "|" + selectedLanguage, + AppDatabaseSettings.APP_LOCALE_KEY); SettingsFragment.refreshParent = true; this.overridePendingTransition(0, 0); @@ -274,18 +326,28 @@ public class SettingsAppearanceActivity extends BaseActivity { public void lightTimePicker() { - TinyDB db = TinyDB.getInstance(ctx); - - int hour = db.getInt("lightThemeTimeHour"); - int minute = db.getInt("lightThemeTimeMinute"); + int hour = + Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_THEME_AUTO_LIGHT_HOUR_KEY)); + int minute = + Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_THEME_AUTO_LIGHT_MIN_KEY)); MaterialTimePicker materialTimePicker = new MaterialTimePicker.Builder().setHour(hour).setMinute(minute).build(); materialTimePicker.addOnPositiveButtonClickListener( selection -> { - db.putInt("lightThemeTimeHour", materialTimePicker.getHour()); - db.putInt("lightThemeTimeMinute", materialTimePicker.getMinute()); + AppDatabaseSettings.updateSettingsValue( + ctx, + String.valueOf(materialTimePicker.getHour()), + AppDatabaseSettings.APP_THEME_AUTO_LIGHT_HOUR_KEY); + AppDatabaseSettings.updateSettingsValue( + ctx, + String.valueOf(materialTimePicker.getMinute()), + AppDatabaseSettings.APP_THEME_AUTO_LIGHT_MIN_KEY); SettingsFragment.refreshParent = true; overridePendingTransition(0, 0); SnackBar.success( @@ -300,18 +362,28 @@ public class SettingsAppearanceActivity extends BaseActivity { public void darkTimePicker() { - TinyDB db = TinyDB.getInstance(ctx); - - int hour = db.getInt("darkThemeTimeHour"); - int minute = db.getInt("darkThemeTimeMinute"); + int hour = + Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_THEME_AUTO_DARK_HOUR_KEY)); + int minute = + Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + ctx, AppDatabaseSettings.APP_THEME_AUTO_DARK_MIN_KEY)); MaterialTimePicker materialTimePicker = new MaterialTimePicker.Builder().setHour(hour).setMinute(minute).build(); materialTimePicker.addOnPositiveButtonClickListener( selection -> { - db.putInt("darkThemeTimeHour", materialTimePicker.getHour()); - db.putInt("darkThemeTimeMinute", materialTimePicker.getMinute()); + AppDatabaseSettings.updateSettingsValue( + ctx, + String.valueOf(materialTimePicker.getHour()), + AppDatabaseSettings.APP_THEME_AUTO_DARK_HOUR_KEY); + AppDatabaseSettings.updateSettingsValue( + ctx, + String.valueOf(materialTimePicker.getMinute()), + AppDatabaseSettings.APP_THEME_AUTO_DARK_MIN_KEY); SettingsFragment.refreshParent = true; overridePendingTransition(0, 0); SnackBar.success( diff --git a/app/src/main/java/org/mian/gitnex/adapters/ExploreIssuesAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/ExploreIssuesAdapter.java index 0b5cb5a4..6b0ab2f1 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/ExploreIssuesAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/ExploreIssuesAdapter.java @@ -27,6 +27,7 @@ import org.mian.gitnex.R; import org.mian.gitnex.activities.IssueDetailActivity; import org.mian.gitnex.activities.ProfileActivity; import org.mian.gitnex.clients.PicassoService; +import org.mian.gitnex.helpers.AppDatabaseSettings; import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.helpers.ClickListener; import org.mian.gitnex.helpers.ColorInverter; @@ -239,7 +240,9 @@ public class ExploreIssuesAdapter extends RecyclerView.Adapter if (issue.getLabels() != null) { - if (!tinyDb.getBoolean("showLabelsInList", false)) { // default + if (!Boolean.parseBoolean( + AppDatabaseSettings.getSettingsValue( + context, AppDatabaseSettings.APP_LABELS_IN_LIST_KEY))) { labelsScrollViewWithText.setVisibility(View.GONE); labelsScrollViewDots.setVisibility(View.VISIBLE); 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 b29390de..b9519781 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java @@ -31,6 +31,7 @@ import org.mian.gitnex.activities.IssueDetailActivity; import org.mian.gitnex.activities.ProfileActivity; import org.mian.gitnex.activities.RepoDetailActivity; import org.mian.gitnex.clients.PicassoService; +import org.mian.gitnex.helpers.AppDatabaseSettings; import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.helpers.ClickListener; import org.mian.gitnex.helpers.ColorInverter; @@ -206,7 +207,9 @@ public class PullRequestsAdapter extends RecyclerView.Adapter requireActivity().finish()); @@ -62,7 +60,10 @@ public class PullRequestChangesFragment extends Fragment { new String[] {getString(R.string.tabTextFiles), getString(R.string.commits)}; ViewPager2Transformers.returnSelectedTransformer( - binding.container, tinyDB.getInt("fragmentTabsAnimationId", 0)); + binding.container, + Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + getContext(), AppDatabaseSettings.APP_TABS_ANIMATION_KEY))); new TabLayoutMediator( binding.tabs, diff --git a/app/src/main/java/org/mian/gitnex/helpers/AppDatabaseSettings.java b/app/src/main/java/org/mian/gitnex/helpers/AppDatabaseSettings.java new file mode 100644 index 00000000..81cb9748 --- /dev/null +++ b/app/src/main/java/org/mian/gitnex/helpers/AppDatabaseSettings.java @@ -0,0 +1,185 @@ +package org.mian.gitnex.helpers; + +import android.content.Context; +import org.mian.gitnex.database.api.AppSettingsApi; +import org.mian.gitnex.database.api.BaseApi; +import org.mian.gitnex.database.models.AppSettings; + +/** + * @author M M Arif + */ +public class AppDatabaseSettings { + + public static String APP_THEME_KEY = "app_theme"; + public static String APP_THEME_DEFAULT = "6"; + public static String APP_THEME_AUTO_LIGHT_HOUR_KEY = "app_theme_auto_light_hour"; + public static String APP_THEME_AUTO_LIGHT_HOUR_DEFAULT = "6"; + public static String APP_THEME_AUTO_LIGHT_MIN_KEY = "app_theme_auto_light_min"; + public static String APP_THEME_AUTO_LIGHT_MIN_DEFAULT = "0"; + public static String APP_THEME_AUTO_DARK_HOUR_KEY = "app_theme_auto_dark_hour"; + public static String APP_THEME_AUTO_DARK_HOUR_DEFAULT = "18"; + public static String APP_THEME_AUTO_DARK_MIN_KEY = "app_theme_auto_dark_min"; + public static String APP_THEME_AUTO_DARK_MIN_DEFAULT = "0"; + public static String APP_FONT_KEY = "app_font"; + public static String APP_FONT_DEFAULT = "3"; + public static String APP_TABS_ANIMATION_KEY = "app_tabs_animation"; + public static String APP_TABS_ANIMATION_DEFAULT = "0"; + public static String APP_LOCALE_KEY = "app_locale"; + public static String APP_LOCALE_KEY_DEFAULT = "0|sys"; + public static String APP_COUNTER_KEY = "app_counter_badges"; + public static String APP_COUNTER_DEFAULT = "true"; + public static String APP_LABELS_IN_LIST_KEY = "app_labels_in_list"; + public static String APP_LABELS_IN_LIST_DEFAULT = "false"; + public static String APP_LINK_HANDLER_KEY = "app_link_handler"; + public static String APP_LINK_HANDLER_DEFAULT = "0"; + public static String APP_HOME_SCREEN_KEY = "app_home_screen"; + public static String APP_HOME_SCREEN_DEFAULT = "3"; + public static String APP_CUSTOM_BROWSER_KEY = "app_custom_browser_tab"; + public static String APP_CUSTOM_BROWSER_DEFAULT = "true"; + public static String APP_DRAFTS_DELETION_KEY = "app_drafts_deletion"; + public static String APP_DRAFTS_DELETION_DEFAULT = "true"; + public static String APP_CRASH_REPORTS_KEY = "app_crash_reports"; + public static String APP_CRASH_REPORTS_DEFAULT = "false"; + public static String APP_CE_SYNTAX_HIGHLIGHT_KEY = "app_ce_syntax_highlight"; + public static String APP_CE_SYNTAX_HIGHLIGHT_DEFAULT = "0"; + public static String APP_CE_INDENTATION_KEY = "app_ce_indentation"; + public static String APP_CE_INDENTATION_DEFAULT = "0"; + public static String APP_CE_TABS_WIDTH_KEY = "app_ce_tabs_width"; + public static String APP_CE_TABS_WIDTH_DEFAULT = "1"; + public static String APP_NOTIFICATIONS_KEY = "app_notifications"; + public static String APP_NOTIFICATIONS_DEFAULT = "true"; + public static String APP_NOTIFICATIONS_DELAY_KEY = "app_notifications_delay"; + public static String APP_NOTIFICATIONS_DELAY_DEFAULT = "0"; + public static String APP_BIOMETRIC_KEY = "app_biometric"; + public static String APP_BIOMETRIC_DEFAULT = "false"; + public static String APP_DATA_CACHE_KEY = "app_data_cache"; + public static String APP_DATA_CACHE_DEFAULT = "1"; + public static String APP_IMAGES_CACHE_KEY = "app_images_cache"; + public static String APP_IMAGES_CACHE_DEFAULT = "1"; + + public static void initDefaultSettings(Context ctx) { + + AppSettingsApi appSettingsApi = BaseApi.getInstance(ctx, AppSettingsApi.class); + assert appSettingsApi != null; + + if (appSettingsApi.fetchSettingCountByKey(APP_THEME_KEY) == 0) { + appSettingsApi.insertNewSetting(APP_THEME_KEY, APP_THEME_DEFAULT, APP_THEME_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_THEME_AUTO_LIGHT_HOUR_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_THEME_AUTO_LIGHT_HOUR_KEY, + APP_THEME_AUTO_LIGHT_HOUR_DEFAULT, + APP_THEME_AUTO_LIGHT_HOUR_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_THEME_AUTO_LIGHT_MIN_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_THEME_AUTO_LIGHT_MIN_KEY, + APP_THEME_AUTO_LIGHT_MIN_DEFAULT, + APP_THEME_AUTO_LIGHT_MIN_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_THEME_AUTO_DARK_HOUR_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_THEME_AUTO_DARK_HOUR_KEY, + APP_THEME_AUTO_DARK_HOUR_DEFAULT, + APP_THEME_AUTO_DARK_HOUR_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_THEME_AUTO_DARK_MIN_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_THEME_AUTO_DARK_MIN_KEY, + APP_THEME_AUTO_DARK_MIN_DEFAULT, + APP_THEME_AUTO_DARK_MIN_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_FONT_KEY) == 0) { + appSettingsApi.insertNewSetting(APP_FONT_KEY, APP_FONT_DEFAULT, APP_FONT_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_TABS_ANIMATION_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_TABS_ANIMATION_KEY, APP_TABS_ANIMATION_DEFAULT, APP_TABS_ANIMATION_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_LOCALE_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_LOCALE_KEY, APP_LOCALE_KEY_DEFAULT, APP_LOCALE_KEY_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_COUNTER_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_COUNTER_KEY, APP_COUNTER_DEFAULT, APP_COUNTER_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_LABELS_IN_LIST_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_LABELS_IN_LIST_KEY, APP_LABELS_IN_LIST_DEFAULT, APP_LABELS_IN_LIST_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_LINK_HANDLER_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_LINK_HANDLER_KEY, APP_LINK_HANDLER_DEFAULT, APP_LINK_HANDLER_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_HOME_SCREEN_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_HOME_SCREEN_KEY, APP_HOME_SCREEN_DEFAULT, APP_HOME_SCREEN_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_CUSTOM_BROWSER_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_CUSTOM_BROWSER_KEY, APP_CUSTOM_BROWSER_DEFAULT, APP_CUSTOM_BROWSER_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_DRAFTS_DELETION_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_DRAFTS_DELETION_KEY, + APP_DRAFTS_DELETION_DEFAULT, + APP_DRAFTS_DELETION_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_CRASH_REPORTS_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_CRASH_REPORTS_KEY, APP_CRASH_REPORTS_DEFAULT, APP_CRASH_REPORTS_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_CE_SYNTAX_HIGHLIGHT_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_CE_SYNTAX_HIGHLIGHT_KEY, + APP_CE_SYNTAX_HIGHLIGHT_DEFAULT, + APP_CE_SYNTAX_HIGHLIGHT_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_CE_INDENTATION_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_CE_INDENTATION_KEY, APP_CE_INDENTATION_DEFAULT, APP_CE_INDENTATION_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_CE_TABS_WIDTH_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_CE_TABS_WIDTH_KEY, APP_CE_TABS_WIDTH_DEFAULT, APP_CE_TABS_WIDTH_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_NOTIFICATIONS_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_NOTIFICATIONS_KEY, APP_NOTIFICATIONS_DEFAULT, APP_NOTIFICATIONS_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_NOTIFICATIONS_DELAY_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_NOTIFICATIONS_DELAY_KEY, + APP_NOTIFICATIONS_DELAY_DEFAULT, + APP_NOTIFICATIONS_DELAY_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_BIOMETRIC_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_BIOMETRIC_KEY, APP_BIOMETRIC_DEFAULT, APP_BIOMETRIC_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_DATA_CACHE_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_DATA_CACHE_KEY, APP_DATA_CACHE_DEFAULT, APP_DATA_CACHE_DEFAULT); + } + if (appSettingsApi.fetchSettingCountByKey(APP_IMAGES_CACHE_KEY) == 0) { + appSettingsApi.insertNewSetting( + APP_IMAGES_CACHE_KEY, APP_IMAGES_CACHE_DEFAULT, APP_IMAGES_CACHE_DEFAULT); + } + } + + public static String getSettingsValue(Context ctx, String key) { + + AppSettingsApi appSettingsApi = BaseApi.getInstance(ctx, AppSettingsApi.class); + assert appSettingsApi != null; + AppSettings appSettings = appSettingsApi.fetchSettingByKey(key); + return appSettings.getSettingValue(); + } + + public static void updateSettingsValue(Context ctx, String val, String key) { + + AppSettingsApi appSettingsApi = BaseApi.getInstance(ctx, AppSettingsApi.class); + assert appSettingsApi != null; + appSettingsApi.updateSettingValueByKey(val, key); + } +} diff --git a/app/src/main/java/org/mian/gitnex/helpers/AppUtil.java b/app/src/main/java/org/mian/gitnex/helpers/AppUtil.java index 01f82be8..cf69b9bf 100644 --- a/app/src/main/java/org/mian/gitnex/helpers/AppUtil.java +++ b/app/src/main/java/org/mian/gitnex/helpers/AppUtil.java @@ -403,7 +403,7 @@ public class AppUtil { public static String encodeBase64(String str) { String base64Str = str; - if (!str.equals("")) { + if (!str.isEmpty()) { byte[] data = str.getBytes(StandardCharsets.UTF_8); base64Str = Base64.encodeToString(data, Base64.DEFAULT); } @@ -602,8 +602,11 @@ public class AppUtil { } public static Typeface getTypeface(Context context) { + if (typeface == null) { - switch (TinyDB.getInstance(context).getInt("customFontId", -1)) { + switch (Integer.parseInt( + AppDatabaseSettings.getSettingsValue( + context, AppDatabaseSettings.APP_FONT_KEY))) { case 0: typeface = Typeface.createFromAsset(context.getAssets(), "fonts/roboto.ttf"); break;