Add fragment/activity

This commit is contained in:
M M Arif 2022-09-09 08:41:52 +05:00
parent 1663d8f74d
commit 83e34c7822
11 changed files with 589 additions and 13 deletions

View file

@ -53,10 +53,10 @@ dependencies {
def lifecycle_version = '2.5.1'
def markwon_version = '4.6.2'
def work_version = "2.7.1"
def acra = '5.8.4'
def acra = '5.9.6'
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.appcompat:appcompat:1.5.0'
implementation 'androidx.appcompat:appcompat:1.5.1'
implementation 'com.google.android.material:material:1.6.1'
implementation 'androidx.compose.material3:material3:1.0.0-alpha15'
implementation 'androidx.compose.material3:material3-window-size-class:1.0.0-alpha15'
@ -68,7 +68,7 @@ dependencies {
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.2'
implementation "com.google.code.gson:gson:2.9.0"
implementation 'com.google.code.gson:gson:2.9.1'
implementation "com.squareup.picasso:picasso:2.71828"
implementation 'jp.wasabeef:picasso-transformations:2.4.0'
implementation 'jp.co.cyberagent.android:gpuimage:2.1.0'
@ -93,7 +93,7 @@ dependencies {
implementation "io.noties.markwon:simple-ext:$markwon_version"
implementation 'org.codeberg.qwerty287:markwonprism4j:9d3ef078cd'
implementation 'org.codeberg.qwerty287:Prism4j:3.0.0'
implementation 'com.google.guava:guava:31.1-android'
implementation 'com.google.guava:guava:31.1-jre'
implementation "io.noties.markwon:image-picasso:$markwon_version"
implementation "com.github.HamidrezaAmz:BreadcrumbsView:0.2.9"
//noinspection GradleDependency

View file

@ -169,6 +169,10 @@
android:name=".activities.CodeEditorActivity"
android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"
android:windowSoftInputMode="adjustResize"/>
<activity
android:name=".activities.CreateNoteActivity"
android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"
android:windowSoftInputMode="adjustResize" />
<meta-data
android:name="com.samsung.android.keepalive.density"

View file

@ -0,0 +1,96 @@
package org.mian.gitnex.activities;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.text.Editable;
import android.text.Spanned;
import android.text.style.ClickableSpan;
import android.text.style.ReplacementSpan;
import android.text.style.StrikethroughSpan;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.mian.gitnex.databinding.ActivityCreateNoteBinding;
import io.noties.markwon.Markwon;
import io.noties.markwon.SoftBreakAddsNewLinePlugin;
import io.noties.markwon.core.MarkwonTheme;
import io.noties.markwon.core.spans.BlockQuoteSpan;
import io.noties.markwon.core.spans.CodeSpan;
import io.noties.markwon.core.spans.HeadingSpan;
import io.noties.markwon.core.spans.LinkSpan;
/**
* @author M M Arif
*/
public class CreateNoteActivity extends BaseActivity {
private ActivityCreateNoteBinding activityCreateNoteBinding;
private View.OnClickListener onClickListener;
private final View.OnClickListener createNoteListener = v -> processNewNote();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activityCreateNoteBinding = ActivityCreateNoteBinding.inflate(getLayoutInflater());
setContentView(activityCreateNoteBinding.getRoot());
//boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
activityCreateNoteBinding.noteTitle.requestFocus();
assert imm != null;
imm.showSoftInput(activityCreateNoteBinding.noteTitle, InputMethodManager.SHOW_IMPLICIT);
/*activityCreateNoteBinding.setOnTouchListener((touchView, motionEvent) -> {
touchView.getParent().requestDisallowInterceptTouchEvent(true);
if((motionEvent.getAction() & MotionEvent.ACTION_UP) != 0 && (motionEvent.getActionMasked() & MotionEvent.ACTION_UP) != 0) {
touchView.getParent().requestDisallowInterceptTouchEvent(false);
}
return false;
});*/
initCloseListener();
activityCreateNoteBinding.close.setOnClickListener(onClickListener);
//createOrganizationButton = activityCreateOrganizationBinding.createNewOrganizationButton;
/*if(!connToInternet) {
activityCreateNoteBinding.createNote.setEnabled(false);
}
else {
activityCreateNoteBinding.createNote.setOnClickListener(createNoteListener);
}*/
}
private void processNewNote() {
}
private void initCloseListener() {
onClickListener = view -> finish();
}
private void disableProcessButton() {
//activityCreateNoteBinding.createNote.setEnabled(false);
}
private void enableProcessButton() {
//activityCreateNoteBinding.createNote.setEnabled(true);
}
}

View file

@ -129,6 +129,9 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
else if(fragmentById instanceof MostVisitedReposFragment) {
toolbarTitle.setText(getResources().getString(R.string.navMostVisited));
}
else if(fragmentById instanceof NotesFragment) {
toolbarTitle.setText(getResources().getString(R.string.navNotes));
}
else if(fragmentById instanceof DraftsFragment) {
toolbarTitle.setText(getResources().getString(R.string.titleDrafts));
}
@ -394,6 +397,11 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new MostVisitedReposFragment()).commit();
navigationView.setCheckedItem(R.id.nav_most_visited);
break;
case 10:
toolbarTitle.setText(getResources().getString(R.string.navNotes));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new NotesFragment()).commit();
navigationView.setCheckedItem(R.id.nav_notes);
break;
default:
toolbarTitle.setText(getResources().getString(R.string.navMyRepos));
@ -499,7 +507,6 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
}
break;
}
}
@Override
@ -584,6 +591,11 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
toolbarTitle.setText(getResources().getString(R.string.navMostVisited));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new MostVisitedReposFragment()).commit();
}
else if(id == R.id.nav_notes) {
toolbarTitle.setText(getResources().getString(R.string.navNotes));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new NotesFragment()).commit();
}
drawer.closeDrawer(GravityCompat.START);
return true;
@ -706,7 +718,6 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
public void onFailure(@NonNull Call<User> call, @NonNull Throwable t) {
}
});
}
private void getNotificationsCount() {
@ -747,5 +758,4 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
public void setFragmentRefreshListenerMyIssues(FragmentRefreshListener fragmentRefreshListener) {
this.fragmentRefreshListenerMyIssues = fragmentRefreshListener;
}
}

