diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2d24b0d0..ac021f42 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -114,10 +114,6 @@
android:name=".activities.CommitDetailActivity"
android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"
android:theme="@android:style/Theme.NoTitleBar" />
-
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 f64e2d96..6b5296f2 100644
--- a/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java
@@ -116,17 +116,20 @@ public abstract class BaseActivity extends AppCompatActivity {
super.onAuthenticationError(errorCode, errString);
// Authentication error, close the app
- if(errorCode == BiometricPrompt.ERROR_USER_CANCELED ||
- errorCode == BiometricPrompt.ERROR_NEGATIVE_BUTTON) {
- finish();
- }
+ finish();
}
// Authentication succeeded, continue to app
- @Override public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) { super.onAuthenticationSucceeded(result); tinyDB.putBoolean("biometricLifeCycle", true); }
+ @Override
+ public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {
+ super.onAuthenticationSucceeded(result);
+ tinyDB.putBoolean("biometricLifeCycle", true);
+ }
// Authentication failed, close the app
- @Override public void onAuthenticationFailed() { super.onAuthenticationFailed(); }
+ @Override public void onAuthenticationFailed() {
+ super.onAuthenticationFailed();
+ }
});
diff --git a/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java b/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java
index cfc717d7..a537b8cb 100644
--- a/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java
@@ -184,24 +184,7 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
}, 500));
- Typeface myTypeface;
-
- switch(tinyDB.getInt("customFontId", -1)) {
-
- case 1:
- myTypeface = Typeface.createFromAsset(Objects.requireNonNull(ctx).getAssets(), "fonts/manroperegular.ttf");
- break;
-
- case 2:
- myTypeface = Typeface.createFromAsset(Objects.requireNonNull(ctx).getAssets(), "fonts/sourcecodeproregular.ttf");
- break;
-
- default:
- myTypeface = Typeface.createFromAsset(Objects.requireNonNull(ctx).getAssets(), "fonts/roboto.ttf");
- break;
-
- }
-
+ Typeface myTypeface = AppUtil.getTypeface(this);
viewBinding.toolbarTitle.setTypeface(myTypeface);
viewBinding.toolbarTitle.setText(repoName);
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 9a983d3f..c1f86ca3 100644
--- a/app/src/main/java/org/mian/gitnex/activities/MainActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/MainActivity.java
@@ -117,21 +117,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
Toolbar toolbar = activityMainBinding.toolbar;
toolbarTitle = activityMainBinding.toolbarTitle;
- switch(tinyDB.getInt("customFontId", -1)) {
-
- case 0:
- myTypeface = Typeface.createFromAsset(getAssets(), "fonts/roboto.ttf");
- break;
-
- case 2:
- myTypeface = Typeface.createFromAsset(getAssets(), "fonts/sourcecodeproregular.ttf");
- break;
-
- default:
- myTypeface = Typeface.createFromAsset(getAssets(), "fonts/manroperegular.ttf");
- break;
- }
-
+ myTypeface = AppUtil.getTypeface(this);
toolbarTitle.setTypeface(myTypeface);
setSupportActionBar(toolbar);
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 d257a4f4..26734563 100644
--- a/app/src/main/java/org/mian/gitnex/activities/OrganizationDetailActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/OrganizationDetailActivity.java
@@ -118,24 +118,7 @@ public class OrganizationDetailActivity extends BaseActivity implements BottomSh
tabLayout.removeTabAt(3);
}
- Typeface myTypeface;
-
- switch(tinyDB.getInt("customFontId", -1)) {
-
- case 0:
-
- myTypeface = Typeface.createFromAsset(ctx.getAssets(), "fonts/roboto.ttf");
- break;
- case 2:
-
- myTypeface = Typeface.createFromAsset(ctx.getAssets(), "fonts/sourcecodeproregular.ttf");
- break;
- default:
-
- myTypeface = Typeface.createFromAsset(ctx.getAssets(), "fonts/manroperegular.ttf");
- break;
- }
-
+ Typeface myTypeface = AppUtil.getTypeface(this);
TextView toolbarTitle = findViewById(R.id.toolbar_title);
toolbarTitle.setTypeface(myTypeface);
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 075e6851..28a8ced6 100644
--- a/app/src/main/java/org/mian/gitnex/activities/ProfileActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/ProfileActivity.java
@@ -25,6 +25,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.AppUtil;
import org.mian.gitnex.helpers.Toasty;
import org.mian.gitnex.structs.BottomSheetListener;
import java.util.Objects;
@@ -47,7 +48,6 @@ public class ProfileActivity extends BaseActivity implements BottomSheetListener
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
Intent profileIntent = getIntent();
- Typeface myTypeface;
Toolbar toolbar = findViewById(R.id.toolbar);
TextView toolbarTitle = findViewById(R.id.toolbarTitle);
@@ -68,18 +68,7 @@ public class ProfileActivity extends BaseActivity implements BottomSheetListener
viewPager.setOffscreenPageLimit(1);
TabLayout tabLayout = findViewById(R.id.tabs);
- switch(tinyDB.getInt("customFontId", -1)) {
- case 0:
- myTypeface = Typeface.createFromAsset(ctx.getAssets(), "fonts/roboto.ttf");
- break;
- case 2:
- myTypeface = Typeface.createFromAsset(ctx.getAssets(), "fonts/sourcecodeproregular.ttf");
- break;
- default:
- myTypeface = Typeface.createFromAsset(ctx.getAssets(), "fonts/manroperegular.ttf");
- break;
- }
-
+ Typeface myTypeface = AppUtil.getTypeface(this);
toolbarTitle.setTypeface(myTypeface);
toolbarTitle.setText(username);
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 9f5cc4a0..b931dfcb 100644
--- a/app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java
@@ -142,22 +142,7 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetListe
Objects.requireNonNull(getSupportActionBar()).setTitle(repository.getName());
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- switch(tinyDB.getInt("customFontId", -1)) {
-
- case 0:
-
- myTypeface = Typeface.createFromAsset(ctx.getAssets(), "fonts/roboto.ttf");
- break;
- case 2:
-
- myTypeface = Typeface.createFromAsset(ctx.getAssets(), "fonts/sourcecodeproregular.ttf");
- break;
- default:
-
- myTypeface = Typeface.createFromAsset(ctx.getAssets(), "fonts/manroperegular.ttf");
- break;
- }
-
+ myTypeface = AppUtil.getTypeface(this);
toolbarTitle.setTypeface(myTypeface);
getRepoInfo(repository.getOwner(), repository.getName());
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 f06e15a1..57f8de0f 100644
--- a/app/src/main/java/org/mian/gitnex/activities/SettingsAppearanceActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/SettingsAppearanceActivity.java
@@ -14,6 +14,8 @@ import com.google.android.material.switchmaterial.SwitchMaterial;
import org.mian.gitnex.R;
import org.mian.gitnex.databinding.ActivitySettingsAppearanceBinding;
import org.mian.gitnex.fragments.SettingsFragment;
+import org.mian.gitnex.helpers.AppUtil;
+import org.mian.gitnex.helpers.FontsOverride;
import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.helpers.Toasty;
@@ -159,6 +161,8 @@ public class SettingsAppearanceActivity extends BaseActivity {
activitySettingsAppearanceBinding.customFontSelected.setText(customFontList[i]);
tinyDB.putString("customFontStr", customFontList[i]);
tinyDB.putInt("customFontId", i);
+ AppUtil.typeface = null; // reset typeface
+ FontsOverride.setDefaultFont(this);
SettingsFragment.refreshParent = true;
this.recreate();
diff --git a/app/src/main/java/org/mian/gitnex/adapters/ExplorePublicOrganizationsAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/ExplorePublicOrganizationsAdapter.java
deleted file mode 100644
index d4204936..00000000
--- a/app/src/main/java/org/mian/gitnex/adapters/ExplorePublicOrganizationsAdapter.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package org.mian.gitnex.adapters;
-
-import android.annotation.SuppressLint;
-import android.content.Context;
-import android.content.Intent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.TextView;
-import androidx.annotation.NonNull;
-import androidx.recyclerview.widget.RecyclerView;
-import org.gitnex.tea4j.v2.models.Organization;
-import org.mian.gitnex.R;
-import org.mian.gitnex.activities.OrganizationDetailActivity;
-import org.mian.gitnex.clients.PicassoService;
-import org.mian.gitnex.helpers.AppUtil;
-import org.mian.gitnex.helpers.RoundedTransformation;
-import java.util.List;
-
-/**
- * @author M M Arif
- */
-
-public class ExplorePublicOrganizationsAdapter extends RecyclerView.Adapter {
-
- private final Context context;
- private List organizationsList;
- private Runnable loadMoreListener;
- private boolean isLoading = false, isMoreDataAvailable = true;
-
- public ExplorePublicOrganizationsAdapter(Context ctx, List organizationsListMain) {
- this.context = ctx;
- this.organizationsList = organizationsListMain;
- }
-
- @NonNull
- @Override
- public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- LayoutInflater inflater = LayoutInflater.from(context);
- return new ExplorePublicOrganizationsAdapter.OrganizationsHolder(inflater.inflate(R.layout.list_organizations, parent, false));
- }
-
- @Override
- public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
- if(position >= getItemCount() - 1 && isMoreDataAvailable && !isLoading && loadMoreListener != null) {
- isLoading = true;
- loadMoreListener.run();
- }
- ((ExplorePublicOrganizationsAdapter.OrganizationsHolder) holder).bindData(organizationsList.get(position));
- }
-
- @Override
- public int getItemViewType(int position) {
- return position;
- }
-
- @Override
- public int getItemCount() {
- return organizationsList.size();
- }
-
- class OrganizationsHolder extends RecyclerView.ViewHolder {
- private Organization organization;
- private final ImageView image;
- private final TextView orgName;
- private final TextView orgDescription;
-
- OrganizationsHolder(View itemView) {
- super(itemView);
- image = itemView.findViewById(R.id.imageAvatar);
- orgName = itemView.findViewById(R.id.orgName);
- orgDescription = itemView.findViewById(R.id.orgDescription);
-
- itemView.setOnClickListener(v -> {
- Context context = v.getContext();
- Intent intent = new Intent(context, OrganizationDetailActivity.class);
- intent.putExtra("orgName", organization.getUsername());
- context.startActivity(intent);
- });
- }
-
- @SuppressLint("SetTextI18n")
- void bindData(Organization organization) {
- this.organization = organization;
- int imgRadius = AppUtil.getPixelsFromDensity(context, 3);
- orgName.setText(organization.getUsername());
- PicassoService.getInstance(context).get()
- .load(organization.getAvatarUrl())
- .placeholder(R.drawable.loader_animated)
- .transform(new RoundedTransformation(imgRadius, 0))
- .resize(120, 120)
- .centerCrop()
- .into(image);
-
- if(!organization.getDescription().equals("")) {
- orgDescription.setVisibility(View.VISIBLE);
- orgDescription.setText(organization.getDescription());
- }
- else {
- orgDescription.setVisibility(View.GONE);
- }
- }
- }
-
- public void setMoreDataAvailable(boolean moreDataAvailable) {
- isMoreDataAvailable = moreDataAvailable;
- }
-
- @SuppressLint("NotifyDataSetChanged")
- public void notifyDataChanged() {
- notifyDataSetChanged();
- isLoading = false;
- }
-
- public void setLoadMoreListener(Runnable loadMoreListener) {
- this.loadMoreListener = loadMoreListener;
- }
-
- public void updateList(List list) {
- organizationsList = list;
- notifyDataChanged();
- }
-}
diff --git a/app/src/main/java/org/mian/gitnex/adapters/OrganizationsListAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/OrganizationsListAdapter.java
index 531fba73..639ee236 100644
--- a/app/src/main/java/org/mian/gitnex/adapters/OrganizationsListAdapter.java
+++ b/app/src/main/java/org/mian/gitnex/adapters/OrganizationsListAdapter.java
@@ -33,7 +33,7 @@ public class OrganizationsListAdapter extends RecyclerView.Adapter orgListMain, Context ctx) {
+ public OrganizationsListAdapter(Context ctx, List orgListMain) {
this.context = ctx;
this.orgList = orgListMain;
orgListFull = new ArrayList<>(orgList);
@@ -123,9 +123,10 @@ public class OrganizationsListAdapter extends RecyclerView.Adapter {
-
- private final Context context;
- private List organizationsList;
- private Runnable loadMoreListener;
- private boolean isLoading = false, isMoreDataAvailable = true;
-
- public OrganizationsAdapter(Context ctx, List organizationsListMain) {
- this.context = ctx;
- this.organizationsList = organizationsListMain;
- }
-
- @NonNull
- @Override
- public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- LayoutInflater inflater = LayoutInflater.from(context);
- return new OrganizationsHolder(inflater.inflate(R.layout.list_organizations, parent, false));
- }
-
- @Override
- public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
-
- if(position >= getItemCount() - 1 && isMoreDataAvailable && !isLoading && loadMoreListener != null) {
- isLoading = true;
- loadMoreListener.run();
- }
- ((OrganizationsHolder) holder).bindData(organizationsList.get(position));
- }
-
- @Override
- public int getItemViewType(int position) {
- return position;
- }
-
- @Override
- public int getItemCount() {
- return organizationsList.size();
- }
-
- class OrganizationsHolder extends RecyclerView.ViewHolder {
-
- private Organization userOrganizations;
-
- private final ImageView image;
- private final TextView orgName;
- private final TextView orgDescription;
-
- OrganizationsHolder(View itemView) {
-
- super(itemView);
- orgName = itemView.findViewById(R.id.orgName);
- orgDescription = itemView.findViewById(R.id.orgDescription);
- image = itemView.findViewById(R.id.imageAvatar);
-
- itemView.setOnClickListener(v -> {
- Context context = v.getContext();
- Intent intent = new Intent(context, OrganizationDetailActivity.class);
- intent.putExtra("orgName", userOrganizations.getUsername());
- context.startActivity(intent);
- });
- }
-
- @SuppressLint("SetTextI18n")
- void bindData(Organization userOrganizations) {
-
- this.userOrganizations = userOrganizations;
- int imgRadius = AppUtil.getPixelsFromDensity(context, 3);
-
- orgName.setText(userOrganizations.getUsername());
-
- PicassoService.getInstance(context).get().load(userOrganizations.getAvatarUrl()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(imgRadius, 0)).resize(120, 120).centerCrop().into(image);
-
- if (!userOrganizations.getDescription().equals("")) {
- orgDescription.setText(userOrganizations.getDescription());
- }
- }
- }
-
- public void setMoreDataAvailable(boolean moreDataAvailable) {
- isMoreDataAvailable = moreDataAvailable;
- }
-
- @SuppressLint("NotifyDataSetChanged")
- public void notifyDataChanged() {
- notifyDataSetChanged();
- isLoading = false;
- }
-
- public void setLoadMoreListener(Runnable loadMoreListener) {
- this.loadMoreListener = loadMoreListener;
- }
-
- public void updateList(List list) {
- organizationsList = list;
- notifyDataChanged();
- }
-}
diff --git a/app/src/main/java/org/mian/gitnex/core/MainApplication.java b/app/src/main/java/org/mian/gitnex/core/MainApplication.java
index e3cc6edd..955a4e47 100644
--- a/app/src/main/java/org/mian/gitnex/core/MainApplication.java
+++ b/app/src/main/java/org/mian/gitnex/core/MainApplication.java
@@ -1,16 +1,14 @@
package org.mian.gitnex.core;
-import android.annotation.SuppressLint;
import android.app.Application;
import android.content.Context;
import org.acra.ACRA;
import org.acra.BuildConfig;
import org.acra.ReportField;
-import org.acra.annotation.AcraCore;
-import org.acra.annotation.AcraNotification;
import org.acra.config.CoreConfigurationBuilder;
import org.acra.config.LimiterConfigurationBuilder;
import org.acra.config.MailSenderConfigurationBuilder;
+import org.acra.config.NotificationConfigurationBuilder;
import org.acra.data.StringFormat;
import org.mian.gitnex.R;
import org.mian.gitnex.database.models.UserAccount;
@@ -19,20 +17,12 @@ import org.mian.gitnex.helpers.FontsOverride;
import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.helpers.contexts.AccountContext;
import org.mian.gitnex.notifications.Notifications;
+import java.nio.charset.StandardCharsets;
/**
* @author opyale
*/
-@SuppressLint("NonConstantResourceId")
-@AcraNotification(resIcon = R.drawable.gitnex_transparent,
- resTitle = R.string.crashTitle,
- resChannelName = R.string.setCrashReports,
- resText = R.string.crashMessage)
-@AcraCore(reportContent = {
- ReportField.ANDROID_VERSION, ReportField.PHONE_MODEL,
- ReportField.STACK_TRACE, ReportField.AVAILABLE_MEM_SIZE, ReportField.BRAND })
-
public class MainApplication extends Application {
private TinyDB tinyDB;
@@ -50,29 +40,7 @@ public class MainApplication extends Application {
tinyDB.putBoolean("biometricLifeCycle", false);
- switch(tinyDB.getInt("customFontId", -1)) {
-
- case 0:
- FontsOverride.setDefaultFont(this, "DEFAULT", "fonts/roboto.ttf");
- FontsOverride.setDefaultFont(this, "MONOSPACE", "fonts/roboto.ttf");
- FontsOverride.setDefaultFont(this, "SERIF", "fonts/roboto.ttf");
- FontsOverride.setDefaultFont(this, "SANS_SERIF", "fonts/roboto.ttf");
- break;
-
- case 2:
- FontsOverride.setDefaultFont(this, "DEFAULT", "fonts/sourcecodeproregular.ttf");
- FontsOverride.setDefaultFont(this, "MONOSPACE", "fonts/sourcecodeproregular.ttf");
- FontsOverride.setDefaultFont(this, "SERIF", "fonts/sourcecodeproregular.ttf");
- FontsOverride.setDefaultFont(this, "SANS_SERIF", "fonts/sourcecodeproregular.ttf");
- break;
-
- default:
- FontsOverride.setDefaultFont(this, "DEFAULT", "fonts/manroperegular.ttf");
- FontsOverride.setDefaultFont(this, "MONOSPACE", "fonts/manroperegular.ttf");
- FontsOverride.setDefaultFont(this, "SERIF", "fonts/manroperegular.ttf");
- FontsOverride.setDefaultFont(this, "SANS_SERIF", "fonts/manroperegular.ttf");
-
- }
+ FontsOverride.setDefaultFont(getBaseContext());
Notifications.createChannels(appCtx);
}
@@ -88,7 +56,10 @@ public class MainApplication extends Application {
CoreConfigurationBuilder ACRABuilder = new CoreConfigurationBuilder(this);
- ACRABuilder.withBuildConfigClass(BuildConfig.class).setReportFormat(StringFormat.KEY_VALUE_LIST);
+ ACRABuilder.withBuildConfigClass(BuildConfig.class).withReportContent(ReportField.ANDROID_VERSION, ReportField.PHONE_MODEL,
+ ReportField.STACK_TRACE, ReportField.AVAILABLE_MEM_SIZE, ReportField.BRAND).setReportFormat(StringFormat.KEY_VALUE_LIST);
+ ACRABuilder.getPluginConfigurationBuilder(NotificationConfigurationBuilder.class).withResTitle(R.string.crashTitle)
+ .withResIcon(R.drawable.gitnex_transparent).withResChannelName(R.string.setCrashReports).withResText(R.string.crashMessage);
ACRABuilder.getPluginConfigurationBuilder(MailSenderConfigurationBuilder.class).withMailTo(getResources().getString(R.string.appEmail))
.withSubject(getResources().getString(R.string.crashReportEmailSubject, AppUtil
.getAppBuildNo(context)))
diff --git a/app/src/main/java/org/mian/gitnex/fragments/ExploreFragment.java b/app/src/main/java/org/mian/gitnex/fragments/ExploreFragment.java
index d19d4162..c1916e29 100644
--- a/app/src/main/java/org/mian/gitnex/fragments/ExploreFragment.java
+++ b/app/src/main/java/org/mian/gitnex/fragments/ExploreFragment.java
@@ -16,6 +16,7 @@ import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;
import org.mian.gitnex.R;
import org.mian.gitnex.activities.MainActivity;
+import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.TinyDB;
/**
@@ -41,23 +42,7 @@ public class ExploreFragment extends Fragment {
ViewGroup vg = (ViewGroup) tabLayout.getChildAt(0);
- Typeface myTypeface;
-
- switch(tinyDB.getInt("customFontId", -1)) {
-
- case 0:
- myTypeface = Typeface.createFromAsset(ctx != null ? ctx.getAssets() : null, "fonts/roboto.ttf");
- break;
-
- case 2:
- myTypeface = Typeface.createFromAsset(ctx != null ? ctx.getAssets() : null, "fonts/sourcecodeproregular.ttf");
- break;
-
- default:
- myTypeface = Typeface.createFromAsset(ctx != null ? ctx.getAssets() : null, "fonts/manroperegular.ttf");
- break;
- }
-
+ Typeface myTypeface = AppUtil.getTypeface(requireContext());
viewPager.setAdapter(new ViewPagerAdapter(this));
String[] tabTitles = {getResources().getString(R.string.navRepos), getResources().getString(R.string.pageTitleIssues), getResources().getString(R.string.navOrg), getResources().getString(R.string.pageTitleUsers)};
diff --git a/app/src/main/java/org/mian/gitnex/fragments/ExplorePublicOrganizationsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/ExplorePublicOrganizationsFragment.java
index eaf3fdc2..6d56cdb1 100644
--- a/app/src/main/java/org/mian/gitnex/fragments/ExplorePublicOrganizationsFragment.java
+++ b/app/src/main/java/org/mian/gitnex/fragments/ExplorePublicOrganizationsFragment.java
@@ -15,7 +15,7 @@ import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import org.gitnex.tea4j.v2.models.Organization;
import org.mian.gitnex.R;
-import org.mian.gitnex.adapters.ExplorePublicOrganizationsAdapter;
+import org.mian.gitnex.adapters.OrganizationsListAdapter;
import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.databinding.FragmentOrganizationsBinding;
import org.mian.gitnex.helpers.Constants;
@@ -34,7 +34,7 @@ public class ExplorePublicOrganizationsFragment extends Fragment {
private FragmentOrganizationsBinding fragmentPublicOrgBinding;
private List organizationsList;
- private ExplorePublicOrganizationsAdapter adapter;
+ private OrganizationsListAdapter adapter;
private Context context;
private int pageSize;
private final String TAG = Constants.publicOrganizations;
@@ -58,13 +58,18 @@ public class ExplorePublicOrganizationsFragment extends Fragment {
adapter.notifyDataChanged();
}, 200));
- adapter = new ExplorePublicOrganizationsAdapter(getContext(), organizationsList);
- adapter.setLoadMoreListener(() -> fragmentPublicOrgBinding.recyclerView.post(() -> {
- if(organizationsList.size() == resultLimit || pageSize == resultLimit) {
- int page = (organizationsList.size() + resultLimit) / resultLimit;
- loadMore(page, resultLimit);
+ adapter = new OrganizationsListAdapter(requireContext(), organizationsList);
+ adapter.setLoadMoreListener(new OrganizationsListAdapter.OnLoadMoreListener() {
+ @Override
+ public void onLoadMore() {
+ fragmentPublicOrgBinding.recyclerView.post(() -> {
+ if(organizationsList.size() == resultLimit || pageSize == resultLimit) {
+ int page = (organizationsList.size() + resultLimit) / resultLimit;
+ loadMore(page, resultLimit);
+ }
+ });
}
- }));
+ });
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(fragmentPublicOrgBinding.recyclerView.getContext(), DividerItemDecoration.VERTICAL);
fragmentPublicOrgBinding.recyclerView.setHasFixedSize(true);
diff --git a/app/src/main/java/org/mian/gitnex/fragments/MyProfileFragment.java b/app/src/main/java/org/mian/gitnex/fragments/MyProfileFragment.java
index 636a8d14..29611c58 100644
--- a/app/src/main/java/org/mian/gitnex/fragments/MyProfileFragment.java
+++ b/app/src/main/java/org/mian/gitnex/fragments/MyProfileFragment.java
@@ -187,24 +187,7 @@ public class MyProfileFragment extends Fragment {
ViewPager mViewPager = v.findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
- Typeface myTypeface;
-
- switch(tinyDb.getInt("customFontId", -1)) {
-
- case 0:
- myTypeface = Typeface.createFromAsset(requireContext().getAssets(), "fonts/roboto.ttf");
- break;
-
- case 2:
- myTypeface = Typeface.createFromAsset(requireContext().getAssets(), "fonts/sourcecodeproregular.ttf");
- break;
-
- default:
- myTypeface = Typeface.createFromAsset(requireContext().getAssets(), "fonts/manroperegular.ttf");
- break;
-
- }
-
+ Typeface myTypeface = AppUtil.getTypeface(requireContext());
TabLayout tabLayout = v.findViewById(R.id.tabs);
ViewGroup vg = (ViewGroup) tabLayout.getChildAt(0);
diff --git a/app/src/main/java/org/mian/gitnex/fragments/OrganizationsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/OrganizationsFragment.java
index 480fe5d7..430293df 100644
--- a/app/src/main/java/org/mian/gitnex/fragments/OrganizationsFragment.java
+++ b/app/src/main/java/org/mian/gitnex/fragments/OrganizationsFragment.java
@@ -78,7 +78,7 @@ public class OrganizationsFragment extends Fragment {
organizationsViewModel.getUserOrg(page, resultLimit, getContext()).observe(getViewLifecycleOwner(), orgListMain -> {
- adapter = new OrganizationsListAdapter(orgListMain, getContext());
+ adapter = new OrganizationsListAdapter(requireContext(), orgListMain);
adapter.setLoadMoreListener(new OrganizationsListAdapter.OnLoadMoreListener() {
@Override
diff --git a/app/src/main/java/org/mian/gitnex/fragments/profile/OrganizationsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/profile/OrganizationsFragment.java
index 2a706892..fe2ef187 100644
--- a/app/src/main/java/org/mian/gitnex/fragments/profile/OrganizationsFragment.java
+++ b/app/src/main/java/org/mian/gitnex/fragments/profile/OrganizationsFragment.java
@@ -18,7 +18,7 @@ import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import org.gitnex.tea4j.v2.models.Organization;
import org.mian.gitnex.R;
-import org.mian.gitnex.adapters.profile.OrganizationsAdapter;
+import org.mian.gitnex.adapters.OrganizationsListAdapter;
import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.databinding.FragmentOrganizationsBinding;
import org.mian.gitnex.helpers.AlertDialogs;
@@ -41,7 +41,7 @@ public class OrganizationsFragment extends Fragment {
private FragmentOrganizationsBinding fragmentOrganizationsBinding;
private List organizationsList;
- private OrganizationsAdapter adapter;
+ private OrganizationsListAdapter adapter;
private int pageSize;
private int resultLimit;
@@ -86,13 +86,19 @@ public class OrganizationsFragment extends Fragment {
adapter.notifyDataChanged();
}, 200));
- adapter = new OrganizationsAdapter(context, organizationsList);
- adapter.setLoadMoreListener(() -> fragmentOrganizationsBinding.recyclerView.post(() -> {
- if(organizationsList.size() == resultLimit || pageSize == resultLimit) {
- int page = (organizationsList.size() + resultLimit) / resultLimit;
- loadMore(username, page, resultLimit);
+ adapter = new OrganizationsListAdapter(context, organizationsList);
+ adapter.setLoadMoreListener(new OrganizationsListAdapter.OnLoadMoreListener() {
+
+ @Override
+ protected void onLoadMore() {
+ fragmentOrganizationsBinding.recyclerView.post(() -> {
+ if(organizationsList.size() == resultLimit || pageSize == resultLimit) {
+ int page = (organizationsList.size() + resultLimit) / resultLimit;
+ loadMore(username, page, resultLimit);
+ }
+ });
}
- }));
+ });
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, DividerItemDecoration.VERTICAL);
fragmentOrganizationsBinding.recyclerView.setHasFixedSize(true);
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 d06979c4..a2c7d85a 100644
--- a/app/src/main/java/org/mian/gitnex/helpers/AppUtil.java
+++ b/app/src/main/java/org/mian/gitnex/helpers/AppUtil.java
@@ -10,6 +10,7 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.content.res.Resources;
+import android.graphics.Typeface;
import android.net.Uri;
import android.os.Build;
import android.util.Base64;
@@ -437,4 +438,23 @@ public class AppUtil {
return Uri.parse(scheme+raw);
}
+ public static Typeface typeface;
+
+ public static Typeface getTypeface(Context context) {
+ if(typeface == null) {
+ switch(TinyDB.getInstance(context).getInt("customFontId", -1)) {
+ case 0:
+ typeface = Typeface.createFromAsset(context.getAssets(), "fonts/roboto.ttf");
+ break;
+ case 2:
+ typeface = Typeface.createFromAsset(context.getAssets(), "fonts/sourcecodeproregular.ttf");
+ break;
+ default:
+ typeface = Typeface.createFromAsset(context.getAssets(), "fonts/manroperegular.ttf");
+ break;
+ }
+ }
+ return typeface;
+ }
+
}
diff --git a/app/src/main/java/org/mian/gitnex/helpers/FontsOverride.java b/app/src/main/java/org/mian/gitnex/helpers/FontsOverride.java
index 3eded525..1f3459c6 100644
--- a/app/src/main/java/org/mian/gitnex/helpers/FontsOverride.java
+++ b/app/src/main/java/org/mian/gitnex/helpers/FontsOverride.java
@@ -7,18 +7,22 @@ import java.lang.reflect.Field;
import java.util.Objects;
/**
- * Author M M Arif
+ * @author M M Arif
*/
public class FontsOverride {
- public static void setDefaultFont(Context context,
- String staticTypefaceFieldName, String fontAssetName) {
-
- final Typeface regular = Typeface.createFromAsset(context.getAssets(),
- fontAssetName);
- replaceFont(staticTypefaceFieldName, regular);
+ public static void setDefaultFont(Context context) {
+ final Typeface regular = AppUtil.getTypeface(context);
+ for(String field : new String[]{
+ "DEFAULT",
+ "MONOSPACE",
+ "SERIF",
+ "SANS_SERIF"
+ }) {
+ replaceFont(field, regular);
+ }
}
private static void replaceFont(String staticTypefaceFieldName,
@@ -34,7 +38,7 @@ public class FontsOverride {
}
catch (NoSuchFieldException | IllegalAccessException e) {
- Log.e("error", Objects.requireNonNull(e.getMessage()));
+ Log.e("replaceFont", Objects.requireNonNull(e.getMessage()));
}
diff --git a/app/src/main/java/org/mian/gitnex/helpers/Markdown.java b/app/src/main/java/org/mian/gitnex/helpers/Markdown.java
index 33e5a3db..7872d0d2 100644
--- a/app/src/main/java/org/mian/gitnex/helpers/Markdown.java
+++ b/app/src/main/java/org/mian/gitnex/helpers/Markdown.java
@@ -187,26 +187,11 @@ public class Markdown {
private Typeface tf;
- private void setupTf(Context context) {
-
- switch(TinyDB.getInstance(context).getInt("customFontId", -1)) {
- case 0:
- tf = Typeface.createFromAsset(context.getAssets(), "fonts/roboto.ttf");
- break;
- case 2:
- tf = Typeface.createFromAsset(context.getAssets(), "fonts/sourcecodeproregular.ttf");
- break;
- default:
- tf = Typeface.createFromAsset(context.getAssets(), "fonts/manroperegular.ttf");
- break;
- }
- }
-
@Override
public void beforeSetText(@NonNull TextView textView, @NonNull Spanned markdown) {
if(tf == null) {
- setupTf(textView.getContext());
+ tf = AppUtil.getTypeface(textView.getContext());
}
textView.setTypeface(tf);
super.beforeSetText(textView, markdown);
@@ -223,7 +208,7 @@ public class Markdown {
builder.linkColor(ResourcesCompat.getColor(context.getResources(), R.color.lightBlue, null));
if(tf == null) {
- setupTf(context);
+ tf = AppUtil.getTypeface(context);
}
builder.headingTypeface(tf);
}
@@ -319,26 +304,11 @@ public class Markdown {
private final Context context = RecyclerViewRenderer.this.context;
private Typeface tf;
- private void setupTf(Context context) {
-
- switch(TinyDB.getInstance(context).getInt("customFontId", -1)) {
- case 0:
- tf = Typeface.createFromAsset(context.getAssets(), "fonts/roboto.ttf");
- break;
- case 2:
- tf = Typeface.createFromAsset(context.getAssets(), "fonts/sourcecodeproregular.ttf");
- break;
- default:
- tf = Typeface.createFromAsset(context.getAssets(), "fonts/manroperegular.ttf");
- break;
- }
- }
-
@Override
public void beforeSetText(@NonNull TextView textView, @NonNull Spanned markdown) {
if(tf == null) {
- setupTf(textView.getContext());
+ tf = AppUtil.getTypeface(context);
}
textView.setTypeface(tf);
super.beforeSetText(textView, markdown);
@@ -362,7 +332,7 @@ public class Markdown {
builder.linkColor(ResourcesCompat.getColor(context.getResources(), R.color.lightBlue, null));
if(tf == null) {
- setupTf(context);
+ tf = AppUtil.getTypeface(context);
}
builder.headingTypeface(Typeface.create(tf, Typeface.BOLD));
}
diff --git a/app/src/main/java/org/mian/gitnex/helpers/Version.java b/app/src/main/java/org/mian/gitnex/helpers/Version.java
index 1c13957e..ed6d9209 100644
--- a/app/src/main/java/org/mian/gitnex/helpers/Version.java
+++ b/app/src/main/java/org/mian/gitnex/helpers/Version.java
@@ -3,6 +3,7 @@ package org.mian.gitnex.helpers;
import androidx.annotation.NonNull;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -16,6 +17,7 @@ public class Version {
private String raw;
// the version numbers in its order (dot separated)
private List values;
+ private boolean dev;
public Version(String value) {
@@ -35,8 +37,8 @@ public class Version {
if(value == null) {
return false;
}
- final Pattern pattern_valid = Pattern.compile("^[v,V]?(\\d+)+(\\.(\\d+))*([_,\\-,+][\\w,\\d,_,\\-,+]*)?$");
- return pattern_valid.matcher(value).find();
+ final Pattern patternValid = Pattern.compile("^[v,V]?(\\d+)+(\\.(\\d+))*([_,\\-,+][\\w,\\d,_,\\-,+]*)?$");
+ return value.equals("main") || patternValid.matcher(value).find();
}
/**
@@ -47,19 +49,25 @@ public class Version {
*/
private void init() {
- final Pattern pattern_number_dot_number = Pattern.compile("^\\d+(\\.(\\d)+)*");
+ final Pattern patternNumberDotNumber = Pattern.compile("^\\d+(\\.(\\d)+)*");
- if(!valid(raw)) {
- throw new IllegalArgumentException("Invalid version format: " + raw);
+ if(!valid(raw) || raw.equals("main")) {
+ dev = true;
+ values = new ArrayList<>();
+ return;
}
if(raw.charAt(0) == 'v' || raw.charAt(0) == 'V') {
raw = raw.substring(1);
}
- values = new ArrayList();
- Matcher match = pattern_number_dot_number.matcher(raw);
- match.find();
+ values = new ArrayList<>();
+ Matcher match = patternNumberDotNumber.matcher(raw);
+ if(!match.find()) {
+ dev = true;
+ values = new ArrayList<>();
+ return;
+ }
for(String i : match.group().split("\\.")) {
values.add(Integer.parseInt(i));
}
@@ -86,9 +94,13 @@ public class Version {
*/
public boolean equal(@NonNull Version v) {
+ if(dev || v.dev) { // equal if raw is equal
+ return Objects.equals(raw, v.raw);
+ }
+
int rounds = Math.min(this.values.size(), v.values.size());
for(int i = 0; i < rounds; i++) {
- if(this.values.get(i) != v.values.get(i)) {
+ if(!Objects.equals(this.values.get(i), v.values.get(i))) {
return false;
}
}
@@ -142,6 +154,12 @@ public class Version {
*/
public boolean higher(@NonNull Version v) {
+ if(dev) {
+ return !v.dev;
+ } else if(v.dev) {
+ return false;
+ }
+
int rounds = Math.min(this.values.size(), v.values.size());
for(int i = 0; i < rounds; i++) {
if(i + 1 == rounds) {
@@ -207,6 +225,10 @@ public class Version {
*/
public boolean higherOrEqual(@NonNull Version v) {
+ if(dev || v.dev) { // if one is a dev version, only true if both are dev
+ return v.dev && dev;
+ }
+
int rounds = Math.min(this.values.size(), v.values.size());
for(int i = 0; i < rounds; i++) {
if(this.values.get(i) > v.values.get(i)) {
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
deleted file mode 100644
index cf31106c..00000000
--- a/app/src/main/java/org/mian/gitnex/helpers/ssl/MemorizingActivity.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.mian.gitnex.helpers.ssl;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.content.Intent;
-import android.os.Bundle;
-import org.mian.gitnex.R;
-
-/**
- * Author Georg Lukas, modified by opyale
- */
-
-public class MemorizingActivity extends Activity {
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
-
- super.onCreate(savedInstanceState);
-
- Intent intent = getIntent();
- int decisionId = intent.getIntExtra("DECISION_INTENT_ID", MTMDecision.DECISION_INVALID);
- 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.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();
-
- }
-
- private void onSendResult(int decisionId, int decision) {
-
- MemorizingTrustManager.interactResult(decisionId, decision);
- finish();
-
- }
-
-}
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 78db04ec..4cae2bf4 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
@@ -1,16 +1,17 @@
package org.mian.gitnex.helpers.ssl;
+import android.app.AlertDialog;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.os.Handler;
import android.util.Base64;
import android.util.SparseArray;
import androidx.core.app.NotificationCompat;
import org.mian.gitnex.R;
+import org.mian.gitnex.activities.BaseActivity;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -39,7 +40,7 @@ import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;
/**
- * Author Georg Lukas, modified by opyale
+ * @author Georg Lukas, modified by opyale
*/
public class MemorizingTrustManager implements X509TrustManager {
@@ -50,10 +51,9 @@ public class MemorizingTrustManager implements X509TrustManager {
private Context context;
private NotificationManager notificationManager;
- private static int decisionId = 0;
- private static final SparseArray openDecisions = new SparseArray<>();
+ private int decisionId = 0;
+ private final SparseArray openDecisions = new SparseArray<>();
- private Handler masterHandler;
private SharedPreferences keyStoreStorage;
private KeyStore appKeyStore;
private final X509TrustManager defaultTrustManager;
@@ -103,7 +103,6 @@ public class MemorizingTrustManager implements X509TrustManager {
private void init(Context m) {
context = m;
- masterHandler = new Handler(m.getMainLooper());
notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
keyStoreStorage = m.getSharedPreferences(KEYSTORE_NAME, Context.MODE_PRIVATE);
@@ -387,7 +386,7 @@ public class MemorizingTrustManager implements X509TrustManager {
return defaultTrustManager.getAcceptedIssuers();
}
- private static int createDecisionId(MTMDecision d) {
+ private int createDecisionId(MTMDecision d) {
int myId;
synchronized(openDecisions) {
@@ -562,24 +561,16 @@ public class MemorizingTrustManager implements X509TrustManager {
MTMDecision choice = new MTMDecision();
final int myId = createDecisionId(choice);
- masterHandler.post(new Runnable() {
+ ((BaseActivity) context).runOnUiThread(() -> {
+ AlertDialog.Builder builder = new AlertDialog.Builder(context);
+ builder.setTitle(titleId);
+ builder.setMessage(message);
- public void run() {
+ builder.setPositiveButton(R.string.mtmDecisionAlways, (dialog, which) -> interactResult(myId, MTMDecision.DECISION_ALWAYS));
+ builder.setNeutralButton(R.string.mtmDecisionAbort, (dialog, which) -> interactResult(myId, MTMDecision.DECISION_ABORT));
+ builder.setOnCancelListener(dialog -> interactResult(myId, MTMDecision.DECISION_ABORT));
- Intent intent = new Intent(context, MemorizingActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
- intent.putExtra("DECISION_INTENT_ID", myId);
- intent.putExtra("DECISION_INTENT_CERT", message);
- intent.putExtra("DECISION_TITLE_ID", titleId);
-
- try {
- context.startActivity(intent);
- }
- catch(Exception e) {
- startActivityNotification(intent, myId, message);
- }
- }
+ builder.create().show();
});
try {
@@ -613,7 +604,7 @@ public class MemorizingTrustManager implements X509TrustManager {
return false;
}
- static void interactResult(int decisionId, int choice) {
+ private void interactResult(int decisionId, int choice) {
MTMDecision d;
diff --git a/app/src/main/java/org/mian/gitnex/helpers/views/SyntaxHighlightedArea.java b/app/src/main/java/org/mian/gitnex/views/SyntaxHighlightedArea.java
similarity index 99%
rename from app/src/main/java/org/mian/gitnex/helpers/views/SyntaxHighlightedArea.java
rename to app/src/main/java/org/mian/gitnex/views/SyntaxHighlightedArea.java
index ddda8829..edac1092 100644
--- a/app/src/main/java/org/mian/gitnex/helpers/views/SyntaxHighlightedArea.java
+++ b/app/src/main/java/org/mian/gitnex/views/SyntaxHighlightedArea.java
@@ -1,4 +1,4 @@
-package org.mian.gitnex.helpers.views;
+package org.mian.gitnex.views;
import android.app.Activity;
import android.content.Context;
diff --git a/app/src/main/res/layout/activity_file_view.xml b/app/src/main/res/layout/activity_file_view.xml
index 3192e033..fd413002 100644
--- a/app/src/main/res/layout/activity_file_view.xml
+++ b/app/src/main/res/layout/activity_file_view.xml
@@ -96,7 +96,7 @@
-