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 cd6fb798..731bfd44 100644 --- a/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java @@ -60,6 +60,12 @@ public abstract class BaseActivity extends AppCompatActivity { } + // enabling counter badges by default + if(tinyDb.getString("enableCounterBadgesInit").isEmpty()) { + tinyDb.putBoolean("enableCounterBadges", true); + tinyDb.putString("enableCounterBadgesInit", "yes"); + } + } protected abstract int getLayoutResourceId(); 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 2bada8f0..13c2406b 100644 --- a/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java @@ -29,6 +29,7 @@ import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import android.content.Context; +import android.content.Intent; import android.graphics.Color; import android.graphics.Typeface; import android.graphics.drawable.Drawable; @@ -95,6 +96,7 @@ public class IssueDetailActivity extends BaseActivity { private HorizontalScrollView assigneesScrollView; private ScrollView scrollViewComments; private TextView issueModified; + private ImageView createNewComment; final Context ctx = this; private LinearLayout labelsLayout; private LinearLayout assigneesLayout; @@ -132,6 +134,7 @@ public class IssueDetailActivity extends BaseActivity { assigneesScrollView = findViewById(R.id.assigneesScrollView); scrollViewComments = findViewById(R.id.scrollViewComments); issueModified = findViewById(R.id.issueModified); + createNewComment = findViewById(R.id.addNewComment); labelsLayout = findViewById(R.id.frameLabels); assigneesLayout = findViewById(R.id.frameAssignees); @@ -147,10 +150,38 @@ public class IssueDetailActivity extends BaseActivity { mRecyclerView.setNestedScrollingEnabled(false); mRecyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext())); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mRecyclerView.getContext(), - DividerItemDecoration.VERTICAL); + DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mRecyclerView.getContext(), DividerItemDecoration.VERTICAL); mRecyclerView.addItemDecoration(dividerItemDecoration); + createNewComment = findViewById(R.id.addNewComment); + createNewComment.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + + startActivity(new Intent(ctx, ReplyToIssueActivity.class)); + + } + }); + + mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + + if (dy > 0 && createNewComment.isShown()) { + createNewComment.setVisibility(View.GONE); + } else if (dy < 0) { + createNewComment.setVisibility(View.VISIBLE); + } + + } + + @Override + public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { + super.onScrollStateChanged(recyclerView, newState); + } + }); + swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { @@ -165,24 +196,24 @@ public class IssueDetailActivity extends BaseActivity { }); Typeface myTypeface; - if(tinyDb.getInt("customFontId") == 0) { - myTypeface = Typeface.createFromAsset(Objects.requireNonNull(getApplicationContext()).getAssets(), "fonts/roboto.ttf"); + switch(tinyDb.getInt("customFontId")) { - } - else if (tinyDb.getInt("customFontId") == 1) { + case 0: + myTypeface = Typeface.createFromAsset(Objects.requireNonNull(getApplicationContext()).getAssets(), "fonts/roboto.ttf"); + break; - myTypeface = Typeface.createFromAsset(Objects.requireNonNull(getApplicationContext()).getAssets(), "fonts/manroperegular.ttf"); + case 1: + myTypeface = Typeface.createFromAsset(Objects.requireNonNull(getApplicationContext()).getAssets(), "fonts/manroperegular.ttf"); + break; - } - else if (tinyDb.getInt("customFontId") == 2) { + case 2: + myTypeface = Typeface.createFromAsset(Objects.requireNonNull(getApplicationContext()).getAssets(), "fonts/sourcecodeproregular.ttf"); + break; - myTypeface = Typeface.createFromAsset(Objects.requireNonNull(getApplicationContext()).getAssets(), "fonts/sourcecodeproregular.ttf"); - - } - else { - - myTypeface = Typeface.createFromAsset(Objects.requireNonNull(getApplicationContext()).getAssets(), "fonts/roboto.ttf"); + default: + myTypeface = Typeface.createFromAsset(Objects.requireNonNull(getApplicationContext()).getAssets(), "fonts/roboto.ttf"); + break; } @@ -506,29 +537,11 @@ public class IssueDetailActivity extends BaseActivity { issueDescription.setLayoutParams(paramsDesc); } - switch (timeFormat) { - case "pretty": { - PrettyTime prettyTime = new PrettyTime(new Locale(locale)); - String createdTime = prettyTime.format(singleIssue.getCreated_at()); - issueCreatedTime.setText(createdTime); - issueCreatedTime.setVisibility(View.VISIBLE); - issueCreatedTime.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(singleIssue.getCreated_at()), getApplicationContext())); - break; - } - case "normal": { - DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd '" + getResources().getString(R.string.timeAtText) + "' HH:mm", new Locale(locale)); - String createdTime = formatter.format(singleIssue.getCreated_at()); - issueCreatedTime.setText(createdTime); - issueCreatedTime.setVisibility(View.VISIBLE); - break; - } - case "normal1": { - DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy '" + getResources().getString(R.string.timeAtText) + "' HH:mm", new Locale(locale)); - String createdTime = formatter.format(singleIssue.getCreated_at()); - issueCreatedTime.setText(createdTime); - issueCreatedTime.setVisibility(View.VISIBLE); - break; - } + issueCreatedTime.setText(TimeHelper.formatTime(singleIssue.getCreated_at(), new Locale(locale), timeFormat, ctx)); + issueCreatedTime.setVisibility(View.VISIBLE); + + if(timeFormat.equals("pretty")) { + issueCreatedTime.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(singleIssue.getCreated_at()), ctx)); } if(singleIssue.getMilestone() != null) { diff --git a/app/src/main/java/org/mian/gitnex/adapters/ClosedIssuesAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/ClosedIssuesAdapter.java index 98d8aadd..7a9ea6ac 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/ClosedIssuesAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/ClosedIssuesAdapter.java @@ -193,26 +193,10 @@ public class ClosedIssuesAdapter extends RecyclerView.Adapter issueNumber.setText(String.valueOf(issuesModel.getNumber())); issueCommentsCount.setText(String.valueOf(issuesModel.getComments())); - switch (timeFormat) { - case "pretty": { - PrettyTime prettyTime = new PrettyTime(new Locale(locale)); - String createdTime = prettyTime.format(issuesModel.getCreated_at()); - issueCreatedTime.setText(createdTime); - issueCreatedTime.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(issuesModel.getCreated_at()), context)); - break; - } - case "normal": { - DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd '" + context.getResources().getString(R.string.timeAtText) + "' HH:mm", new Locale(locale)); - String createdTime = formatter.format(issuesModel.getCreated_at()); - issueCreatedTime.setText(createdTime); - break; - } - case "normal1": { - DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy '" + context.getResources().getString(R.string.timeAtText) + "' HH:mm", new Locale(locale)); - String createdTime = formatter.format(issuesModel.getCreated_at()); - issueCreatedTime.setText(createdTime); - break; - } + issueCreatedTime.setText(TimeHelper.formatTime(issuesModel.getCreated_at(), new Locale(locale), timeFormat, context)); + + if(timeFormat.equals("pretty")) { + issueCreatedTime.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(issuesModel.getCreated_at()), context)); } } 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 29c2bcf0..d2223994 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java @@ -181,26 +181,10 @@ public class PullRequestsAdapter extends RecyclerView.Adapter 0 && createNewRepo.isShown()) { createNewRepo.setVisibility(View.GONE); - } else if (dy < 0 ) { + } else if (dy < 0) { createNewRepo.setVisibility(View.VISIBLE); - } + } @Override diff --git a/app/src/main/java/org/mian/gitnex/fragments/RepoInfoFragment.java b/app/src/main/java/org/mian/gitnex/fragments/RepoInfoFragment.java index 3b8673b7..9f636f8a 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/RepoInfoFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/RepoInfoFragment.java @@ -6,6 +6,7 @@ import android.net.Uri; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; import io.noties.markwon.AbstractMarkwonPlugin; import io.noties.markwon.Markwon; @@ -30,6 +31,7 @@ import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; @@ -44,9 +46,6 @@ import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.models.UserRepositories; import org.mian.gitnex.util.AppUtil; import org.mian.gitnex.util.TinyDB; -import org.ocpsoft.prettytime.PrettyTime; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Collections; import java.util.Locale; @@ -58,7 +57,7 @@ import java.util.Objects; public class RepoInfoFragment extends Fragment { - private Context ctx = getContext(); + private Context ctx; private ProgressBar mProgressBar; private LinearLayout pageContent; private static String repoNameF = "param2"; @@ -66,17 +65,17 @@ public class RepoInfoFragment extends Fragment { private String repoName; private String repoOwner; - private TextView repoNameInfo; - private TextView repoOwnerInfo; - private TextView repoDescriptionInfo; - private TextView repoWebsiteInfo; - private TextView repoSizeInfo; - private TextView repoDefaultBranchInfo; - private TextView repoSshUrlInfo; - private TextView repoCloneUrlInfo; - private TextView repoRepoUrlInfo; - private TextView repoForksCountInfo; - private TextView repoCreatedAtInfo; + private TextView repoMetaName; + private TextView repoMetaDescription; + private TextView repoMetaStars; + private TextView repoMetaPullRequests; + private LinearLayout repoMetaPullRequestsFrame; + private TextView repoMetaForks; + private TextView repoMetaSize; + private TextView repoMetaWatchers; + private TextView repoMetaCreatedAt; + private TextView repoMetaWebsite; + private Button repoAdditionalButton; private TextView repoFileContents; private LinearLayout repoMetaFrame; private ImageView repoMetaDataExpandCollapse; @@ -120,21 +119,23 @@ public class RepoInfoFragment extends Fragment { final String locale = tinyDb.getString("locale"); final String timeFormat = tinyDb.getString("dateFormat"); + ctx = getActivity(); + pageContent = v.findViewById(R.id.repoInfoLayout); pageContent.setVisibility(View.GONE); mProgressBar = v.findViewById(R.id.progress_bar); - repoNameInfo = v.findViewById(R.id.repoNameInfo); - repoOwnerInfo = v.findViewById(R.id.repoOwnerInfo); - repoDescriptionInfo = v.findViewById(R.id.repoDescriptionInfo); - repoWebsiteInfo = v.findViewById(R.id.repoWebsiteInfo); - repoSizeInfo = v.findViewById(R.id.repoSizeInfo); - repoDefaultBranchInfo = v.findViewById(R.id.repoDefaultBranchInfo); - repoSshUrlInfo = v.findViewById(R.id.repoSshUrlInfo); - repoCloneUrlInfo = v.findViewById(R.id.repoCloneUrlInfo); - repoRepoUrlInfo = v.findViewById(R.id.repoRepoUrlInfo); - repoForksCountInfo = v.findViewById(R.id.repoForksCountInfo); - repoCreatedAtInfo = v.findViewById(R.id.repoCreatedAtInfo); + repoMetaName = v.findViewById(R.id.repoMetaName); + repoMetaDescription = v.findViewById(R.id.repoMetaDescription); + repoMetaStars = v.findViewById(R.id.repoMetaStars); + repoMetaPullRequests = v.findViewById(R.id.repoMetaPullRequests); + repoMetaPullRequestsFrame = v.findViewById(R.id.repoMetaPullRequestsFrame); + repoMetaForks = v.findViewById(R.id.repoMetaForks); + repoMetaSize = v.findViewById(R.id.repoMetaSize); + repoMetaWatchers = v.findViewById(R.id.repoMetaWatchers); + repoMetaCreatedAt = v.findViewById(R.id.repoMetaCreatedAt); + repoMetaWebsite = v.findViewById(R.id.repoMetaWebsite); + repoAdditionalButton = v.findViewById(R.id.repoAdditionalButton); repoFileContents = v.findViewById(R.id.repoFileContents); repoMetaFrame = v.findViewById(R.id.repoMetaFrame); LinearLayout repoMetaFrameHeader = v.findViewById(R.id.repoMetaFrameHeader); @@ -148,15 +149,23 @@ public class RepoInfoFragment extends Fragment { getRepoInfo(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName, locale, timeFormat); getFileContents(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName, getResources().getString(R.string.defaultFilename)); + if(isExpandViewVisible()) { + toggleExpandView(); + } + + if(!isExpandViewMetaVisible()) { + toggleExpandViewMeta(); + } + fileContentsFrameHeader.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { - collapseExpandView(); + toggleExpandView(); } }); repoMetaFrameHeader.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { - collapseExpandViewMeta(); + toggleExpandViewMeta(); } }); @@ -179,7 +188,7 @@ public class RepoInfoFragment extends Fragment { void onFragmentInteraction(Uri uri); } - private void collapseExpandView() { + private void toggleExpandView() { if (repoFileContents.getVisibility() == View.GONE) { repoFilenameExpandCollapse.setImageResource(R.drawable.ic_arrow_up); @@ -193,10 +202,14 @@ public class RepoInfoFragment extends Fragment { //Animation slide_up = AnimationUtils.loadAnimation(getContext(), R.anim.slide_up); //fileContentsFrame.startAnimation(slide_up); } - } - private void collapseExpandViewMeta() { + private boolean isExpandViewVisible() { + return repoFileContents.getVisibility() == View.VISIBLE; + } + + private void toggleExpandViewMeta() { + if (repoMetaFrame.getVisibility() == View.GONE) { repoMetaDataExpandCollapse.setImageResource(R.drawable.ic_arrow_up); repoMetaFrame.setVisibility(View.VISIBLE); @@ -209,9 +222,12 @@ public class RepoInfoFragment extends Fragment { //Animation slide_up = AnimationUtils.loadAnimation(getContext(), R.anim.slide_up); //repoMetaFrame.startAnimation(slide_up); } - } + private boolean isExpandViewMetaVisible() { + return repoMetaFrame.getVisibility() == View.VISIBLE; + } + private void getRepoInfo(String instanceUrl, String token, final String owner, String repo, final String locale, final String timeFormat) { final TinyDB tinyDb = new TinyDB(getContext()); @@ -235,16 +251,64 @@ public class RepoInfoFragment extends Fragment { if (response.code() == 200) { assert repoInfo != null; - repoNameInfo.setText(repoInfo.getName()); - repoOwnerInfo.setText(owner); - repoDescriptionInfo.setText(repoInfo.getDescription()); - repoWebsiteInfo.setText(repoInfo.getWebsite()); - repoSizeInfo.setText(AppUtil.formatFileSize(repoInfo.getSize())); - repoDefaultBranchInfo.setText(repoInfo.getDefault_branch()); - repoSshUrlInfo.setText(repoInfo.getSsh_url()); - repoCloneUrlInfo.setText(repoInfo.getClone_url()); - repoRepoUrlInfo.setText(repoInfo.getHtml_url()); - repoForksCountInfo.setText(repoInfo.getForks_count()); + repoMetaName.setText(repoInfo.getName()); + repoMetaDescription.setText(repoInfo.getDescription()); + repoMetaStars.setText(repoInfo.getStars_count()); + + if(repoInfo.getOpen_pull_count() != null) { + repoMetaPullRequests.setText(repoInfo.getOpen_pull_count()); + } + else { + repoMetaPullRequestsFrame.setVisibility(View.GONE); + } + + repoMetaForks.setText(repoInfo.getForks_count()); + repoMetaWatchers.setText(repoInfo.getWatchers_count()); + + if(repoInfo.getSize() != 0) { + repoMetaSize.setText(AppUtil.formatFileSize(repoInfo.getSize())); + } + else { + repoMetaSize.setText("0"); + } + + repoMetaCreatedAt.setText(TimeHelper.formatTime(repoInfo.getCreated_at(), new Locale(locale), timeFormat, ctx)); + if(timeFormat.equals("pretty")) { + repoMetaCreatedAt.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(repoInfo.getCreated_at()), ctx)); + } + + String repoMetaUpdatedAt = TimeHelper.formatTime(repoInfo.getUpdated_at(), new Locale(locale), timeFormat, ctx); + + String website = (repoInfo.getWebsite().isEmpty()) ? getResources().getString(R.string.noDataWebsite) : repoInfo.getWebsite(); + repoMetaWebsite.setText(website); + + repoAdditionalButton.setOnClickListener(v -> { + + StringBuilder message = new StringBuilder(); + + message.append(getResources().getString(R.string.infoTabRepoDefaultBranch)) + .append(" :\n").append(repoInfo.getDefault_branch()).append("\n\n"); + + message.append(getResources().getString(R.string.infoTabRepoUpdatedAt)) + .append(" :\n").append(repoMetaUpdatedAt).append("\n\n"); + + message.append(getResources().getString(R.string.infoTabRepoSshUrl)) + .append(" :\n").append(repoInfo.getSsh_url()).append("\n\n"); + + message.append(getResources().getString(R.string.infoTabRepoCloneUrl)) + .append(" :\n").append(repoInfo.getClone_url()).append("\n\n"); + + message.append(getResources().getString(R.string.infoTabRepoRepoUrl)) + .append(" :\n").append(repoInfo.getHtml_url()); + + AlertDialog.Builder alertDialog = new AlertDialog.Builder(ctx); + + alertDialog.setTitle(getResources().getString(R.string.infoMoreInformation)); + alertDialog.setMessage(message); + alertDialog.setPositiveButton(getResources().getString(R.string.close), (dialog, which) -> dialog.dismiss()); + alertDialog.create().show(); + + }); if(repoInfo.getHas_issues() != null) { tinyDb.putBoolean("hasIssues", repoInfo.getHas_issues()); @@ -253,28 +317,6 @@ public class RepoInfoFragment extends Fragment { tinyDb.putBoolean("hasIssues", true); } - switch (timeFormat) { - case "pretty": { - PrettyTime prettyTime = new PrettyTime(new Locale(locale)); - String createdTime = prettyTime.format(repoInfo.getCreated_at()); - repoCreatedAtInfo.setText(createdTime); - repoCreatedAtInfo.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(repoInfo.getCreated_at()), getContext())); - break; - } - case "normal": { - DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd '" + getResources().getString(R.string.timeAtText) + "' HH:mm", new Locale(locale)); - String createdTime = formatter.format(repoInfo.getCreated_at()); - repoCreatedAtInfo.setText(createdTime); - break; - } - case "normal1": { - DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy '" + getResources().getString(R.string.timeAtText) + "' HH:mm", new Locale(locale)); - String createdTime = formatter.format(repoInfo.getCreated_at()); - repoCreatedAtInfo.setText(createdTime); - break; - } - } - mProgressBar.setVisibility(View.GONE); pageContent.setVisibility(View.VISIBLE); @@ -373,13 +415,14 @@ public class RepoInfoFragment extends Fragment { .build(); Spanned bodyWithMD = null; + if (response.body() != null) { bodyWithMD = markwon.toMarkdown(response.body()); } + assert bodyWithMD != null; markwon.setParsedMarkdown(repoFileContents, bodyWithMD); - } else if (response.code() == 401) { AlertDialogs.authorizationTokenRevokedDialog(ctx, getResources().getString(R.string.alertDialogTokenRevokedTitle), diff --git a/app/src/main/java/org/mian/gitnex/fragments/SettingsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/SettingsFragment.java index 9093f923..c84ac9c4 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/SettingsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/SettingsFragment.java @@ -1,7 +1,6 @@ package org.mian.gitnex.fragments; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; @@ -11,16 +10,16 @@ import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.Switch; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.Fragment; import org.mian.gitnex.R; import org.mian.gitnex.activities.MainActivity; import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.helpers.ssl.MemorizingTrustManager; import org.mian.gitnex.util.TinyDB; import java.util.Objects; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; -import androidx.fragment.app.Fragment; /** * Author M M Arif @@ -28,453 +27,452 @@ import androidx.fragment.app.Fragment; public class SettingsFragment extends Fragment { - private Context ctx = null; + private Context ctx = null; - private static String[] langList = {"Arabic", "Chinese", "English", "Finnish", "French", "German", "Italian", "Latvian", "Persian", "Portuguese/Brazilian", "Russian", "Serbian", "Spanish", "Turkish", "Ukrainian"}; - private static int langSelectedChoice = 0; + private static String[] langList = {"Arabic", "Chinese", "English", "Finnish", "French", "German", "Italian", "Latvian", "Persian", "Polish", "Portuguese/Brazilian", "Russian", "Serbian", "Spanish", "Turkish", "Ukrainian"}; + private static int langSelectedChoice = 0; - private static String[] timeList = {"Pretty", "Normal"}; - private static int timeSelectedChoice = 0; + private static String[] timeList = {"Pretty", "Normal"}; + private static int timeSelectedChoice = 0; - private static String[] codeBlockList = {"Green - Black", "White - Black", "Grey - Black", "White - Grey", "Dark - White"}; - private static int codeBlockSelectedChoice = 0; + private static String[] codeBlockList = {"Green - Black", "White - Black", "Grey - Black", "White - Grey", "Dark - White"}; + private static int codeBlockSelectedChoice = 0; - private static String[] homeScreenList = {"My Repositories", "Starred Repositories", "Organizations", "Repositories", "Profile"}; - private static int homeScreenSelectedChoice = 0; + private static String[] homeScreenList = {"My Repositories", "Starred Repositories", "Organizations", "Repositories", "Profile"}; + private static int homeScreenSelectedChoice = 0; - private static String[] customFontList = {"Roboto", "Manrope", "Source Code Pro"}; - private static int customFontSelectedChoice = 0; + private static String[] customFontList = {"Roboto", "Manrope", "Source Code Pro"}; + private static int customFontSelectedChoice = 0; - private static String[] themeList = {"Dark", "Light"}; - private static int themeSelectedChoice = 0; + private static String[] themeList = {"Dark", "Light"}; + private static int themeSelectedChoice = 0; - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - View v = inflater.inflate(R.layout.fragment_settings, container, false); - final TinyDB tinyDb = new TinyDB(getContext()); + View v = inflater.inflate(R.layout.fragment_settings, container, false); + final TinyDB tinyDb = new TinyDB(getContext()); - final TextView tvLanguageSelected = v.findViewById(R.id.tvLanguageSelected); // setter for en, fr - final TextView tvDateTimeSelected = v.findViewById(R.id.tvDateTimeSelected); // setter for time - final TextView codeBlockSelected = v.findViewById(R.id.codeBlockSelected); // setter for code block - final TextView homeScreenSelected = v.findViewById(R.id.homeScreenSelected); // setter for home screen - final TextView customFontSelected = v.findViewById(R.id.customFontSelected); // setter for custom font - final TextView themeSelected = v.findViewById(R.id.themeSelected); // setter for theme + final TextView tvLanguageSelected = v.findViewById(R.id.tvLanguageSelected); // setter for en, fr + final TextView tvDateTimeSelected = v.findViewById(R.id.tvDateTimeSelected); // setter for time + final TextView codeBlockSelected = v.findViewById(R.id.codeBlockSelected); // setter for code block + final TextView homeScreenSelected = v.findViewById(R.id.homeScreenSelected); // setter for home screen + final TextView customFontSelected = v.findViewById(R.id.customFontSelected); // setter for custom font + final TextView themeSelected = v.findViewById(R.id.themeSelected); // setter for theme - LinearLayout langFrame = v.findViewById(R.id.langFrame); - LinearLayout timeFrame = v.findViewById(R.id.timeFrame); - LinearLayout codeBlockFrame = v.findViewById(R.id.codeBlockFrame); - LinearLayout homeScreenFrame = v.findViewById(R.id.homeScreenFrame); - LinearLayout customFontFrame = v.findViewById(R.id.customFontFrame); - LinearLayout themeFrame = v.findViewById(R.id.themeSelectionFrame); - LinearLayout certsFrame = v.findViewById(R.id.certsFrame); + LinearLayout langFrame = v.findViewById(R.id.langFrame); + LinearLayout timeFrame = v.findViewById(R.id.timeFrame); + LinearLayout codeBlockFrame = v.findViewById(R.id.codeBlockFrame); + LinearLayout homeScreenFrame = v.findViewById(R.id.homeScreenFrame); + LinearLayout customFontFrame = v.findViewById(R.id.customFontFrame); + LinearLayout themeFrame = v.findViewById(R.id.themeSelectionFrame); + LinearLayout certsFrame = v.findViewById(R.id.certsFrame); - Switch counterBadgesSwitch = v.findViewById(R.id.switchCounterBadge); - Switch pdfModeSwitch = v.findViewById(R.id.switchPdfMode); - TextView helpTranslate = v.findViewById(R.id.helpTranslate); + Switch counterBadgesSwitch = v.findViewById(R.id.switchCounterBadge); + Switch pdfModeSwitch = v.findViewById(R.id.switchPdfMode); + TextView helpTranslate = v.findViewById(R.id.helpTranslate); - helpTranslate.setOnClickListener(v12 -> { + helpTranslate.setOnClickListener(v12 -> { - Intent intent = new Intent(); - intent.setAction(Intent.ACTION_VIEW); - intent.addCategory(Intent.CATEGORY_BROWSABLE); - intent.setData(Uri.parse(getResources().getString(R.string.crowdInLink))); - startActivity(intent); + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_VIEW); + intent.addCategory(Intent.CATEGORY_BROWSABLE); + intent.setData(Uri.parse(getResources().getString(R.string.crowdInLink))); + startActivity(intent); - }); + }); - if(!tinyDb.getString("localeStr").isEmpty()) { - tvLanguageSelected.setText(tinyDb.getString("localeStr")); - } + if(!tinyDb.getString("localeStr").isEmpty()) { + tvLanguageSelected.setText(tinyDb.getString("localeStr")); + } - if(!tinyDb.getString("timeStr").isEmpty()) { - tvDateTimeSelected.setText(tinyDb.getString("timeStr")); - } + if(!tinyDb.getString("timeStr").isEmpty()) { + tvDateTimeSelected.setText(tinyDb.getString("timeStr")); + } - if(!tinyDb.getString("codeBlockStr").isEmpty()) { - codeBlockSelected.setText(tinyDb.getString("codeBlockStr")); - } + if(!tinyDb.getString("codeBlockStr").isEmpty()) { + codeBlockSelected.setText(tinyDb.getString("codeBlockStr")); + } - if(!tinyDb.getString("homeScreenStr").isEmpty()) { - homeScreenSelected.setText(tinyDb.getString("homeScreenStr")); - } + if(!tinyDb.getString("homeScreenStr").isEmpty()) { + homeScreenSelected.setText(tinyDb.getString("homeScreenStr")); + } if(!tinyDb.getString("customFontStr").isEmpty()) { customFontSelected.setText(tinyDb.getString("customFontStr")); } - if(!tinyDb.getString("themeStr").isEmpty()) { - themeSelected.setText(tinyDb.getString("themeStr")); - } + if(!tinyDb.getString("themeStr").isEmpty()) { + themeSelected.setText(tinyDb.getString("themeStr")); + } - if(langSelectedChoice == 0) { - langSelectedChoice = tinyDb.getInt("langId"); - } + if(langSelectedChoice == 0) { + langSelectedChoice = tinyDb.getInt("langId"); + } - if(timeSelectedChoice == 0) { - timeSelectedChoice = tinyDb.getInt("timeId"); - } + if(timeSelectedChoice == 0) { + timeSelectedChoice = tinyDb.getInt("timeId"); + } - if(codeBlockSelectedChoice == 0) { - codeBlockSelectedChoice = tinyDb.getInt("codeBlockId"); - } + if(codeBlockSelectedChoice == 0) { + codeBlockSelectedChoice = tinyDb.getInt("codeBlockId"); + } - if(homeScreenSelectedChoice == 0) { - homeScreenSelectedChoice = tinyDb.getInt("homeScreenId"); - } + if(homeScreenSelectedChoice == 0) { + homeScreenSelectedChoice = tinyDb.getInt("homeScreenId"); + } - if(customFontSelectedChoice == 0) { - customFontSelectedChoice = tinyDb.getInt("customFontId"); - } + if(customFontSelectedChoice == 0) { + customFontSelectedChoice = tinyDb.getInt("customFontId"); + } - if(themeSelectedChoice == 0) { - themeSelectedChoice = tinyDb.getInt("themeId"); - } + if(themeSelectedChoice == 0) { + themeSelectedChoice = tinyDb.getInt("themeId"); + } - if(tinyDb.getBoolean("enableCounterBadges")) { - counterBadgesSwitch.setChecked(true); - } - else { - counterBadgesSwitch.setChecked(false); - } + if(tinyDb.getBoolean("enableCounterBadges")) { + counterBadgesSwitch.setChecked(true); + } + else { + counterBadgesSwitch.setChecked(false); + } - if(tinyDb.getBoolean("enablePdfMode")) { - pdfModeSwitch.setChecked(true); - } - else { - pdfModeSwitch.setChecked(false); - } + if(tinyDb.getBoolean("enablePdfMode")) { + pdfModeSwitch.setChecked(true); + } + else { + pdfModeSwitch.setChecked(false); + } - // certs deletion - certsFrame.setOnClickListener(v1 -> { + // certs deletion + certsFrame.setOnClickListener(v1 -> { - AlertDialog.Builder builder = new AlertDialog.Builder(ctx); - builder.setTitle(getResources().getString(R.string.settingsCertsPopupTitle)); - builder.setMessage(getResources().getString(R.string.settingsCertsPopupMessage)); - builder.setPositiveButton(R.string.menuDeleteText, (dialog, which) -> { + AlertDialog.Builder builder = new AlertDialog.Builder(ctx); + builder.setTitle(getResources().getString(R.string.settingsCertsPopupTitle)); + builder.setMessage(getResources().getString(R.string.settingsCertsPopupMessage)); + builder.setPositiveButton(R.string.menuDeleteText, (dialog, which) -> { - ctx.getSharedPreferences(MemorizingTrustManager.KEYSTORE_NAME, Context.MODE_PRIVATE) - .edit() - .remove(MemorizingTrustManager.KEYSTORE_KEY) - .apply(); + ctx.getSharedPreferences(MemorizingTrustManager.KEYSTORE_NAME, Context.MODE_PRIVATE).edit().remove(MemorizingTrustManager.KEYSTORE_KEY).apply(); - MainActivity.logout(Objects.requireNonNull(getActivity()), ctx); + MainActivity.logout(Objects.requireNonNull(getActivity()), ctx); - }); + }); - builder.setNeutralButton(R.string.cancelButton, (dialog, which) -> dialog.dismiss()); - builder.create().show(); + builder.setNeutralButton(R.string.cancelButton, (dialog, which) -> dialog.dismiss()); + builder.create().show(); - }); + }); - // counter badge switcher - counterBadgesSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { + // counter badge switcher + counterBadgesSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { if (isChecked) { tinyDb.putBoolean("enableCounterBadges", true); - tinyDb.putString("enableCounterBadgesInit", "yes"); Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); } else { tinyDb.putBoolean("enableCounterBadges", false); - tinyDb.putString("enableCounterBadgesInit", "yes"); Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); } - }); + }); - // pdf night mode switcher - pdfModeSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { + // pdf night mode switcher + pdfModeSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { - if (isChecked) { - tinyDb.putBoolean("enablePdfMode", true); - tinyDb.putString("enablePdfModeInit", "yes"); - Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); - } - else { - tinyDb.putBoolean("enablePdfMode", false); - tinyDb.putString("enablePdfModeInit", "yes"); - Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); - } + if(isChecked) { + tinyDb.putBoolean("enablePdfMode", true); + tinyDb.putString("enablePdfModeInit", "yes"); + Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + } + else { + tinyDb.putBoolean("enablePdfMode", false); + tinyDb.putString("enablePdfModeInit", "yes"); + Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + } - }); + }); - // theme selection dialog - themeFrame.setOnClickListener(view -> { + // theme selection dialog + themeFrame.setOnClickListener(view -> { - AlertDialog.Builder tsBuilder = new AlertDialog.Builder(ctx); + AlertDialog.Builder tsBuilder = new AlertDialog.Builder(ctx); - tsBuilder.setTitle(R.string.themeSelectorDialogTitle); - if(themeSelectedChoice != -1) { - tsBuilder.setCancelable(true); - } - else { - tsBuilder.setCancelable(false); - } + tsBuilder.setTitle(R.string.themeSelectorDialogTitle); + if(themeSelectedChoice != -1) { + tsBuilder.setCancelable(true); + } + else { + tsBuilder.setCancelable(false); + } - tsBuilder.setSingleChoiceItems(themeList, themeSelectedChoice, (dialogInterfaceTheme, i) -> { + tsBuilder.setSingleChoiceItems(themeList, themeSelectedChoice, (dialogInterfaceTheme, i) -> { - themeSelectedChoice = i; - themeSelected.setText(themeList[i]); - tinyDb.putString("themeStr", themeList[i]); - tinyDb.putInt("themeId", i); + themeSelectedChoice = i; + themeSelected.setText(themeList[i]); + tinyDb.putString("themeStr", themeList[i]); + tinyDb.putInt("themeId", i); - Objects.requireNonNull(getActivity()).recreate(); - getActivity().overridePendingTransition(0, 0); - dialogInterfaceTheme.dismiss(); - Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + Objects.requireNonNull(getActivity()).recreate(); + getActivity().overridePendingTransition(0, 0); + dialogInterfaceTheme.dismiss(); + Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); - }); + }); - AlertDialog cfDialog = tsBuilder.create(); - cfDialog.show(); - - }); - - // custom font dialog - customFontFrame.setOnClickListener(view -> { - - AlertDialog.Builder cfBuilder = new AlertDialog.Builder(ctx); - - cfBuilder.setTitle(R.string.settingsCustomFontSelectorDialogTitle); - if(customFontSelectedChoice != -1) { - cfBuilder.setCancelable(true); - } - else { - cfBuilder.setCancelable(false); - } + AlertDialog cfDialog = tsBuilder.create(); + cfDialog.show(); + + }); + + // custom font dialog + customFontFrame.setOnClickListener(view -> { + + AlertDialog.Builder cfBuilder = new AlertDialog.Builder(ctx); + + cfBuilder.setTitle(R.string.settingsCustomFontSelectorDialogTitle); + if(customFontSelectedChoice != -1) { + cfBuilder.setCancelable(true); + } + else { + cfBuilder.setCancelable(false); + } - cfBuilder.setSingleChoiceItems(customFontList, customFontSelectedChoice, (dialogInterfaceCustomFont, i) -> { + cfBuilder.setSingleChoiceItems(customFontList, customFontSelectedChoice, (dialogInterfaceCustomFont, i) -> { - customFontSelectedChoice = i; - customFontSelected.setText(customFontList[i]); - tinyDb.putString("customFontStr", customFontList[i]); - tinyDb.putInt("customFontId", i); + customFontSelectedChoice = i; + customFontSelected.setText(customFontList[i]); + tinyDb.putString("customFontStr", customFontList[i]); + tinyDb.putInt("customFontId", i); - Objects.requireNonNull(getActivity()).recreate(); - getActivity().overridePendingTransition(0, 0); - dialogInterfaceCustomFont.dismiss(); - Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + Objects.requireNonNull(getActivity()).recreate(); + getActivity().overridePendingTransition(0, 0); + dialogInterfaceCustomFont.dismiss(); + Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); - }); - - AlertDialog cfDialog = cfBuilder.create(); - cfDialog.show(); + }); + + AlertDialog cfDialog = cfBuilder.create(); + cfDialog.show(); - }); + }); - // home screen dialog - homeScreenFrame.setOnClickListener(view -> { + // home screen dialog + homeScreenFrame.setOnClickListener(view -> { - AlertDialog.Builder hsBuilder = new AlertDialog.Builder(ctx); + AlertDialog.Builder hsBuilder = new AlertDialog.Builder(ctx); - hsBuilder.setTitle(R.string.settingshomeScreenSelectorDialogTitle); - if(homeScreenSelectedChoice != -1) { - hsBuilder.setCancelable(true); - } - else { - hsBuilder.setCancelable(false); - } - - hsBuilder.setSingleChoiceItems(homeScreenList, homeScreenSelectedChoice, (dialogInterfaceHomeScreen, i) -> { - - homeScreenSelectedChoice = i; - homeScreenSelected.setText(homeScreenList[i]); - tinyDb.putString("homeScreenStr", homeScreenList[i]); - tinyDb.putInt("homeScreenId", i); - - dialogInterfaceHomeScreen.dismiss(); - Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); - - }); - - AlertDialog hsDialog = hsBuilder.create(); - hsDialog.show(); - - }); - - // code block dialog - codeBlockFrame.setOnClickListener(view -> { - - AlertDialog.Builder cBuilder = new AlertDialog.Builder(ctx); - - cBuilder.setTitle(R.string.settingsCodeBlockSelectorDialogTitle); - if(codeBlockSelectedChoice != -1) { - cBuilder.setCancelable(true); - } - else { - cBuilder.setCancelable(false); - } - - cBuilder.setSingleChoiceItems(codeBlockList, codeBlockSelectedChoice, (dialogInterfaceCodeBlock, i) -> { - - codeBlockSelectedChoice = i; - codeBlockSelected.setText(codeBlockList[i]); - tinyDb.putString("codeBlockStr", codeBlockList[i]); - tinyDb.putInt("codeBlockId", i); - - switch (codeBlockList[i]) { - case "White - Black": - tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.white)); - tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.black)); - break; - case "Grey - Black": - tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.colorAccent)); - tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.black)); - break; - case "White - Grey": - tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.white)); - tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.colorAccent)); - break; - case "Dark - White": - tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.colorPrimary)); - tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.white)); - break; - default: - tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.colorLightGreen)); - tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.black)); - break; - } - - dialogInterfaceCodeBlock.dismiss(); - Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); - - }); - - AlertDialog cDialog = cBuilder.create(); - cDialog.show(); - - }); - - // language dialog - langFrame.setOnClickListener(view -> { - - AlertDialog.Builder lBuilder = new AlertDialog.Builder(ctx); - - lBuilder.setTitle(R.string.settingsLanguageSelectorDialogTitle); - if(langSelectedChoice != -1) { - lBuilder.setCancelable(true); - } - else { - lBuilder.setCancelable(false); - } - - lBuilder.setSingleChoiceItems(langList, langSelectedChoice, (dialogInterface, i) -> { - - langSelectedChoice = i; - tvLanguageSelected.setText(langList[i]); - tinyDb.putString("localeStr", langList[i]); - tinyDb.putInt("langId", i); - - switch (langList[i]) { - case "Arabic": - tinyDb.putString("locale", "ar"); - break; - case "Chinese": - tinyDb.putString("locale", "zh"); - break; - case "Finnish": - tinyDb.putString("locale", "fi"); - break; - case "French": - tinyDb.putString("locale", "fr"); - break; - case "German": - tinyDb.putString("locale", "de"); - break; - case "Italian": - tinyDb.putString("locale", "it"); - break; - case "Latvian": - tinyDb.putString("locale", "lv"); - break; - case "Persian": - tinyDb.putString("locale", "fa"); - break; - case "Portuguese/Brazilian": - tinyDb.putString("locale", "pt"); - break; - case "Russian": - tinyDb.putString("locale", "ru"); - break; - case "Serbian": - tinyDb.putString("locale", "sr"); - break; - case "Spanish": - tinyDb.putString("locale", "es"); - break; - case "Turkish": - tinyDb.putString("locale", "tr"); - break; - case "Ukrainian": - tinyDb.putString("locale", "uk"); - break; - default: - tinyDb.putString("locale", "en"); - break; - } - - dialogInterface.dismiss(); - Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); - Objects.requireNonNull(getActivity()).recreate(); - getActivity().overridePendingTransition(0, 0); - - }); - - lBuilder.setNegativeButton(getString(R.string.cancelButton), (dialog, which) -> dialog.dismiss()); - - AlertDialog lDialog = lBuilder.create(); - lDialog.show(); - - }); - - // time n date dialog - timeFrame.setOnClickListener(view -> { - - AlertDialog.Builder tBuilder = new AlertDialog.Builder(ctx); - - tBuilder.setTitle(R.string.settingsTimeSelectorDialogTitle); - if(timeSelectedChoice != -1) { - tBuilder.setCancelable(true); - } - else { - tBuilder.setCancelable(false); - } - - tBuilder.setSingleChoiceItems(timeList, timeSelectedChoice, (dialogInterfaceTime, i) -> { - - timeSelectedChoice = i; - tvDateTimeSelected.setText(timeList[i]); - tinyDb.putString("timeStr", timeList[i]); - tinyDb.putInt("timeId", i); - - if ("Normal".equals(timeList[i])) { - tinyDb.putString("dateFormat", "normal"); - } else { - tinyDb.putString("dateFormat", "pretty"); - } - - dialogInterfaceTime.dismiss(); - Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); - - }); - - AlertDialog tDialog = tBuilder.create(); - tDialog.show(); - - }); - - return v; - - } - - @Override - public void onAttach(@NonNull Context context) { - - super.onAttach(context); - ctx = context; - - } + hsBuilder.setTitle(R.string.settingshomeScreenSelectorDialogTitle); + if(homeScreenSelectedChoice != -1) { + hsBuilder.setCancelable(true); + } + else { + hsBuilder.setCancelable(false); + } + + hsBuilder.setSingleChoiceItems(homeScreenList, homeScreenSelectedChoice, (dialogInterfaceHomeScreen, i) -> { + + homeScreenSelectedChoice = i; + homeScreenSelected.setText(homeScreenList[i]); + tinyDb.putString("homeScreenStr", homeScreenList[i]); + tinyDb.putInt("homeScreenId", i); + + dialogInterfaceHomeScreen.dismiss(); + Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + + }); + + AlertDialog hsDialog = hsBuilder.create(); + hsDialog.show(); + + }); + + // code block dialog + codeBlockFrame.setOnClickListener(view -> { + + AlertDialog.Builder cBuilder = new AlertDialog.Builder(ctx); + + cBuilder.setTitle(R.string.settingsCodeBlockSelectorDialogTitle); + if(codeBlockSelectedChoice != -1) { + cBuilder.setCancelable(true); + } + else { + cBuilder.setCancelable(false); + } + + cBuilder.setSingleChoiceItems(codeBlockList, codeBlockSelectedChoice, (dialogInterfaceCodeBlock, i) -> { + + codeBlockSelectedChoice = i; + codeBlockSelected.setText(codeBlockList[i]); + tinyDb.putString("codeBlockStr", codeBlockList[i]); + tinyDb.putInt("codeBlockId", i); + + switch(codeBlockList[i]) { + case "White - Black": + tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.white)); + tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.black)); + break; + case "Grey - Black": + tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.colorAccent)); + tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.black)); + break; + case "White - Grey": + tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.white)); + tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.colorAccent)); + break; + case "Dark - White": + tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.colorPrimary)); + tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.white)); + break; + default: + tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.colorLightGreen)); + tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.black)); + break; + } + + dialogInterfaceCodeBlock.dismiss(); + Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + + }); + + AlertDialog cDialog = cBuilder.create(); + cDialog.show(); + + }); + + // language dialog + langFrame.setOnClickListener(view -> { + + AlertDialog.Builder lBuilder = new AlertDialog.Builder(ctx); + + lBuilder.setTitle(R.string.settingsLanguageSelectorDialogTitle); + if(langSelectedChoice != -1) { + lBuilder.setCancelable(true); + } + else { + lBuilder.setCancelable(false); + } + + lBuilder.setSingleChoiceItems(langList, langSelectedChoice, (dialogInterface, i) -> { + + langSelectedChoice = i; + tvLanguageSelected.setText(langList[i]); + tinyDb.putString("localeStr", langList[i]); + tinyDb.putInt("langId", i); + + switch(langList[i]) { + case "Arabic": + tinyDb.putString("locale", "ar"); + break; + case "Chinese": + tinyDb.putString("locale", "zh"); + break; + case "Finnish": + tinyDb.putString("locale", "fi"); + break; + case "French": + tinyDb.putString("locale", "fr"); + break; + case "German": + tinyDb.putString("locale", "de"); + break; + case "Italian": + tinyDb.putString("locale", "it"); + break; + case "Latvian": + tinyDb.putString("locale", "lv"); + break; + case "Persian": + tinyDb.putString("locale", "fa"); + break; + case "Polish": + tinyDb.putString("locale", "pl"); + break; + case "Portuguese/Brazilian": + tinyDb.putString("locale", "pt"); + break; + case "Russian": + tinyDb.putString("locale", "ru"); + break; + case "Serbian": + tinyDb.putString("locale", "sr"); + break; + case "Spanish": + tinyDb.putString("locale", "es"); + break; + case "Turkish": + tinyDb.putString("locale", "tr"); + break; + case "Ukrainian": + tinyDb.putString("locale", "uk"); + break; + default: + tinyDb.putString("locale", "en"); + break; + } + + dialogInterface.dismiss(); + Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + Objects.requireNonNull(getActivity()).recreate(); + getActivity().overridePendingTransition(0, 0); + + }); + + lBuilder.setNegativeButton(getString(R.string.cancelButton), (dialog, which) -> dialog.dismiss()); + + AlertDialog lDialog = lBuilder.create(); + lDialog.show(); + + }); + + // time n date dialog + timeFrame.setOnClickListener(view -> { + + AlertDialog.Builder tBuilder = new AlertDialog.Builder(ctx); + + tBuilder.setTitle(R.string.settingsTimeSelectorDialogTitle); + if(timeSelectedChoice != -1) { + tBuilder.setCancelable(true); + } + else { + tBuilder.setCancelable(false); + } + + tBuilder.setSingleChoiceItems(timeList, timeSelectedChoice, (dialogInterfaceTime, i) -> { + + timeSelectedChoice = i; + tvDateTimeSelected.setText(timeList[i]); + tinyDb.putString("timeStr", timeList[i]); + tinyDb.putInt("timeId", i); + + if("Normal".equals(timeList[i])) { + tinyDb.putString("dateFormat", "normal"); + } + else { + tinyDb.putString("dateFormat", "pretty"); + } + + dialogInterfaceTime.dismiss(); + Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + + }); + + AlertDialog tDialog = tBuilder.create(); + tDialog.show(); + + }); + + return v; + + } + + @Override + public void onAttach(@NonNull Context context) { + + super.onAttach(context); + ctx = context; + + } } diff --git a/app/src/main/java/org/mian/gitnex/helpers/TimeHelper.java b/app/src/main/java/org/mian/gitnex/helpers/TimeHelper.java index 6096927e..b1e6419e 100644 --- a/app/src/main/java/org/mian/gitnex/helpers/TimeHelper.java +++ b/app/src/main/java/org/mian/gitnex/helpers/TimeHelper.java @@ -1,5 +1,8 @@ package org.mian.gitnex.helpers; +import android.content.Context; +import org.mian.gitnex.R; +import org.ocpsoft.prettytime.PrettyTime; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -25,6 +28,30 @@ public class TimeHelper { } + public static String formatTime(Date date, Locale locale, String timeFormat, Context context) { + + switch (timeFormat) { + + case "pretty": { + PrettyTime prettyTime = new PrettyTime(Locale.getDefault()); + return prettyTime.format(date); + } + + case "normal": { + DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd '" + context.getResources().getString(R.string.timeAtText) + "' HH:mm", locale); + return formatter.format(date); + } + + case "normal1": { + DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy '" + context.getResources().getString(R.string.timeAtText) + "' HH:mm", locale); + return formatter.format(date); + } + + } + + return ""; + } + public static String customDateFormatForToastDateFormat(Date customDate) { DateFormat format = DateFormat.getDateTimeInstance(); diff --git a/app/src/main/java/org/mian/gitnex/items/CommitsItems.java b/app/src/main/java/org/mian/gitnex/items/CommitsItems.java index bfa2a69f..8c3b03ef 100644 --- a/app/src/main/java/org/mian/gitnex/items/CommitsItems.java +++ b/app/src/main/java/org/mian/gitnex/items/CommitsItems.java @@ -138,26 +138,10 @@ public class CommitsItems extends AbstractItem" + ctx.getResources().getString(R.string.viewInBrowser) + " ")); diff --git a/app/src/main/java/org/mian/gitnex/models/UserRepositories.java b/app/src/main/java/org/mian/gitnex/models/UserRepositories.java index 45c9fe32..00cc4885 100644 --- a/app/src/main/java/org/mian/gitnex/models/UserRepositories.java +++ b/app/src/main/java/org/mian/gitnex/models/UserRepositories.java @@ -23,7 +23,7 @@ public class UserRepositories { private String html_url; private String default_branch; private Date created_at; - private String updated_at; + private Date updated_at; private String clone_url; private long size; private String ssh_url; @@ -84,7 +84,7 @@ public class UserRepositories { return created_at; } - public String getUpdated_at() { + public Date getUpdated_at() { return updated_at; } diff --git a/app/src/main/res/layout/activity_issue_detail.xml b/app/src/main/res/layout/activity_issue_detail.xml index 302ff05b..b04a941a 100644 --- a/app/src/main/res/layout/activity_issue_detail.xml +++ b/app/src/main/res/layout/activity_issue_detail.xml @@ -212,6 +212,19 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/bottom_sheet_single_issue_layout.xml b/app/src/main/res/layout/bottom_sheet_single_issue_layout.xml index 2710d58e..b9c3a215 100644 --- a/app/src/main/res/layout/bottom_sheet_single_issue_layout.xml +++ b/app/src/main/res/layout/bottom_sheet_single_issue_layout.xml @@ -30,18 +30,6 @@ android:visibility="gone" android:padding="16dp" /> - - diff --git a/app/src/main/res/layout/fragment_my_repositories.xml b/app/src/main/res/layout/fragment_my_repositories.xml index f079ce0f..764019b3 100644 --- a/app/src/main/res/layout/fragment_my_repositories.xml +++ b/app/src/main/res/layout/fragment_my_repositories.xml @@ -38,7 +38,7 @@ android:layout_alignParentBottom="true" android:layout_alignParentEnd="true" android:background="@drawable/circle" - android:padding="12dp" + android:padding="@dimen/fab_padding" android:contentDescription="@string/addNewContent" /> @@ -52,214 +53,267 @@ + android:layout_height="wrap_content" + android:orientation="vertical"> - - - - + android:textSize="22sp" + android:textStyle="bold" + tools:text="GitNex" /> - - - - - - - - - - + tools:text="Android client for Gitea https://gitnex.com" /> - + android:layout_marginTop="20dp" + android:baselineAligned="false" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:layout_marginBottom="20dp" + android:orientation="horizontal" + android:paddingLeft="15dp" + android:paddingRight="15dp"> - + + + + + + + + + + + + android:layout_marginBottom="20dp" + android:orientation="horizontal" + android:paddingLeft="15dp" + android:paddingRight="15dp"> - + + + + + + + + + + + + android:layout_marginBottom="20dp" + android:orientation="horizontal" + android:paddingLeft="15dp" + android:paddingRight="15dp"> - + - + - + - + + - + - - - - - - - +