View file

@ -95,6 +95,10 @@ public class SettingsGeneralActivity extends BaseActivity {
viewBinding.homeScreenSelected.setText(getResources().getString(R.string.navMostVisited));
}
else if(homeScreenSelectedChoice == 10) {
viewBinding.homeScreenSelected.setText(getResources().getString(R.string.navNotes));
}
viewBinding.homeScreenFrame.setOnClickListener(setDefaultHomeScreen -> {

View file

@ -53,15 +53,18 @@ public class MainApplication extends Application {
if(tinyDB.getBoolean("crashReportingEnabled", true)) {
CoreConfigurationBuilder ACRABuilder = new CoreConfigurationBuilder(this);
CoreConfigurationBuilder ACRABuilder = new CoreConfigurationBuilder();
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).withEnabled(true);
ACRABuilder.getPluginConfigurationBuilder(MailSenderConfigurationBuilder.class).withMailTo(getResources().getString(R.string.appEmail))
.withSubject(getResources().getString(R.string.crashReportEmailSubject, AppUtil.getAppBuildNo(context))).withReportAsFile(true).withEnabled(true);
ACRABuilder.getPluginConfigurationBuilder(LimiterConfigurationBuilder.class).setEnabled(true);
ACRABuilder.withPluginConfigurations(new NotificationConfigurationBuilder().withTitle(getString(R.string.crashTitle)).withResIcon(R.drawable.gitnex_transparent).withChannelName(getString(R.string.setCrashReports))
.withText(getString(R.string.crashMessage)).build());
ACRABuilder.withPluginConfigurations(new MailSenderConfigurationBuilder().withMailTo(getResources().getString(R.string.appEmail))
.withSubject(getResources().getString(R.string.crashReportEmailSubject, AppUtil.getAppBuildNo(context))).withReportAsFile(true).build());
ACRABuilder.withPluginConfigurations(new LimiterConfigurationBuilder().withEnabled(true).build());
ACRA.init(this, ACRABuilder);
}

View file

@ -0,0 +1,182 @@
package org.mian.gitnex.fragments;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import org.mian.gitnex.R;
import org.mian.gitnex.activities.CreateNoteActivity;
import org.mian.gitnex.activities.CreateOrganizationActivity;
import org.mian.gitnex.activities.MainActivity;
import org.mian.gitnex.adapters.MostVisitedReposAdapter;
import org.mian.gitnex.database.api.BaseApi;
import org.mian.gitnex.database.api.RepositoriesApi;
import org.mian.gitnex.database.models.Repository;
import org.mian.gitnex.databinding.FragmentNotesBinding;
import org.mian.gitnex.helpers.TinyDB;
import java.util.ArrayList;
import java.util.List;
/**
* @author M M Arif
*/
public class NotesFragment extends Fragment {
private FragmentNotesBinding fragmentNotesBinding;
private Context ctx;
private MostVisitedReposAdapter adapter;
private RepositoriesApi repositoriesApi;
private List<Repository> notesList;
private int currentActiveAccountId;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
fragmentNotesBinding = FragmentNotesBinding.inflate(inflater, container, false);
ctx = getContext();
setHasOptionsMenu(true);
((MainActivity) requireActivity()).setActionBarTitle(getResources().getString(R.string.navNotes));
TinyDB tinyDb = TinyDB.getInstance(ctx);
fragmentNotesBinding.newNote.setOnClickListener(view -> {
Intent intent = new Intent(view.getContext(), CreateNoteActivity.class);
startActivity(intent);
});
notesList = new ArrayList<>();
repositoriesApi = BaseApi.getInstance(ctx, RepositoriesApi.class);
fragmentNotesBinding.recyclerView.setHasFixedSize(true);
fragmentNotesBinding.recyclerView.setLayoutManager(new LinearLayoutManager(ctx));
fragmentNotesBinding.recyclerView.setPadding(0, 0, 0, 220);
fragmentNotesBinding.recyclerView.setClipToPadding(false);
adapter = new MostVisitedReposAdapter(ctx, notesList);
currentActiveAccountId = tinyDb.getInt("currentActiveAccountId");
fragmentNotesBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> {
notesList.clear();
fragmentNotesBinding.pullToRefresh.setRefreshing(false);
fragmentNotesBinding.progressBar.setVisibility(View.VISIBLE);
fetchDataAsync(currentActiveAccountId);
}, 250));
fetchDataAsync(currentActiveAccountId);
return fragmentNotesBinding.getRoot();
}
private void fetchDataAsync(int accountId) {
repositoriesApi.fetchAllMostVisited(accountId).observe(getViewLifecycleOwner(), mostVisitedRepos -> {
fragmentNotesBinding.pullToRefresh.setRefreshing(false);
assert mostVisitedRepos != null;
if(mostVisitedRepos.size() > 0) {
notesList.clear();
fragmentNotesBinding.noData.setVisibility(View.GONE);
notesList.addAll(mostVisitedRepos);
adapter.notifyDataChanged();
fragmentNotesBinding.recyclerView.setAdapter(adapter);
}
else {
fragmentNotesBinding.noData.setVisibility(View.VISIBLE);
}
fragmentNotesBinding.progressBar.setVisibility(View.GONE);
});
}
/*public void resetAllRepositoryCounter(int accountId) {
if(mostVisitedReposList.size() > 0) {
Objects.requireNonNull(BaseApi.getInstance(ctx, RepositoriesApi.class)).resetAllRepositoryMostVisited(accountId);
mostVisitedReposList.clear();
adapter.notifyDataChanged();
Toasty.success(ctx, getResources().getString(R.string.resetMostReposCounter));
}
else {
Toasty.warning(ctx, getResources().getString(R.string.noDataFound));
}
}*/
/*@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
inflater.inflate(R.menu.reset_menu, menu);
inflater.inflate(R.menu.search_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setImeOptions(EditorInfo.IME_ACTION_DONE);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
filter(newText);
return false;
}
});
}*/
/*@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == R.id.reset_menu_item) {
if(mostVisitedReposList.size() == 0) {
Toasty.warning(ctx, getResources().getString(R.string.noDataFound));
}
else {
new MaterialAlertDialogBuilder(ctx).setTitle(R.string.reset).setMessage(R.string.resetCounterAllDialogMessage).setPositiveButton(R.string.reset, (dialog, which) -> {
resetAllRepositoryCounter(currentActiveAccountId);
dialog.dismiss();
}).setNeutralButton(R.string.cancelButton, null).show();
}
}
return super.onOptionsItemSelected(item);
}
private void filter(String text) {
List<Repository> arr = new ArrayList<>();
for(Repository d : mostVisitedReposList) {
if(d == null || d.getRepositoryOwner() == null || d.getRepositoryName() == null) {
continue;
}
if(d.getRepositoryOwner().toLowerCase().contains(text) || d.getRepositoryName().toLowerCase().contains(text)) {
arr.add(d);
}
}
adapter.updateList(arr);
}*/
}

View file

@ -0,0 +1,94 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/primaryBackgroundColor"
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/Widget.AppCompat.SearchView"
app:elevation="@dimen/dimen0dp">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/primaryBackgroundColor">
<ImageView
android:id="@+id/close"
android:layout_width="@dimen/dimen26dp"
android:layout_height="@dimen/dimen26dp"
android:layout_marginStart="@dimen/dimen16dp"
android:layout_marginEnd="@dimen/dimen16dp"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:contentDescription="@string/close"
android:focusable="true"
android:gravity="center_vertical"
android:src="@drawable/ic_close" />
<TextView
android:id="@+id/toolbar_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:maxLines="1"
android:text="@string/newNote"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen20sp" />
</com.google.android.material.appbar.MaterialToolbar>
</com.google.android.material.appbar.AppBarLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/primaryBackgroundColor">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="@dimen/dimen16dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/note_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:imeOptions="actionNext"
android:inputType="textCapSentences"
android:background="?attr/primaryBackgroundColor"
android:hint="@string/newMilestoneTitle"
android:textColor="?attr/inputTextColor"
android:textColorHighlight="?attr/hintColor"
android:textColorHint="?attr/hintColor"
android:textSize="@dimen/dimen14sp" />
<EditText
android:id="@+id/note_content"
android:layout_width="match_parent"
android:layout_height="@dimen/dimen480dp"
android:gravity="top|start"
android:layout_marginTop="@dimen/dimen32dp"
android:inputType="textCapSentences|textMultiLine"
android:scrollbars="vertical"
android:background="?attr/primaryBackgroundColor"
android:textColor="?attr/inputTextColor"
android:hint="Start taking notes here ..."
android:textColorHighlight="?attr/hintColor"
android:textColorHint="?attr/hintColor"
android:textSize="@dimen/dimen14sp"
android:autofillHints="Start taking notes here ..." />
</LinearLayout>
</ScrollView>
</LinearLayout>

View file

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".activities.MainActivity">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/primaryBackgroundColor"
android:padding="@dimen/dimen8dp">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/pullToRefresh"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</FrameLayout>
<com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/progressBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="true"
style="@style/Widget.Material3.LinearProgressIndicator"
app:indicatorColor="?attr/progressIndicatorColor" />
<TextView
android:id="@+id/noData"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/dimen16dp"
android:gravity="center"
android:text="@string/noDataFound"
android:textColor="?attr/primaryTextColor"
android:textSize="18sp"
android:visibility="gone" />
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
android:id="@+id/newNote"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:layout_margin="@dimen/dimen16dp"
android:text="@string/newNote"
android:contentDescription="@string/newNote"
android:textColor="@color/colorWhite"
android:backgroundTint="?attr/fabColor"
app:iconTint="@color/colorWhite"
app:icon="@drawable/ic_add" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="@dimen/dimen4dp"
android:paddingBottom="@dimen/dimen4dp">
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?attr/materialCardViewFilledStyle"
app:cardElevation="@dimen/dimen0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:foreground="?android:attr/selectableItemBackground"
android:background="?attr/materialCardBackgroundColor"
android:padding="@dimen/dimen12dp"
android:orientation="vertical">
<LinearLayout
android:id="@+id/org_info_frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dimen8dp"
android:gravity="center_vertical"
android:orientation="horizontal"
tools:ignore="UseCompoundDrawables">
<ImageView
android:id="@+id/image"
android:layout_width="@dimen/dimen24dp"
android:layout_height="@dimen/dimen24dp"
android:layout_marginStart="@dimen/dimen0dp"
android:layout_marginEnd="@dimen/dimen10dp"
android:contentDescription="@string/repoContentAvatar"
android:src="@drawable/ic_android"/>
<TextView
android:id="@+id/org_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen14sp"
tools:text="@string/orgName"/>
</LinearLayout>
<TextView
android:id="@+id/repo_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/repoName"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen16sp"
android:textStyle="bold"/>
<View
android:id="@+id/spacer_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="@dimen/dimen8dp"/>
<LinearLayout
android:id="@+id/repo_info_frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:layout_width="@dimen/dimen18dp"
android:layout_height="@dimen/dimen18dp"
android:layout_marginStart="@dimen/dimen0dp"
android:layout_marginEnd="@dimen/dimen6dp"
android:contentDescription="@string/generalImgContentText"
app:srcCompat="@drawable/ic_trending"
app:tint="?attr/iconsColor"/>
<TextView
android:id="@+id/most_visited"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen14sp"
tools:text="@string/repoStars"/>
<LinearLayout
android:id="@+id/repo_info_end_frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dimen10dp"
android:gravity="center_vertical|end"
android:orientation="horizontal"
android:paddingStart="@dimen/dimen6dp"
android:paddingEnd="@dimen/dimen6dp">
<ImageView
android:id="@+id/reset_counter"
android:layout_width="@dimen/dimen18dp"
android:layout_height="@dimen/dimen18dp"
android:layout_marginStart="@dimen/dimen16dp"
android:layout_marginEnd="@dimen/dimen2dp"
android:contentDescription="@string/generalImgContentText"
app:srcCompat="@drawable/ic_reset"
app:tint="?attr/iconsColor"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>

View file

@ -63,6 +63,7 @@
<item>@string/pageTitleNotifications</item>
<item>@string/navMyIssues</item>
<item>@string/navMostVisited</item>
<item>@string/navNotes</item>
</string-array>
<string-array name="linkHandlerDefaultScreen">