Compare commits

...

24 Commits

Author SHA1 Message Date
3b6138e937 Release of 3.1.2 (#680)
Release of 3.1.2

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/680
2020-09-03 20:01:35 +02:00
fcf782dc89 Backport Crowdin Translations (#679)
Merge branch 'release-3.1' into crowdin-backport

Backport Crowdin Translations

Co-authored-by: 6543 <6543@obermui.de>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/679
Reviewed-by: M M Arif <mmarif@noreply.codeberg.org>
2020-09-03 19:38:05 +02:00
2f5a749100 Fix crash on token logins with Require signin view enabled (#677)
Fix crash on token logins with Require signin view enabled

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/677
2020-09-03 19:25:25 +02:00
7ee04bc1aa Share only stack trace (#676)
Share only stack trace

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/676
2020-09-03 18:15:51 +02:00
d8ceefef86 Release 3.1.1 (#665)
Release 3.1.1

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/665
2020-08-24 12:18:15 +02:00
48d74a65b3 Fix crash on login (#664)
Fix crash on login

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/664
2020-08-24 12:11:38 +02:00
ef07302c85 Fix edit comment draft (#663)
Fix edit comment draft

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/663
2020-08-24 12:08:58 +02:00
b60a0e7a92 3.1.0 release (#659)
3.1.0 release

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/659
2020-08-21 18:32:56 +02:00
185bdb863d Crowdin 2020-08-21 (#658)
Crowdin 2020-08-21

Co-authored-by: 6543 <6543@obermui.de>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/658
Reviewed-by: M M Arif <mmarif@noreply.codeberg.org>
2020-08-21 18:20:28 +02:00
da338fcc83 Fix styling radio buttons (#657)
Fix styling radio buttons

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/657
2020-08-21 16:59:54 +02:00
6d8a87358d Copy comment url to clipboard (#655)
Copy comment url to clipboard

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/655
2020-08-21 16:17:48 +02:00
5fc6cdde63 New Retro theme (#654)
New Retro theme

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/654
2020-08-20 18:21:55 +02:00
dc6b1bb5b6 Release 3.1.0 RC2 (#653)
Release 3.1.0 RC2

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/653
2020-08-19 09:07:12 +02:00
8768c87b8a Update missing progress bars (#652)
update missing progress bars

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/652
2020-08-18 19:55:34 +02:00
7caff70946 Edit and delete a file (#626)
update if file is modified on resume

implementation of edit file

Merge branch 'master' into 44-delete-file

Merge branch '44-delete-file' of codeberg.org:gitnex/GitNex into 44-delete-file

Merge branch 'master' into 44-delete-file

# Conflicts:
#	app/src/main/java/org/mian/gitnex/activities/CreateFileActivity.java
#	app/src/main/java/org/mian/gitnex/activities/FileViewActivity.java
#	app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java
#	app/src/main/java/org/mian/gitnex/fragments/BottomSheetFileViewerFragment.java

Merge branch 'master' into 44-delete-file

implement delete file

add links to bottomsheet

Co-authored-by: M M Arif <mmarif@swatian.com>
Co-authored-by: 6543 <6543@noreply.codeberg.org>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/626
2020-08-18 16:37:10 +02:00
76137c56bc Improve drafts ui, add edited comments, create new ones on each call (#628)
Merge branch 'master' into 627-save-edit-draft

# Conflicts:
#	app/src/main/java/org/mian/gitnex/actions/IssueActions.java

Merge branch 'master' into 627-save-edit-draft

Improve drafts, add edited comments, create new ones on each call.

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/628
2020-08-18 16:11:31 +02:00
dcacf1f141 Design Accounts from Nav menu (#648)
Merge branch 'master' into new-account-design

Merge branch 'master' into new-account-design

enhance the dialog UI

Merge branch 'master' into new-account-design

New account design in nav with dialog popup list

New design for accounts accessing

Co-authored-by: 6543 <6543@noreply.codeberg.org>
Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/648
2020-08-18 16:10:46 +02:00
7585eb4834 Update bug icon (#651)
update bug icon

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/651
2020-08-17 19:08:29 +02:00
7dd231ee95 Set notifications as home srceen (#644) 2020-08-12 09:31:39 +02:00
d5fd6d8cc4 Fix share issue url (#643) 2020-08-12 09:31:06 +02:00
28963bb079 Using language instead of country. (#647)
Using language instead of country.

Co-authored-by: opyale <opyale@noreply.gitea.io>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/647
Reviewed-by: M M Arif <mmarif@noreply.codeberg.org>
2020-08-11 18:32:30 +02:00
87649ebae8 Introduce new progress indicators (#638)
Add indicator to the rest of fragments/activities

Merge branch 'master' into profress-indicators

# Conflicts:
#	app/src/main/res/layout/activity_credits.xml
#	app/src/main/res/layout/activity_sponsors.xml

wip to remove old indicator

Make dark green as primary color, clean up app files

Introduce new progress indicators

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/638
2020-08-09 10:23:51 +02:00
a92969a47f Fix jumps in drawer when open for all items(icons, user data) (#639)
Fix drawer jumps when open for all items

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/639
2020-08-09 10:23:19 +02:00
d9cd04facf Layout improvements (#637)
Layout improvements

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/637
2020-08-08 17:43:14 +02:00
237 changed files with 3015 additions and 1902 deletions

View File

@ -24,6 +24,7 @@ Option 1 - Download the source code, open it in Android Studio and build it ther
Option 2 - Open terminal(Linux) and cd to the project dir. Run `./gradlew build`. Option 2 - Open terminal(Linux) and cd to the project dir. Run `./gradlew build`.
## Features ## Features
- Multiple accounts support
- Repositories / issues/ org list - Repositories / issues/ org list
- File and directory browser - File and directory browser
- File viewer - File viewer
@ -86,9 +87,9 @@ Thanks to all the open source libraries, contributors and donators.
- Apache/commons-io - Apache/commons-io
- Caverock/androidsvg - Caverock/androidsvg
- Droidsonroids.gif/android-gif-drawable - Droidsonroids.gif/android-gif-drawable
- Barteksc/AndroidPdfViewer - Barteksc/androidPdfViewer
- Ge0rg/MemorizingTrustManager - Ge0rg/memorizingTrustManager
- Dimezis/BlurView - Dimezis/blurView
- mikaelhg/urlbuilder - Mikaelhg/urlbuilder
[Follow me on Fediverse - mastodon.social/@mmarif](https://mastodon.social/@mmarif) [Follow me on Fediverse - mastodon.social/@mmarif](https://mastodon.social/@mmarif)

View File

@ -6,8 +6,8 @@ android {
applicationId "org.mian.gitnex" applicationId "org.mian.gitnex"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 29 targetSdkVersion 29
versionCode 307 versionCode 312
versionName "3.1.0-rc1" versionName "3.1.2"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }
buildFeatures { buildFeatures {
@ -28,6 +28,9 @@ android {
targetCompatibility = "8" targetCompatibility = "8"
sourceCompatibility = "8" sourceCompatibility = "8"
} }
defaultConfig{
vectorDrawables.useSupportLibrary = true
}
} }
configurations { configurations {

View File

@ -48,8 +48,6 @@
android:name=".activities.OrganizationDetailActivity" android:name=".activities.OrganizationDetailActivity"
android:label="@string/title_activity_org_detail" android:label="@string/title_activity_org_detail"
android:theme="@style/AppTheme.NoActionBar" /> android:theme="@style/AppTheme.NoActionBar" />
<activity android:name=".activities.SponsorsActivity" />
<activity android:name=".activities.CreditsActivity" />
<activity android:name=".activities.CreateLabelActivity" /> <activity android:name=".activities.CreateLabelActivity" />
<activity android:name=".activities.CreateIssueActivity" /> <activity android:name=".activities.CreateIssueActivity" />
<activity android:name=".activities.CreateMilestoneActivity" /> <activity android:name=".activities.CreateMilestoneActivity" />

View File

@ -7,6 +7,7 @@ import com.google.gson.JsonElement;
import org.mian.gitnex.R; import org.mian.gitnex.R;
import org.mian.gitnex.activities.ReplyToIssueActivity; import org.mian.gitnex.activities.ReplyToIssueActivity;
import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.database.api.DraftsApi;
import org.mian.gitnex.helpers.AlertDialogs; import org.mian.gitnex.helpers.AlertDialogs;
import org.mian.gitnex.helpers.Authorization; import org.mian.gitnex.helpers.Authorization;
import org.mian.gitnex.helpers.TinyDB; import org.mian.gitnex.helpers.TinyDB;
@ -22,7 +23,7 @@ import retrofit2.Callback;
public class IssueActions { public class IssueActions {
public static void editIssueComment(final Context ctx, final int commentId, final String commentBody) { public static void editIssueComment(final Context ctx, final int commentId, final String commentBody, long draftIdOnCreate) {
final TinyDB tinyDb = new TinyDB(ctx); final TinyDB tinyDb = new TinyDB(ctx);
final String instanceUrl = tinyDb.getString("instanceUrl"); final String instanceUrl = tinyDb.getString("instanceUrl");
@ -47,7 +48,11 @@ public class IssueActions {
if(response.code() == 200) { if(response.code() == 200) {
tinyDb.putBoolean("commentEdited", true); tinyDb.putBoolean("commentEdited", true);
Toasty.success(ctx, ctx.getString(R.string.editCommentUpdatedText)); Toasty.info(ctx, ctx.getString(R.string.editCommentUpdatedText));
DraftsApi draftsApi = new DraftsApi(ctx);
draftsApi.deleteSingleDraft((int) draftIdOnCreate);
((ReplyToIssueActivity) ctx).finish(); ((ReplyToIssueActivity) ctx).finish();
} }

View File

@ -127,7 +127,7 @@ public class AddNewAccountActivity extends BaseActivity {
Call<GiteaVersion> callVersion; Call<GiteaVersion> callVersion;
callVersion = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getGiteaVersionWithToken(loginToken); callVersion = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getGiteaVersionWithToken("token " + loginToken);
callVersion.enqueue(new Callback<GiteaVersion>() { callVersion.enqueue(new Callback<GiteaVersion>() {
@ -141,6 +141,8 @@ public class AddNewAccountActivity extends BaseActivity {
assert version != null; assert version != null;
tinyDB.putString("giteaVersion", version.getVersion());
try { try {
giteaVersion = new Version(version.getVersion()); giteaVersion = new Version(version.getVersion());
} }

View File

@ -68,7 +68,7 @@ public class AddNewTeamMemberActivity extends BaseActivity {
final String instanceToken = "token " + tinyDb.getString(loginUid + "-token"); final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
ImageView closeActivity = findViewById(R.id.close); ImageView closeActivity = findViewById(R.id.close);
addNewTeamMember = findViewById(R.id.addNewTeamMeber); addNewTeamMember = findViewById(R.id.addNewTeamMember);
mRecyclerView = findViewById(R.id.recyclerViewUserSearch); mRecyclerView = findViewById(R.id.recyclerViewUserSearch);
mProgressBar = findViewById(R.id.progress_bar); mProgressBar = findViewById(R.id.progress_bar);
noData = findViewById(R.id.noData); noData = findViewById(R.id.noData);
@ -125,6 +125,8 @@ public class AddNewTeamMemberActivity extends BaseActivity {
Call<UserSearch> call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getUserBySearch(Authorization.returnAuthentication(ctx, loginUid, token), searchKeyword, 10); Call<UserSearch> call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getUserBySearch(Authorization.returnAuthentication(ctx, loginUid, token), searchKeyword, 10);
mProgressBar.setVisibility(View.VISIBLE);
call.enqueue(new Callback<UserSearch>() { call.enqueue(new Callback<UserSearch>() {
@Override @Override

View File

@ -5,6 +5,7 @@ import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import org.acra.ACRA; import org.acra.ACRA;
import org.acra.BuildConfig; import org.acra.BuildConfig;
import org.acra.annotation.AcraCore;
import org.acra.annotation.AcraNotification; import org.acra.annotation.AcraNotification;
import org.acra.config.CoreConfigurationBuilder; import org.acra.config.CoreConfigurationBuilder;
import org.acra.config.LimiterConfigurationBuilder; import org.acra.config.LimiterConfigurationBuilder;
@ -16,6 +17,7 @@ import org.mian.gitnex.helpers.FontsOverride;
import org.mian.gitnex.helpers.TimeHelper; import org.mian.gitnex.helpers.TimeHelper;
import org.mian.gitnex.helpers.TinyDB; import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.notifications.NotificationsMaster; import org.mian.gitnex.notifications.NotificationsMaster;
import static org.acra.ReportField.*;
/** /**
* Author M M Arif * Author M M Arif
@ -25,6 +27,7 @@ import org.mian.gitnex.notifications.NotificationsMaster;
resTitle = R.string.crashTitle, resTitle = R.string.crashTitle,
resChannelName = R.string.setCrashReports, resChannelName = R.string.setCrashReports,
resText = R.string.crashMessage) resText = R.string.crashMessage)
@AcraCore(reportContent = { ANDROID_VERSION, PHONE_MODEL, STACK_TRACE })
public abstract class BaseActivity extends AppCompatActivity { public abstract class BaseActivity extends AppCompatActivity {
@ -51,6 +54,19 @@ public abstract class BaseActivity extends AppCompatActivity {
} }
break; break;
case 3:
setTheme(R.style.AppThemeRetro);
break;
case 4:
if(TimeHelper.timeBetweenHours(18, 6)) { // 6pm to 6am
setTheme(R.style.AppTheme);
}
else {
setTheme(R.style.AppThemeRetro);
}
break;
default: default:
setTheme(R.style.AppTheme); setTheme(R.style.AppTheme);
break; break;

View File

@ -52,6 +52,7 @@ public class CommitsActivity extends BaseActivity {
private List<Commits> commitsList; private List<Commits> commitsList;
private CommitsAdapter adapter; private CommitsAdapter adapter;
private ApiInterface api; private ApiInterface api;
private ProgressBar progressLoadMore;
@Override @Override
protected int getLayoutResourceId() { protected int getLayoutResourceId() {
@ -84,6 +85,7 @@ public class CommitsActivity extends BaseActivity {
ImageView closeActivity = findViewById(R.id.close); ImageView closeActivity = findViewById(R.id.close);
noData = findViewById(R.id.noDataCommits); noData = findViewById(R.id.noDataCommits);
progressLoadMore = findViewById(R.id.progressLoadMore);
progressBar = findViewById(R.id.progress_bar); progressBar = findViewById(R.id.progress_bar);
SwipeRefreshLayout swipeRefresh = findViewById(R.id.pullToRefresh); SwipeRefreshLayout swipeRefresh = findViewById(R.id.pullToRefresh);
@ -176,9 +178,7 @@ public class CommitsActivity extends BaseActivity {
private void loadMore(String token, String repoOwner, String repoName, final int page, String branchName, int resultLimit) { private void loadMore(String token, String repoOwner, String repoName, final int page, String branchName, int resultLimit) {
//add loading progress view progressLoadMore.setVisibility(View.VISIBLE);
commitsList.add(new Commits("load"));
adapter.notifyItemInserted((commitsList.size() - 1));
Call<List<Commits>> call = api.getRepositoryCommits(token, repoOwner, repoName, page, branchName, resultLimit); Call<List<Commits>> call = api.getRepositoryCommits(token, repoOwner, repoName, page, branchName, resultLimit);
@ -189,9 +189,6 @@ public class CommitsActivity extends BaseActivity {
if(response.isSuccessful()) { if(response.isSuccessful()) {
//remove loading view
commitsList.remove(commitsList.size() - 1);
List<Commits> result = response.body(); List<Commits> result = response.body();
assert result != null; assert result != null;
@ -208,6 +205,7 @@ public class CommitsActivity extends BaseActivity {
} }
adapter.notifyDataChanged(); adapter.notifyDataChanged();
progressLoadMore.setVisibility(View.GONE);
} }
else { else {

View File

@ -1,7 +1,6 @@
package org.mian.gitnex.activities; package org.mian.gitnex.activities;
import android.content.Context; import android.content.Context;
import android.graphics.PorterDuff;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
@ -23,6 +22,8 @@ import org.mian.gitnex.helpers.Authorization;
import org.mian.gitnex.helpers.TinyDB; import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.helpers.Toasty;
import org.mian.gitnex.models.Branches; import org.mian.gitnex.models.Branches;
import org.mian.gitnex.models.DeleteFile;
import org.mian.gitnex.models.EditFile;
import org.mian.gitnex.models.NewFile; import org.mian.gitnex.models.NewFile;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -44,8 +45,12 @@ public class CreateFileActivity extends BaseActivity {
private EditText newFileBranchName; private EditText newFileBranchName;
private EditText newFileCommitMessage; private EditText newFileCommitMessage;
private Spinner newFileBranchesSpinner; private Spinner newFileBranchesSpinner;
private String filePath;
private String fileSha;
private int fileAction = 0; // 0 = create, 1 = delete, 2 = edit
final Context ctx = this; final Context ctx = this;
private Context appCtx; private Context appCtx;
private TinyDB tinyDb;
List<Branches> branchesList = new ArrayList<>(); List<Branches> branchesList = new ArrayList<>();
@ -59,12 +64,12 @@ public class CreateFileActivity extends BaseActivity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
appCtx = getApplicationContext(); appCtx = getApplicationContext();
tinyDb = new TinyDB(appCtx);
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx); boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
TinyDB tinyDb = new TinyDB(appCtx);
final String instanceUrl = tinyDb.getString("instanceUrl"); final String instanceUrl = tinyDb.getString("instanceUrl");
final String loginUid = tinyDb.getString("loginUid"); final String loginUid = tinyDb.getString("loginUid");
String repoFullName = tinyDb.getString("repoFullName"); String repoFullName = tinyDb.getString("repoFullName");
@ -80,6 +85,8 @@ public class CreateFileActivity extends BaseActivity {
newFileCommitMessage = findViewById(R.id.newFileCommitMessage); newFileCommitMessage = findViewById(R.id.newFileCommitMessage);
TextView branchNameId = findViewById(R.id.branchNameId); TextView branchNameId = findViewById(R.id.branchNameId);
TextView branchNameHintText = findViewById(R.id.branchNameHintText); TextView branchNameHintText = findViewById(R.id.branchNameHintText);
TextView toolbarTitle = findViewById(R.id.toolbarTitle);
TextView fileNameHint = findViewById(R.id.fileNameHint);
newFileName.requestFocus(); newFileName.requestFocus();
assert imm != null; assert imm != null;
@ -90,11 +97,50 @@ public class CreateFileActivity extends BaseActivity {
newFileCreate = findViewById(R.id.newFileCreate); newFileCreate = findViewById(R.id.newFileCreate);
if(getIntent().getStringExtra("filePath") != null && getIntent().getIntExtra("fileAction", 1) == 1) {
fileNameHint.setVisibility(View.GONE);
fileAction = getIntent().getIntExtra("fileAction", 1);
filePath = getIntent().getStringExtra("filePath");
String fileContents = getIntent().getStringExtra("fileContents");
fileSha = getIntent().getStringExtra("fileSha");
toolbarTitle.setText(getString(R.string.deleteFileText, filePath));
newFileCreate.setText(R.string.deleteFile);
newFileName.setText(filePath);
newFileName.setEnabled(false);
newFileName.setFocusable(false);
newFileContent.setText(fileContents);
newFileContent.setEnabled(false);
newFileContent.setFocusable(false);
}
if(getIntent().getStringExtra("filePath") != null && getIntent().getIntExtra("fileAction", 2) == 2) {
fileNameHint.setVisibility(View.GONE);
fileAction = getIntent().getIntExtra("fileAction", 2);
filePath = getIntent().getStringExtra("filePath");
String fileContents = getIntent().getStringExtra("fileContents");
fileSha = getIntent().getStringExtra("fileSha");
toolbarTitle.setText(getString(R.string.editFileText, filePath));
newFileCreate.setText(R.string.editFile);
newFileName.setText(filePath);
newFileName.setEnabled(false);
newFileName.setFocusable(false);
newFileContent.setText(fileContents);
}
initCloseListener(); initCloseListener();
closeActivity.setOnClickListener(onClickListener); closeActivity.setOnClickListener(onClickListener);
newFileBranchesSpinner = findViewById(R.id.newFileBranchesSpinner); newFileBranchesSpinner = findViewById(R.id.newFileBranchesSpinner);
newFileBranchesSpinner.getBackground().setColorFilter(getResources().getColor(R.color.colorWhite), PorterDuff.Mode.SRC_ATOP);
getBranches(instanceUrl, instanceToken, repoOwner, repoName, loginUid); getBranches(instanceUrl, instanceToken, repoOwner, repoName, loginUid);
newFileBranchesSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() newFileBranchesSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
@ -197,7 +243,22 @@ public class CreateFileActivity extends BaseActivity {
else { else {
disableProcessButton(); disableProcessButton();
createNewFile(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, newFileName_, appUtil.encodeBase64(newFileContent_), newFileBranchName_, newFileCommitMessage_, currentBranch.toString());
if(fileAction == 1) {
deleteFile(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, filePath,
newFileBranchName_, newFileCommitMessage_, currentBranch.toString(), fileSha);
}
else if(fileAction == 2) {
editFile(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, filePath,
appUtil.encodeBase64(newFileContent_), newFileBranchName_, newFileCommitMessage_, currentBranch.toString(), fileSha);
}
else {
createNewFile(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, newFileName_,
appUtil.encodeBase64(newFileContent_), newFileBranchName_, newFileCommitMessage_, currentBranch.toString());
}
} }
@ -256,6 +317,150 @@ public class CreateFileActivity extends BaseActivity {
@Override @Override
public void onFailure(@NonNull Call<JsonElement> call, @NonNull Throwable t) { public void onFailure(@NonNull Call<JsonElement> call, @NonNull Throwable t) {
Log.e("onFailure", t.toString());
enableProcessButton();
}
});
}
private void deleteFile(final String instanceUrl, final String token, String repoOwner, String repoName, String fileName, String fileBranchName, String fileCommitMessage, String currentBranch, String fileSha) {
String branchName;
DeleteFile deleteFileJsonStr;
if(currentBranch.equals("No branch")) {
branchName = fileBranchName;
deleteFileJsonStr = new DeleteFile("", fileCommitMessage, fileBranchName, fileSha);
}
else {
branchName = currentBranch;
deleteFileJsonStr = new DeleteFile(currentBranch, fileCommitMessage, "", fileSha);
}
Call<JsonElement> call = RetrofitClient
.getInstance(instanceUrl, ctx)
.getApiInterface()
.deleteFile(token, repoOwner, repoName, fileName, deleteFileJsonStr);
call.enqueue(new Callback<JsonElement>() {
@Override
public void onResponse(@NonNull Call<JsonElement> call, @NonNull retrofit2.Response<JsonElement> response) {
if(response.code() == 200) {
enableProcessButton();
Toasty.info(ctx, getString(R.string.deleteFileMessage, branchName));
getIntent().removeExtra("filePath");
getIntent().removeExtra("fileSha");
getIntent().removeExtra("fileContents");
finish();
}
else if(response.code() == 401) {
enableProcessButton();
AlertDialogs.authorizationTokenRevokedDialog(ctx, getResources().getString(R.string.alertDialogTokenRevokedTitle),
getResources().getString(R.string.alertDialogTokenRevokedMessage),
getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton),
getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
}
else {
if(response.code() == 404) {
enableProcessButton();
Toasty.info(ctx, getString(R.string.apiNotFound));
}
else {
enableProcessButton();
Toasty.info(ctx, getString(R.string.genericError));
}
}
}
@Override
public void onFailure(@NonNull Call<JsonElement> call, @NonNull Throwable t) {
Log.e("onFailure", t.toString());
enableProcessButton();
}
});
}
private void editFile(final String instanceUrl, final String token, String repoOwner, String repoName, String fileName, String fileContent, String fileBranchName, String fileCommitMessage, String currentBranch, String fileSha) {
String branchName;
EditFile editFileJsonStr;
if(currentBranch.equals("No branch")) {
branchName = fileBranchName;
editFileJsonStr = new EditFile("", fileCommitMessage, fileBranchName, fileSha, fileContent);
}
else {
branchName = currentBranch;
editFileJsonStr = new EditFile(currentBranch, fileCommitMessage, "", fileSha, fileContent);
}
Call<JsonElement> call = RetrofitClient
.getInstance(instanceUrl, ctx)
.getApiInterface()
.editFile(token, repoOwner, repoName, fileName, editFileJsonStr);
call.enqueue(new Callback<JsonElement>() {
@Override
public void onResponse(@NonNull Call<JsonElement> call, @NonNull retrofit2.Response<JsonElement> response) {
if(response.code() == 200) {
enableProcessButton();
Toasty.info(ctx, getString(R.string.editFileMessage, branchName));
getIntent().removeExtra("filePath");
getIntent().removeExtra("fileSha");
getIntent().removeExtra("fileContents");
tinyDb.putBoolean("fileModified", true);
finish();
}
else if(response.code() == 401) {
enableProcessButton();
AlertDialogs.authorizationTokenRevokedDialog(ctx, getResources().getString(R.string.alertDialogTokenRevokedTitle),
getResources().getString(R.string.alertDialogTokenRevokedMessage),
getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton),
getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
}
else {
if(response.code() == 404) {
enableProcessButton();
Toasty.info(ctx, getString(R.string.apiNotFound));
}
else {
enableProcessButton();
Toasty.info(ctx, getString(R.string.genericError));
}
}
}
@Override
public void onFailure(@NonNull Call<JsonElement> call, @NonNull Throwable t) {
Log.e("onFailure", t.toString()); Log.e("onFailure", t.toString());
enableProcessButton(); enableProcessButton();
} }

View File

@ -2,7 +2,6 @@ package org.mian.gitnex.activities;
import android.app.DatePickerDialog; import android.app.DatePickerDialog;
import android.content.Context; import android.content.Context;
import android.graphics.PorterDuff;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
@ -126,7 +125,6 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
newIssueDueDate.setOnClickListener(this); newIssueDueDate.setOnClickListener(this);
newIssueMilestoneSpinner = findViewById(R.id.newIssueMilestoneSpinner); newIssueMilestoneSpinner = findViewById(R.id.newIssueMilestoneSpinner);
newIssueMilestoneSpinner.getBackground().setColorFilter(getResources().getColor(R.color.colorWhite), PorterDuff.Mode.SRC_ATOP);
getMilestones(instanceUrl, instanceToken, repoOwner, repoName, loginUid, resultLimit); getMilestones(instanceUrl, instanceToken, repoOwner, repoName, loginUid, resultLimit);
getLabels(instanceUrl, instanceToken, repoOwner, repoName, loginUid); getLabels(instanceUrl, instanceToken, repoOwner, repoName, loginUid);

View File

@ -1,7 +1,6 @@
package org.mian.gitnex.activities; package org.mian.gitnex.activities;
import android.content.Context; import android.content.Context;
import android.graphics.PorterDuff;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
@ -87,7 +86,6 @@ public class CreateReleaseActivity extends BaseActivity {
closeActivity.setOnClickListener(onClickListener); closeActivity.setOnClickListener(onClickListener);
releaseBranch = findViewById(R.id.releaseBranch); releaseBranch = findViewById(R.id.releaseBranch);
releaseBranch.getBackground().setColorFilter(getResources().getColor(R.color.colorWhite), PorterDuff.Mode.SRC_ATOP);
getBranches(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName); getBranches(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName);
releaseBranch.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { releaseBranch.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override @Override

View File

@ -1,7 +1,6 @@
package org.mian.gitnex.activities; package org.mian.gitnex.activities;
import android.content.Context; import android.content.Context;
import android.graphics.PorterDuff;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
@ -86,7 +85,6 @@ public class CreateRepoActivity extends BaseActivity {
closeActivity.setOnClickListener(onClickListener); closeActivity.setOnClickListener(onClickListener);
spinner = findViewById(R.id.ownerSpinner); spinner = findViewById(R.id.ownerSpinner);
spinner.getBackground().setColorFilter(getResources().getColor(R.color.colorWhite), PorterDuff.Mode.SRC_ATOP);
getOrganizations(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), userLogin); getOrganizations(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), userLogin);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

View File

@ -1,64 +0,0 @@
package org.mian.gitnex.activities;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import org.mian.gitnex.R;
import org.mian.gitnex.adapters.CreditsAdapter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Author M M Arif
*/
public class CreditsActivity extends BaseActivity {
private View.OnClickListener onClickListener;
final Context ctx = this;
@Override
protected int getLayoutResourceId(){
return R.layout.activity_credits;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ImageView closeActivity = findViewById(R.id.close);
initCloseListener();
closeActivity.setOnClickListener(onClickListener);
Resources res = getResources();
CharSequence[] creditsInfo = res.getTextArray(R.array.creditsInfo);
List<CharSequence> creditsList = new ArrayList<>(Arrays.asList(creditsInfo));
RecyclerView mRecyclerView = findViewById(R.id.recyclerView);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(ctx));
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mRecyclerView.getContext(),
DividerItemDecoration.VERTICAL);
mRecyclerView.addItemDecoration(dividerItemDecoration);
CreditsAdapter adapter = new CreditsAdapter(creditsList);
mRecyclerView.setAdapter(adapter);
}
private void initCloseListener() {
onClickListener = view -> finish();
}
}

View File

@ -3,7 +3,6 @@ package org.mian.gitnex.activities;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.DatePickerDialog; import android.app.DatePickerDialog;
import android.content.Context; import android.content.Context;
import android.graphics.PorterDuff;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
@ -108,7 +107,6 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe
loadCollaboratorsList(); loadCollaboratorsList();
editIssueMilestoneSpinner = findViewById(R.id.editIssueMilestoneSpinner); editIssueMilestoneSpinner = findViewById(R.id.editIssueMilestoneSpinner);
editIssueMilestoneSpinner.getBackground().setColorFilter(getResources().getColor(R.color.colorWhite), PorterDuff.Mode.SRC_ATOP);
editIssueDescription.setMentionAdapter(defaultMentionAdapter); editIssueDescription.setMentionAdapter(defaultMentionAdapter);

View File

@ -82,8 +82,9 @@ public class FileDiffActivity extends BaseActivity {
// fallback for old gitea instances // fallback for old gitea instances
if(new Version(tinyDb.getString("giteaVersion")).less("1.13.0")) { if(new Version(tinyDb.getString("giteaVersion")).less("1.13.0")) {
apiCall = false; apiCall = false;
instanceUrl = tinyDb.getString("instanceUrlWithProtocol"); instanceUrl = instanceUrl.substring(0, instanceUrl.lastIndexOf("api/v1/"));
} }
getPullDiffContent(instanceUrl, repoOwner, repoName, pullIndex, instanceToken, apiCall); getPullDiffContent(instanceUrl, repoOwner, repoName, pullIndex, instanceToken, apiCall);

View File

@ -84,6 +84,7 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
private byte[] decodedPdf; private byte[] decodedPdf;
private Boolean pdfNightMode; private Boolean pdfNightMode;
private String singleFileName; private String singleFileName;
private String fileSha;
private AppUtil appUtil; private AppUtil appUtil;
private TinyDB tinyDb; private TinyDB tinyDb;
@ -153,6 +154,27 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
} }
@Override
public void onResume() {
super.onResume();
String repoFullName = tinyDb.getString("repoFullName");
String repoBranch = tinyDb.getString("repoBranch");
String[] parts = repoFullName.split("/");
String repoOwner = parts[0];
String repoName = parts[1];
String instanceUrl = tinyDb.getString("instanceUrl");
String loginUid = tinyDb.getString("loginUid");
String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
if(tinyDb.getBoolean("fileModified")) {
getSingleFileContents(instanceUrl, instanceToken, repoOwner, repoName, singleFileName, repoBranch);
tinyDb.putBoolean("fileModified", false);
}
}
private void getSingleFileContents(String instanceUrl, String token, final String owner, String repo, final String filename, String ref) { private void getSingleFileContents(String instanceUrl, String token, final String owner, String repo, final String filename, String ref) {
Call<Files> call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getSingleFileContents(token, owner, repo, filename, ref); Call<Files> call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getSingleFileContents(token, owner, repo, filename, ref);
@ -171,6 +193,8 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
String fileExtension = FileUtils.getExtension(filename); String fileExtension = FileUtils.getExtension(filename);
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
fileSha = response.body().getSha();
// download file meta // download file meta
tinyDb.putString("downloadFileName", filename); tinyDb.putString("downloadFileName", filename);
tinyDb.putString("downloadFileContents", response.body().getContent()); tinyDb.putString("downloadFileContents", response.body().getContent());
@ -403,7 +427,42 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
if("downloadFile".equals(text)) { if("downloadFile".equals(text)) {
requestFileDownload(); requestFileDownload();
}
if("deleteFile".equals(text)) {
String fileExtension = FileUtils.getExtension(singleFileName);
String data = appUtil.decodeBase64(tinyDb.getString("downloadFileContents"));
Intent intent = new Intent(ctx, CreateFileActivity.class);
intent.putExtra("fileAction", 1);
intent.putExtra("filePath", singleFileName);
intent.putExtra("fileSha", fileSha);
if(!appUtil.imageExtension(fileExtension)) {
intent.putExtra("fileContents", data);
}
else {
intent.putExtra("fileContents", "");
}
ctx.startActivity(intent);
}
if("editFile".equals(text)) {
String fileExtension = FileUtils.getExtension(singleFileName);
String data = appUtil.decodeBase64(tinyDb.getString("downloadFileContents"));
Intent intent = new Intent(ctx, CreateFileActivity.class);
intent.putExtra("fileAction", 2);
intent.putExtra("filePath", singleFileName);
intent.putExtra("fileSha", fileSha);
if(!appUtil.imageExtension(fileExtension)) {
intent.putExtra("fileContents", data);
}
else {
intent.putExtra("fileContents", "");
}
ctx.startActivity(intent);
} }
} }
@ -426,6 +485,7 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
} }
else { else {
Toasty.warning(ctx, getString(R.string.waitLoadingDownloadFile)); Toasty.warning(ctx, getString(R.string.waitLoadingDownloadFile));
} }
@ -456,6 +516,7 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
} }
catch(IOException e) { catch(IOException e) {
Log.e("errorFileDownloading", Objects.requireNonNull(e.getMessage())); Log.e("errorFileDownloading", Objects.requireNonNull(e.getMessage()));
} }
@ -469,7 +530,6 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
getIntent().removeExtra("singleFileName"); getIntent().removeExtra("singleFileName");
finish(); finish();
}; };
} }

View File

@ -398,6 +398,7 @@ public class IssueDetailActivity extends BaseActivity {
final String timeFormat = tinyDb.getString("dateFormat"); final String timeFormat = tinyDb.getString("dateFormat");
tinyDb.putString("issueState", singleIssue.getState()); tinyDb.putString("issueState", singleIssue.getState());
tinyDb.putString("issueTitle", singleIssue.getTitle()); tinyDb.putString("issueTitle", singleIssue.getTitle());
tinyDb.putString("singleIssueHtmlUrl", singleIssue.getHtml_url());
PicassoService.getInstance(ctx).get().load(singleIssue.getUser().getAvatar_url()).placeholder(R.drawable.loader_animated) PicassoService.getInstance(ctx).get().load(singleIssue.getUser().getAvatar_url()).placeholder(R.drawable.loader_animated)
.transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(assigneeAvatar); .transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(assigneeAvatar);

View File

@ -256,7 +256,7 @@ public class LoginActivity extends BaseActivity {
if(!loginToken.equals("")) { if(!loginToken.equals("")) {
callVersion = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getGiteaVersionWithToken(loginToken); callVersion = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getGiteaVersionWithToken("token " + loginToken);
} }
else { else {
@ -280,6 +280,8 @@ public class LoginActivity extends BaseActivity {
assert version != null; assert version != null;
tinyDB.putString("giteaVersion", version.getVersion());
try { try {
gitea_version = new Version(version.getVersion()); gitea_version = new Version(version.getVersion());
} }

View File

@ -18,15 +18,20 @@ import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat; import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout; import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.navigation.NavigationView; import com.google.android.material.navigation.NavigationView;
import org.mian.gitnex.R; import org.mian.gitnex.R;
import org.mian.gitnex.adapters.UserAccountsNavAdapter;
import org.mian.gitnex.clients.PicassoService; import org.mian.gitnex.clients.PicassoService;
import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.database.api.UserAccountsApi;
import org.mian.gitnex.database.models.UserAccount;
import org.mian.gitnex.fragments.AboutFragment; import org.mian.gitnex.fragments.AboutFragment;
import org.mian.gitnex.fragments.AdministrationFragment; import org.mian.gitnex.fragments.AdministrationFragment;
import org.mian.gitnex.fragments.BottomSheetDraftsFragment; import org.mian.gitnex.fragments.BottomSheetDraftsFragment;
@ -51,6 +56,8 @@ import org.mian.gitnex.helpers.Toasty;
import org.mian.gitnex.helpers.Version; import org.mian.gitnex.helpers.Version;
import org.mian.gitnex.models.GiteaVersion; import org.mian.gitnex.models.GiteaVersion;
import org.mian.gitnex.models.UserInfo; import org.mian.gitnex.models.UserInfo;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import eightbitlab.com.blurview.BlurView; import eightbitlab.com.blurview.BlurView;
import eightbitlab.com.blurview.RenderScriptBlur; import eightbitlab.com.blurview.RenderScriptBlur;
@ -197,6 +204,11 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
@Override @Override
public void onDrawerOpened(@NonNull View drawerView) { public void onDrawerOpened(@NonNull View drawerView) {
}
@Override
public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {
if(tinyDb.getBoolean("noConnection")) { if(tinyDb.getBoolean("noConnection")) {
Toasty.error(ctx, getResources().getString(R.string.checkNetConnection)); Toasty.error(ctx, getResources().getString(R.string.checkNetConnection));
tinyDb.putBoolean("noConnection", false); tinyDb.putBoolean("noConnection", false);
@ -213,14 +225,29 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
userAvatarBackground = hView.findViewById(R.id.userAvatarBackground); userAvatarBackground = hView.findViewById(R.id.userAvatarBackground);
navHeaderFrame = hView.findViewById(R.id.navHeaderFrame); navHeaderFrame = hView.findViewById(R.id.navHeaderFrame);
List<UserAccount> userAccountsList;
userAccountsList = new ArrayList<>();
UserAccountsApi userAccountsApi;
userAccountsApi = new UserAccountsApi(ctx);
RecyclerView navRecyclerViewUserAccounts = hView.findViewById(R.id.navRecyclerViewUserAccounts);
UserAccountsNavAdapter adapterUserAccounts;
adapterUserAccounts = new UserAccountsNavAdapter(ctx, userAccountsList, drawer, toolbarTitle);
userAccountsApi.getAllAccounts().observe((AppCompatActivity) ctx, userAccounts -> {
if(userAccounts.size() > 0) {
userAccountsList.addAll(userAccounts);
navRecyclerViewUserAccounts.setAdapter(adapterUserAccounts);
}
});
userEmail.setTypeface(myTypeface); userEmail.setTypeface(myTypeface);
userFullName.setTypeface(myTypeface); userFullName.setTypeface(myTypeface);
String currentVersion = tinyDb.getString("giteaVersion");
navigationView.getMenu().findItem(R.id.nav_administration).setVisible(tinyDb.getBoolean("userIsAdmin"));
navigationView.getMenu().findItem(R.id.nav_notifications).setVisible(new Version(currentVersion).higherOrEqual("1.12.3"));
if(!userEmailNav.equals("")) { if(!userEmailNav.equals("")) {
userEmail.setText(userEmailNav); userEmail.setText(userEmailNav);
} }
@ -271,10 +298,11 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
drawer.closeDrawers(); drawer.closeDrawers();
}); });
} String currentVersion = tinyDb.getString("giteaVersion");
@Override navigationView.getMenu().findItem(R.id.nav_administration).setVisible(tinyDb.getBoolean("userIsAdmin"));
public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {} navigationView.getMenu().findItem(R.id.nav_notifications).setVisible(new Version(currentVersion).higherOrEqual("1.12.3"));
}
@Override @Override
public void onDrawerClosed(@NonNull View drawerView) {} public void onDrawerClosed(@NonNull View drawerView) {}
@ -284,14 +312,6 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
}); });
ImageView userAccounts = hView.findViewById(R.id.userAccounts);
userAccounts.setOnClickListener(v -> {
toolbarTitle.setText(getResources().getString(R.string.pageTitleUserAccounts));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new UserAccountsFragment()).commit();
drawer.closeDrawers();
});
toggle.syncState(); toggle.syncState();
toolbar.setNavigationIcon(R.drawable.ic_menu); toolbar.setNavigationIcon(R.drawable.ic_menu);
@ -318,6 +338,14 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
if(savedInstanceState == null) { if(savedInstanceState == null) {
if(!new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.3")) {
if(tinyDb.getInt("homeScreenId") == 7) {
tinyDb.putInt("homeScreenId", 0);
}
}
switch(tinyDb.getInt("homeScreenId")) { switch(tinyDb.getInt("homeScreenId")) {
case 1: case 1:
@ -356,6 +384,12 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
navigationView.setCheckedItem(R.id.nav_comments_draft); navigationView.setCheckedItem(R.id.nav_comments_draft);
break; break;
case 7:
toolbarTitle.setText(getResources().getString(R.string.pageTitleNotifications));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new NotificationsFragment()).commit();
navigationView.setCheckedItem(R.id.nav_notifications);
break;
default: default:
toolbarTitle.setText(getResources().getString(R.string.pageTitleMyRepos)); toolbarTitle.setText(getResources().getString(R.string.pageTitleMyRepos));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new MyRepositoriesFragment()).commit(); getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new MyRepositoriesFragment()).commit();

View File

@ -9,6 +9,7 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.GridView; import android.widget.GridView;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
@ -30,6 +31,7 @@ public class OrganizationTeamMembersActivity extends BaseActivity implements Bot
private View.OnClickListener onClickListener; private View.OnClickListener onClickListener;
private TeamMembersByOrgAdapter adapter; private TeamMembersByOrgAdapter adapter;
private GridView mGridView; private GridView mGridView;
private ProgressBar progressBar;
final Context ctx = this; final Context ctx = this;
private Context appCtx; private Context appCtx;
@ -58,6 +60,7 @@ public class OrganizationTeamMembersActivity extends BaseActivity implements Bot
TextView toolbarTitle = findViewById(R.id.toolbar_title); TextView toolbarTitle = findViewById(R.id.toolbar_title);
noDataMembers = findViewById(R.id.noDataMembers); noDataMembers = findViewById(R.id.noDataMembers);
mGridView = findViewById(R.id.gridView); mGridView = findViewById(R.id.gridView);
progressBar = findViewById(R.id.progressBar);
initCloseListener(); initCloseListener();
closeActivity.setOnClickListener(onClickListener); closeActivity.setOnClickListener(onClickListener);
@ -114,6 +117,7 @@ public class OrganizationTeamMembersActivity extends BaseActivity implements Bot
noDataMembers.setVisibility(View.VISIBLE); noDataMembers.setVisibility(View.VISIBLE);
} }
progressBar.setVisibility(View.GONE);
}); });
} }

View File

@ -33,6 +33,7 @@ import org.mian.gitnex.helpers.Toasty;
import org.mian.gitnex.models.Collaborators; import org.mian.gitnex.models.Collaborators;
import org.mian.gitnex.models.Issues; import org.mian.gitnex.models.Issues;
import java.util.List; import java.util.List;
import java.util.Objects;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.Callback; import retrofit2.Callback;
import retrofit2.Response; import retrofit2.Response;
@ -54,7 +55,7 @@ public class ReplyToIssueActivity extends BaseActivity {
private ArrayAdapter<Mention> defaultMentionAdapter; private ArrayAdapter<Mention> defaultMentionAdapter;
private Button replyButton; private Button replyButton;
private String TAG = StaticGlobalVariables.replyToIssueActivity; private String TAG = StaticGlobalVariables.replyToIssueActivity;
private long draftId; private long draftIdOnCreate;
@Override @Override
protected int getLayoutResourceId(){ protected int getLayoutResourceId(){
@ -97,6 +98,20 @@ public class ReplyToIssueActivity extends BaseActivity {
initCloseListener(); initCloseListener();
closeActivity.setOnClickListener(onClickListener); closeActivity.setOnClickListener(onClickListener);
if(getIntent().getStringExtra("draftId") != null) {
draftIdOnCreate = Long.parseLong(Objects.requireNonNull(getIntent().getStringExtra("draftId")));
}
else {
if(getIntent().getStringExtra("commentBody") != null) {
draftIdOnCreate = returnDraftId(getIntent().getStringExtra("commentBody"));
}
else {
draftIdOnCreate = returnDraftId("");
}
}
replyButton = findViewById(R.id.replyButton); replyButton = findViewById(R.id.replyButton);
if(getIntent().getStringExtra("commentBody") != null) { if(getIntent().getStringExtra("commentBody") != null) {
@ -115,7 +130,7 @@ public class ReplyToIssueActivity extends BaseActivity {
} }
if(getIntent().getStringExtra("commentAction") != null && getIntent().getStringExtra("commentAction").equals("edit")) { if(getIntent().getStringExtra("commentAction") != null && Objects.equals(getIntent().getStringExtra("commentAction"), "edit") && !Objects.equals(getIntent().getStringExtra("commentId"), "new")) {
final String commentId = getIntent().getStringExtra("commentId"); final String commentId = getIntent().getStringExtra("commentId");
@ -134,7 +149,7 @@ public class ReplyToIssueActivity extends BaseActivity {
public void onTextChanged(CharSequence s, int start, int before, int count) { public void onTextChanged(CharSequence s, int start, int before, int count) {
saveDraft(addComment.getText().toString()); saveDraft(addComment.getText().toString(), commentId, draftIdOnCreate);
draftSaved.setVisibility(View.VISIBLE); draftSaved.setVisibility(View.VISIBLE);
} }
@ -145,7 +160,7 @@ public class ReplyToIssueActivity extends BaseActivity {
disableProcessButton(); disableProcessButton();
assert commentId != null; assert commentId != null;
IssueActions.editIssueComment(ctx, Integer.parseInt(commentId), addComment.getText().toString()); IssueActions.editIssueComment(ctx, Integer.parseInt(commentId), addComment.getText().toString(), draftIdOnCreate);
}); });
@ -165,7 +180,7 @@ public class ReplyToIssueActivity extends BaseActivity {
public void onTextChanged(CharSequence s, int start, int before, int count) { public void onTextChanged(CharSequence s, int start, int before, int count) {
saveDraft(addComment.getText().toString()); saveDraft(addComment.getText().toString(), "new", draftIdOnCreate);
draftSaved.setVisibility(View.VISIBLE); draftSaved.setVisibility(View.VISIBLE);
} }
@ -185,7 +200,7 @@ public class ReplyToIssueActivity extends BaseActivity {
} }
private void saveDraft(String draftText) { private void saveDraft(String draftText, String commentId, long draftIdOnCreate) {
TinyDB tinyDb = new TinyDB(getApplicationContext()); TinyDB tinyDb = new TinyDB(getApplicationContext());
@ -195,17 +210,31 @@ public class ReplyToIssueActivity extends BaseActivity {
DraftsApi draftsApi = new DraftsApi(appCtx); DraftsApi draftsApi = new DraftsApi(appCtx);
int countDraft = draftsApi.checkDraft(issueNumber, repositoryId); if(draftIdOnCreate == 0) {
if(countDraft == 0) { draftsApi.insertDraft(repositoryId, currentActiveAccountId, issueNumber, draftText, StaticGlobalVariables.draftTypeComment, commentId);
draftId = draftsApi.insertDraft(repositoryId, currentActiveAccountId, issueNumber, draftText, StaticGlobalVariables.draftTypeComment);
} }
else { else {
DraftsApi.updateDraftByIssueIdAsyncTask(draftText, issueNumber, repositoryId);
DraftsApi.updateDraft(draftText, (int) draftIdOnCreate, commentId); //updateDraftByIssueIdAsyncTask(draftText, issueNumber, repositoryId, commentId);
} }
} }
private long returnDraftId(String draftText) {
TinyDB tinyDb = new TinyDB(getApplicationContext());
int repositoryId = (int) tinyDb.getLong("repositoryId", 0);
int currentActiveAccountId = tinyDb.getInt("currentActiveAccountId");
int issueNumber = Integer.parseInt(tinyDb.getString("issueNumber"));
DraftsApi draftsApi = new DraftsApi(appCtx);
return draftsApi.insertDraft(repositoryId, currentActiveAccountId, issueNumber, draftText, StaticGlobalVariables.draftTypeComment, "");
}
public void loadCollaboratorsList() { public void loadCollaboratorsList() {
final TinyDB tinyDb = new TinyDB(appCtx); final TinyDB tinyDb = new TinyDB(appCtx);
@ -325,12 +354,8 @@ public class ReplyToIssueActivity extends BaseActivity {
// delete draft comment // delete draft comment
if(tinyDb.getBoolean("draftsCommentsDeletionEnabled")) { if(tinyDb.getBoolean("draftsCommentsDeletionEnabled")) {
int repositoryId = (int) tinyDb.getLong("repositoryId", 0);
int issueNumber = Integer.parseInt(tinyDb.getString("issueNumber"));
DraftsApi draftsApi = new DraftsApi(appCtx); DraftsApi draftsApi = new DraftsApi(appCtx);
draftId = draftsApi.getDraftIdAsync(issueNumber, repositoryId); draftsApi.deleteSingleDraft((int) draftIdOnCreate);
draftsApi.deleteSingleDraft((int) draftId);
} }
finish(); finish();

View File

@ -53,6 +53,7 @@ public class RepoForksActivity extends BaseActivity {
private RecyclerView recyclerView; private RecyclerView recyclerView;
private List<UserRepositories> forksList; private List<UserRepositories> forksList;
private RepoForksAdapter adapter; private RepoForksAdapter adapter;
private ProgressBar progressLoadMore;
@Override @Override
protected int getLayoutResourceId() { protected int getLayoutResourceId() {
@ -86,6 +87,7 @@ public class RepoForksActivity extends BaseActivity {
ImageView closeActivity = findViewById(R.id.close); ImageView closeActivity = findViewById(R.id.close);
noData = findViewById(R.id.noData); noData = findViewById(R.id.noData);
progressLoadMore = findViewById(R.id.progressLoadMore);
progressBar = findViewById(R.id.progress_bar); progressBar = findViewById(R.id.progress_bar);
SwipeRefreshLayout swipeRefresh = findViewById(R.id.pullToRefresh); SwipeRefreshLayout swipeRefresh = findViewById(R.id.pullToRefresh);
@ -184,9 +186,7 @@ public class RepoForksActivity extends BaseActivity {
private void loadMore(String instanceUrl, String instanceToken, String repoOwner, String repoName, int page, int resultLimit) { private void loadMore(String instanceUrl, String instanceToken, String repoOwner, String repoName, int page, int resultLimit) {
//add loading progress view progressLoadMore.setVisibility(View.VISIBLE);
forksList.add(new UserRepositories("load"));
adapter.notifyItemInserted((forksList.size() - 1));
Call<List<UserRepositories>> call = RetrofitClient Call<List<UserRepositories>> call = RetrofitClient
.getInstance(instanceUrl, ctx) .getInstance(instanceUrl, ctx)
@ -219,6 +219,7 @@ public class RepoForksActivity extends BaseActivity {
} }
adapter.notifyDataChanged(); adapter.notifyDataChanged();
progressLoadMore.setVisibility(View.GONE);
} }
else { else {

View File

@ -11,6 +11,7 @@ import androidx.appcompat.app.AlertDialog;
import org.mian.gitnex.R; import org.mian.gitnex.R;
import org.mian.gitnex.helpers.TinyDB; import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.helpers.Toasty;
import org.mian.gitnex.helpers.Version;
/** /**
* Author M M Arif * Author M M Arif
@ -28,12 +29,13 @@ public class SettingsAppearanceActivity extends BaseActivity {
private static int codeBlockSelectedChoice = 0; private static int codeBlockSelectedChoice = 0;
private static String[] homeScreenList = {"My Repositories", "Starred Repositories", "Organizations", "Repositories", "Profile", "Explore", "Drafts"}; private static String[] homeScreenList = {"My Repositories", "Starred Repositories", "Organizations", "Repositories", "Profile", "Explore", "Drafts"};
private static String[] homeScreenListNew = {"My Repositories", "Starred Repositories", "Organizations", "Repositories", "Profile", "Explore", "Drafts", "Notifications"};
private static int homeScreenSelectedChoice = 0; private static int homeScreenSelectedChoice = 0;
private static String[] customFontList = {"Roboto", "Manrope", "Source Code Pro"}; private static String[] customFontList = {"Roboto", "Manrope", "Source Code Pro"};
private static int customFontSelectedChoice = 0; private static int customFontSelectedChoice = 0;
private static String[] themeList = {"Dark", "Light", "Auto (Day/Night)"}; private static String[] themeList = {"Dark", "Light", "Auto (Light / Dark)", "Retro", "Auto (Retro / Dark)"};
private static int themeSelectedChoice = 0; private static int themeSelectedChoice = 0;
@Override @Override
@ -69,6 +71,11 @@ public class SettingsAppearanceActivity extends BaseActivity {
initCloseListener(); initCloseListener();
closeActivity.setOnClickListener(onClickListener); closeActivity.setOnClickListener(onClickListener);
if(new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.3")) {
homeScreenList = homeScreenListNew;
}
if(!tinyDb.getString("timeStr").isEmpty()) { if(!tinyDb.getString("timeStr").isEmpty()) {
tvDateTimeSelected.setText(tinyDb.getString("timeStr")); tvDateTimeSelected.setText(tinyDb.getString("timeStr"));
} }

View File

@ -1,66 +0,0 @@
package org.mian.gitnex.activities;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import org.mian.gitnex.R;
import org.mian.gitnex.adapters.SponsorsAdapter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Author M M Arif
*/
public class SponsorsActivity extends BaseActivity {
private View.OnClickListener onClickListener;
private Context appCtx;
@Override
protected int getLayoutResourceId(){
return R.layout.activity_sponsors;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
appCtx = getApplicationContext();
ImageView closeActivity = findViewById(R.id.close);
initCloseListener();
closeActivity.setOnClickListener(onClickListener);
Resources res = getResources();
CharSequence[] sponsorsInfo = res.getTextArray(R.array.sponsorsInfo);
List<CharSequence> sponsorsList = new ArrayList<>(Arrays.asList(sponsorsInfo));
RecyclerView mRecyclerView = findViewById(R.id.recyclerView);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(appCtx));
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mRecyclerView.getContext(),
DividerItemDecoration.VERTICAL);
mRecyclerView.addItemDecoration(dividerItemDecoration);
SponsorsAdapter adapter = new SponsorsAdapter(sponsorsList);
mRecyclerView.setAdapter(adapter);
}
private void initCloseListener() {
onClickListener = view -> finish();
}
}

View File

@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.text.Html; import android.text.Html;
import android.text.Spanned;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -38,6 +39,8 @@ public class DraftsAdapter extends RecyclerView.Adapter<DraftsAdapter.DraftsView
private TextView issueType; private TextView issueType;
private TextView repoOwner; private TextView repoOwner;
private TextView repoName; private TextView repoName;
private TextView commentId;
private ImageView editCommentStatus;
private DraftsViewHolder(View itemView) { private DraftsViewHolder(View itemView) {
@ -51,7 +54,9 @@ public class DraftsAdapter extends RecyclerView.Adapter<DraftsAdapter.DraftsView
issueType = itemView.findViewById(R.id.issueType); issueType = itemView.findViewById(R.id.issueType);
repoOwner = itemView.findViewById(R.id.repoOwner); repoOwner = itemView.findViewById(R.id.repoOwner);
repoName = itemView.findViewById(R.id.repoName); repoName = itemView.findViewById(R.id.repoName);
commentId = itemView.findViewById(R.id.commentId);
ImageView deleteDraft = itemView.findViewById(R.id.deleteDraft); ImageView deleteDraft = itemView.findViewById(R.id.deleteDraft);
editCommentStatus = itemView.findViewById(R.id.editCommentStatus);
deleteDraft.setOnClickListener(itemDelete -> { deleteDraft.setOnClickListener(itemDelete -> {
@ -69,6 +74,12 @@ public class DraftsAdapter extends RecyclerView.Adapter<DraftsAdapter.DraftsView
intent.putExtra("issueNumber", issueNumber.getText().toString()); intent.putExtra("issueNumber", issueNumber.getText().toString());
intent.putExtra("repositoryId", repoId.getText().toString()); intent.putExtra("repositoryId", repoId.getText().toString());
intent.putExtra("draftTitle", repoInfo.getText().toString()); intent.putExtra("draftTitle", repoInfo.getText().toString());
intent.putExtra("commentId", commentId.getText().toString());
intent.putExtra("draftId", draftId.getText().toString());
if(!commentId.getText().toString().equalsIgnoreCase("")) {
intent.putExtra("commentAction", "edit");
}
TinyDB tinyDb = new TinyDB(mCtx); TinyDB tinyDb = new TinyDB(mCtx);
tinyDb.putString("issueNumber", issueNumber.getText().toString()); tinyDb.putString("issueNumber", issueNumber.getText().toString());
@ -117,9 +128,18 @@ public class DraftsAdapter extends RecyclerView.Adapter<DraftsAdapter.DraftsView
holder.repoOwner.setText(currentItem.getRepositoryOwner()); holder.repoOwner.setText(currentItem.getRepositoryOwner());
holder.repoName.setText(currentItem.getRepositoryName()); holder.repoName.setText(currentItem.getRepositoryName());
holder.draftText.setText(currentItem.getDraftText()); holder.draftText.setText(currentItem.getDraftText());
holder.commentId.setText(currentItem.getCommentId());
String issueNumber = "<font color='" + mCtx.getResources().getColor(R.color.lightGray) + "'>" + mCtx.getResources().getString(R.string.hash) + currentItem.getIssueId() + "</font>"; String issueNumber = "<font color='" + mCtx.getResources().getColor(R.color.lightGray) + "'>" + mCtx.getResources().getString(R.string.hash) + currentItem.getIssueId() + "</font>";
holder.repoInfo.setText(Html.fromHtml(issueNumber + " " + currentItem.getRepositoryOwner() + " / " + currentItem.getRepositoryName())); Spanned headTitle = Html.fromHtml(issueNumber + " " + currentItem.getRepositoryOwner() + " / " + currentItem.getRepositoryName());
holder.repoInfo.setText(headTitle);
if(!currentItem.getCommentId().equalsIgnoreCase("new")) {
holder.editCommentStatus.setVisibility(View.VISIBLE);
}
else {
holder.editCommentStatus.setVisibility(View.GONE);
}
} }

View File

@ -37,6 +37,8 @@ public class FilesAdapter extends RecyclerView.Adapter<FilesAdapter.FilesViewHol
class FilesViewHolder extends RecyclerView.ViewHolder { class FilesViewHolder extends RecyclerView.ViewHolder {
private ImageView fileTypeImage; private ImageView fileTypeImage;
private ImageView dirTypeImage;
private ImageView unknownTypeImage;
private TextView fileName; private TextView fileName;
private TextView fileType; private TextView fileType;
private TextView fileInfo; private TextView fileInfo;
@ -46,6 +48,8 @@ public class FilesAdapter extends RecyclerView.Adapter<FilesAdapter.FilesViewHol
super(itemView); super(itemView);
fileName = itemView.findViewById(R.id.fileName); fileName = itemView.findViewById(R.id.fileName);
fileTypeImage = itemView.findViewById(R.id.fileImage); fileTypeImage = itemView.findViewById(R.id.fileImage);
dirTypeImage = itemView.findViewById(R.id.dirImage);
unknownTypeImage = itemView.findViewById(R.id.unknownImage);
fileType = itemView.findViewById(R.id.fileType); fileType = itemView.findViewById(R.id.fileType);
fileInfo = itemView.findViewById(R.id.fileInfo); fileInfo = itemView.findViewById(R.id.fileInfo);
@ -157,16 +161,22 @@ public class FilesAdapter extends RecyclerView.Adapter<FilesAdapter.FilesViewHol
holder.fileName.setText(currentItem.getName()); holder.fileName.setText(currentItem.getName());
if(currentItem.getType().equals("file")) { if(currentItem.getType().equals("file")) {
holder.fileTypeImage.setImageDrawable(mCtx.getResources().getDrawable(R.drawable.ic_file)); holder.fileTypeImage.setVisibility(View.VISIBLE);
holder.dirTypeImage.setVisibility(View.GONE);
holder.unknownTypeImage.setVisibility(View.GONE);
holder.fileInfo.setVisibility(View.VISIBLE); holder.fileInfo.setVisibility(View.VISIBLE);
holder.fileInfo.setText(AppUtil.formatFileSizeInDetail(currentItem.getSize())); holder.fileInfo.setText(AppUtil.formatFileSizeInDetail(currentItem.getSize()));
} }
else if(currentItem.getType().equals("dir")) { else if(currentItem.getType().equals("dir")) {
holder.dirTypeImage.setVisibility(View.VISIBLE);
holder.unknownTypeImage.setVisibility(View.GONE);
holder.fileTypeImage.setVisibility(View.GONE);
holder.fileInfo.setVisibility(View.GONE); holder.fileInfo.setVisibility(View.GONE);
holder.fileTypeImage.setImageDrawable(mCtx.getResources().getDrawable(R.drawable.ic_directory));
} }
else { else {
holder.fileTypeImage.setImageDrawable(mCtx.getResources().getDrawable(R.drawable.ic_question)); holder.unknownTypeImage.setVisibility(View.VISIBLE);
holder.dirTypeImage.setVisibility(View.GONE);
holder.fileTypeImage.setVisibility(View.GONE);
} }
} }

View File

@ -109,6 +109,7 @@ public class IssueCommentsAdapter extends RecyclerView.Adapter<IssueCommentsAdap
TextView commentMenuQuote = view.findViewById(R.id.commentMenuQuote); TextView commentMenuQuote = view.findViewById(R.id.commentMenuQuote);
TextView commentMenuCopy = view.findViewById(R.id.commentMenuCopy); TextView commentMenuCopy = view.findViewById(R.id.commentMenuCopy);
TextView commentMenuDelete = view.findViewById(R.id.commentMenuDelete); TextView commentMenuDelete = view.findViewById(R.id.commentMenuDelete);
TextView issueCommentCopyUrl = view.findViewById(R.id.issueCommentCopyUrl);
if(!loginUid.contentEquals(commenterUsername.getText())) { if(!loginUid.contentEquals(commenterUsername.getText())) {
commentMenuEdit.setVisibility(View.GONE); commentMenuEdit.setVisibility(View.GONE);
@ -151,6 +152,22 @@ public class IssueCommentsAdapter extends RecyclerView.Adapter<IssueCommentsAdap
}); });
issueCommentCopyUrl.setOnClickListener(ediComment -> {
// comment Url
CharSequence commentUrl = htmlUrl.getText();
ClipboardManager clipboard = (ClipboardManager) Objects.requireNonNull(ctx).getSystemService(Context.CLIPBOARD_SERVICE);
assert clipboard != null;
ClipData clip = ClipData.newPlainText(commentUrl, commentUrl);
clipboard.setPrimaryClip(clip);
dialog.dismiss();
Toasty.success(ctx, ctx.getString(R.string.copyIssueUrlToastMsg));
});
commentMenuQuote.setOnClickListener(v1 -> { commentMenuQuote.setOnClickListener(v1 -> {
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
@ -189,7 +206,7 @@ public class IssueCommentsAdapter extends RecyclerView.Adapter<IssueCommentsAdap
clipboard.setPrimaryClip(clip); clipboard.setPrimaryClip(clip);
dialog.dismiss(); dialog.dismiss();
Toasty.info(ctx, ctx.getString(R.string.copyIssueCommentToastMsg)); Toasty.success(ctx, ctx.getString(R.string.copyIssueCommentToastMsg));
}); });

View File

@ -44,7 +44,9 @@ public class NotificationsAdapter extends RecyclerView.Adapter<NotificationsAdap
private LinearLayout frame; private LinearLayout frame;
private TextView subject; private TextView subject;
private TextView repository; private TextView repository;
private ImageView type; private ImageView typePr;
private ImageView typeIssue;
private ImageView typeUnknown;
private ImageView pinned; private ImageView pinned;
private ImageView more; private ImageView more;
@ -55,7 +57,9 @@ public class NotificationsAdapter extends RecyclerView.Adapter<NotificationsAdap
frame = itemView.findViewById(R.id.frame); frame = itemView.findViewById(R.id.frame);
subject = itemView.findViewById(R.id.subject); subject = itemView.findViewById(R.id.subject);
repository = itemView.findViewById(R.id.repository); repository = itemView.findViewById(R.id.repository);
type = itemView.findViewById(R.id.type); typePr = itemView.findViewById(R.id.typePr);
typeIssue = itemView.findViewById(R.id.typeIssue);
typeUnknown = itemView.findViewById(R.id.typeUnknown);
pinned = itemView.findViewById(R.id.pinned); pinned = itemView.findViewById(R.id.pinned);
more = itemView.findViewById(R.id.more); more = itemView.findViewById(R.id.more);
@ -93,15 +97,21 @@ public class NotificationsAdapter extends RecyclerView.Adapter<NotificationsAdap
switch(notificationThread.getSubject().getType()) { switch(notificationThread.getSubject().getType()) {
case "Pull": case "Pull":
holder.type.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_pull_request, null)); holder.typePr.setVisibility(View.VISIBLE);
holder.typeIssue.setVisibility(View.GONE);
holder.typeUnknown.setVisibility(View.GONE);
break; break;
case "Issue": case "Issue":
holder.type.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_issue, null)); holder.typePr.setVisibility(View.GONE);
holder.typeIssue.setVisibility(View.VISIBLE);
holder.typeUnknown.setVisibility(View.GONE);
break; break;
default: default:
holder.type.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_question, null)); holder.typePr.setVisibility(View.GONE);
holder.typeIssue.setVisibility(View.GONE);
holder.typeUnknown.setVisibility(View.VISIBLE);
break; break;
} }

View File

@ -0,0 +1,72 @@
package org.mian.gitnex.adapters;
import android.annotation.SuppressLint;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.mian.gitnex.R;
import org.mian.gitnex.clients.PicassoService;
import org.mian.gitnex.database.models.UserAccount;
import org.mian.gitnex.helpers.RoundedTransformation;
import org.mian.gitnex.helpers.TinyDB;
import java.util.List;
import io.mikael.urlbuilder.UrlBuilder;
/**
* Author M M Arif
*/
public class UserAccountsListDialogAdapter extends ArrayAdapter<UserAccount> {
private final Context mCtx;
private final List<UserAccount> userAccountsList;
public UserAccountsListDialogAdapter(@NonNull Context mCtx, int resource, @NonNull List<UserAccount> objects) {
super(mCtx, resource, objects);
userAccountsList = objects;
this.mCtx = mCtx;
}
@SuppressLint("ViewHolder")
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) mCtx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
assert inflater != null;
View rowView = inflater.inflate(R.layout.custom_user_accounts_list, parent, false);
TinyDB tinyDB = new TinyDB(mCtx);
ImageView profileImage = rowView.findViewById(R.id.profileImage);
TextView userName = rowView.findViewById(R.id.userName);
TextView accountUrl = rowView.findViewById(R.id.accountUrl);
ImageView activeAccount = rowView.findViewById(R.id.activeAccount);
UserAccount currentItem = userAccountsList.get(position);
String url = UrlBuilder.fromString(currentItem.getInstanceUrl())
.withPath("/")
.toString();
userName.setText(currentItem.getUserName());
accountUrl.setText(url);
if(tinyDB.getInt("currentActiveAccountId") == currentItem.getAccountId()) {
activeAccount.setVisibility(View.VISIBLE);
}
PicassoService
.getInstance(mCtx).get().load(url + "img/favicon.png").placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(profileImage);
return rowView;
}
}

View File

@ -0,0 +1,147 @@
package org.mian.gitnex.adapters;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.recyclerview.widget.RecyclerView;
import org.mian.gitnex.R;
import org.mian.gitnex.clients.PicassoService;
import org.mian.gitnex.database.api.UserAccountsApi;
import org.mian.gitnex.database.models.UserAccount;
import org.mian.gitnex.fragments.UserAccountsFragment;
import org.mian.gitnex.helpers.RoundedTransformation;
import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.helpers.Toasty;
import java.util.List;
import io.mikael.urlbuilder.UrlBuilder;
/**
* Author M M Arif
*/
public class UserAccountsNavAdapter extends RecyclerView.Adapter<UserAccountsNavAdapter.UserAccountsViewHolder> {
private static DrawerLayout drawer;
private List<UserAccount> userAccountsList;
private Context mCtx;
private TextView toolbarTitle;
public UserAccountsNavAdapter(Context mCtx, List<UserAccount> userAccountsListMain, DrawerLayout drawerLayout, TextView toolbarTitle) {
this.mCtx = mCtx;
this.userAccountsList = userAccountsListMain;
drawer = drawerLayout;
this.toolbarTitle = toolbarTitle;
}
class UserAccountsViewHolder extends RecyclerView.ViewHolder {
private ImageView userAccountAvatar;
private UserAccountsViewHolder(View itemView) {
super(itemView);
userAccountAvatar = itemView.findViewById(R.id.userAccountAvatar);
itemView.setOnClickListener(item -> {
customDialogUserAccountsList(userAccountsList);
drawer.closeDrawers();
});
}
}
@NonNull
@Override
public UserAccountsNavAdapter.UserAccountsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.nav_user_accounts, parent, false);
return new UserAccountsViewHolder(v);
}
@SuppressLint("DefaultLocale")
@Override
public void onBindViewHolder(@NonNull UserAccountsNavAdapter.UserAccountsViewHolder holder, int position) {
UserAccount currentItem = userAccountsList.get(position);
String url = UrlBuilder.fromString(currentItem.getInstanceUrl())
.withPath("/")
.toString();
PicassoService
.getInstance(mCtx).get().load(url + "img/favicon.png").placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(holder.userAccountAvatar);
}
@Override
public int getItemCount() {
return userAccountsList.size();
}
private void customDialogUserAccountsList(List<UserAccount> allAccountsList) {
TinyDB tinyDB = new TinyDB(mCtx);
Dialog dialog = new Dialog(mCtx, R.style.ThemeOverlay_MaterialComponents_Dialog_Alert);
dialog.setContentView(R.layout.custom_user_accounts_dialog);
ListView listView = dialog.findViewById(R.id.accountsList);
TextView manageAccounts = dialog.findViewById(R.id.manageAccounts);
if (dialog.getWindow() != null) {
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
}
manageAccounts.setOnClickListener(item -> {
toolbarTitle.setText(mCtx.getResources().getString(R.string.pageTitleUserAccounts));
AppCompatActivity activity = (AppCompatActivity) mCtx;
activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new UserAccountsFragment()).commit();
dialog.dismiss();
});
UserAccountsListDialogAdapter arrayAdapter = new UserAccountsListDialogAdapter(mCtx, R.layout.custom_user_accounts_list, allAccountsList);
listView.setAdapter(arrayAdapter);
listView.setOnItemClickListener((adapterView, view, which, l) -> {
String accountNameSwitch = allAccountsList.get(which).getAccountName();
UserAccountsApi userAccountsApi = new UserAccountsApi(mCtx);
UserAccount userAccount = userAccountsApi.getAccountData(accountNameSwitch);
if(tinyDB.getInt("currentActiveAccountId") != userAccount.getAccountId()) {
String url = UrlBuilder.fromString(userAccount.getInstanceUrl())
.withPath("/")
.toString();
tinyDB.putString("loginUid", userAccount.getUserName());
tinyDB.putString("userLogin", userAccount.getUserName());
tinyDB.putString(userAccount.getUserName() + "-token", userAccount.getToken());
tinyDB.putString("instanceUrl", userAccount.getInstanceUrl());
tinyDB.putInt("currentActiveAccountId", userAccount.getAccountId());
Toasty.success(mCtx, mCtx.getResources().getString(R.string.switchAccountSuccess, userAccount.getUserName(), url));
((Activity) mCtx).recreate();
dialog.dismiss();
}
});
dialog.show();
}
}

View File

@ -27,7 +27,7 @@ public class DraftsApi {
draftsDao = db.draftsDao(); draftsDao = db.draftsDao();
} }
public long insertDraft(int repositoryId, int draftAccountId, int issueId, String draftText, String draftType) { public long insertDraft(int repositoryId, int draftAccountId, int issueId, String draftText, String draftType, String commentId) {
Draft draft = new Draft(); Draft draft = new Draft();
draft.setDraftRepositoryId(repositoryId); draft.setDraftRepositoryId(repositoryId);
@ -35,6 +35,7 @@ public class DraftsApi {
draft.setIssueId(issueId); draft.setIssueId(issueId);
draft.setDraftText(draftText); draft.setDraftText(draftText);
draft.setDraftType(draftType); draft.setDraftType(draftType);
draft.setCommentId(draftType);
return insertDraftAsyncTask(draft); return insertDraftAsyncTask(draft);
} }
@ -71,11 +72,11 @@ public class DraftsApi {
return draftId; return draftId;
} }
public Integer checkDraft(int issueId, int draftRepositoryId) { public Integer checkDraft(int issueId, int draftRepositoryId, String commentId) {
try { try {
Thread thread = new Thread(() -> checkDraftFlag = draftsDao.checkDraftDao(issueId, draftRepositoryId)); Thread thread = new Thread(() -> checkDraftFlag = draftsDao.checkDraftDao(issueId, draftRepositoryId, commentId));
thread.start(); thread.start();
thread.join(); thread.join();
} }
@ -112,14 +113,14 @@ public class DraftsApi {
new Thread(() -> draftsDao.deleteAllDrafts(accountId)).start(); new Thread(() -> draftsDao.deleteAllDrafts(accountId)).start();
} }
public static void updateDraft(final String draftText, final int draftId) { public static void updateDraft(final String draftText, final int draftId, final String commentId) {
new Thread(() -> draftsDao.updateDraft(draftText, draftId)).start(); new Thread(() -> draftsDao.updateDraft(draftText, draftId, commentId)).start();
} }
public static void updateDraftByIssueIdAsyncTask(final String draftText, final int issueId, final int draftRepositoryId) { public static void updateDraftByIssueIdAsyncTask(final String draftText, final int issueId, final int draftRepositoryId, final String commentId) {
new Thread(() -> draftsDao.updateDraftByIssueId(draftText, issueId, draftRepositoryId)).start(); new Thread(() -> draftsDao.updateDraftByIssueId(draftText, issueId, draftRepositoryId, commentId)).start();
} }
} }

View File

@ -35,14 +35,14 @@ public interface DraftsDao {
@Query("SELECT * FROM Drafts WHERE issueId = :issueId") @Query("SELECT * FROM Drafts WHERE issueId = :issueId")
LiveData<Draft> fetchDraftByIssueId(int issueId); LiveData<Draft> fetchDraftByIssueId(int issueId);
@Query("SELECT count(draftId) FROM Drafts WHERE issueId = :issueId AND draftRepositoryId = :draftRepositoryId") @Query("SELECT count(draftId) FROM Drafts WHERE issueId = :issueId AND draftRepositoryId = :draftRepositoryId AND commentId = :commentId")
Integer checkDraftDao(int issueId, int draftRepositoryId); Integer checkDraftDao(int issueId, int draftRepositoryId, String commentId);
@Query("UPDATE Drafts SET draftText= :draftText WHERE draftId = :draftId") @Query("UPDATE Drafts SET draftText = :draftText, commentId = :commentId WHERE draftId = :draftId")
void updateDraft(String draftText, int draftId); void updateDraft(String draftText, int draftId, String commentId);
@Query("UPDATE Drafts SET draftText= :draftText WHERE issueId = :issueId AND draftRepositoryId = :draftRepositoryId") @Query("UPDATE Drafts SET draftText = :draftText WHERE issueId = :issueId AND draftRepositoryId = :draftRepositoryId AND commentId = :commentId")
void updateDraftByIssueId(String draftText, int issueId, int draftRepositoryId); void updateDraftByIssueId(String draftText, int issueId, int draftRepositoryId, String commentId);
@Query("SELECT draftId FROM Drafts WHERE issueId = :issueId AND draftRepositoryId = :draftRepositoryId") @Query("SELECT draftId FROM Drafts WHERE issueId = :issueId AND draftRepositoryId = :draftRepositoryId")
Integer getDraftId(int issueId, int draftRepositoryId); Integer getDraftId(int issueId, int draftRepositoryId);

View File

@ -19,7 +19,7 @@ import org.mian.gitnex.database.models.UserAccount;
*/ */
@Database(entities = {Draft.class, Repository.class, UserAccount.class}, @Database(entities = {Draft.class, Repository.class, UserAccount.class},
version = 1, exportSchema = false) version = 2, exportSchema = false)
public abstract class GitnexDatabase extends RoomDatabase { public abstract class GitnexDatabase extends RoomDatabase {
private static GitnexDatabase gitnexDatabase; private static GitnexDatabase gitnexDatabase;
@ -30,7 +30,7 @@ public abstract class GitnexDatabase extends RoomDatabase {
String DB_NAME = "gitnex"; String DB_NAME = "gitnex";
gitnexDatabase = Room.databaseBuilder(context, GitnexDatabase.class, DB_NAME) gitnexDatabase = Room.databaseBuilder(context, GitnexDatabase.class, DB_NAME)
//.fallbackToDestructiveMigration() //.fallbackToDestructiveMigration()
//.addMigrations(MIGRATION_1_2) .addMigrations(MIGRATION_1_2)
.build(); .build();
} }
@ -48,7 +48,7 @@ public abstract class GitnexDatabase extends RoomDatabase {
public void migrate(@NonNull SupportSQLiteDatabase database) { public void migrate(@NonNull SupportSQLiteDatabase database) {
//database.execSQL("DROP TABLE Drafts"); //database.execSQL("DROP TABLE Drafts");
//database.execSQL("ALTER TABLE 'Drafts' ADD COLUMN 'draftType' TEXT"); database.execSQL("ALTER TABLE 'Drafts' ADD COLUMN 'commentId' TEXT");
} }
}; };

View File

@ -24,6 +24,8 @@ public class Draft implements Serializable {
private String draftText; private String draftText;
@Nullable @Nullable
private String draftType; private String draftType;
@Nullable
private String commentId;
public int getDraftId() { public int getDraftId() {
@ -86,4 +88,15 @@ public class Draft implements Serializable {
this.draftType = draftType; this.draftType = draftType;
} }
@Nullable
public String getCommentId() {
return commentId;
}
public void setCommentId(@Nullable String commentId) {
this.commentId = commentId;
}
} }

View File

@ -18,6 +18,7 @@ public class DraftWithRepository {
private int issueId; private int issueId;
private String draftText; private String draftText;
private String draftType; private String draftType;
private String commentId;
public int getRepositoryId() { public int getRepositoryId() {
@ -119,4 +120,14 @@ public class DraftWithRepository {
this.draftType = draftType; this.draftType = draftType;
} }
public String getCommentId() {
return commentId;
}
public void setCommentId(String commentId) {
this.commentId = commentId;
}
} }

View File

@ -11,8 +11,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import org.mian.gitnex.R; import org.mian.gitnex.R;
import org.mian.gitnex.activities.CreditsActivity;
import org.mian.gitnex.activities.SponsorsActivity;
import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.TinyDB; import org.mian.gitnex.helpers.TinyDB;
import java.util.Objects; import java.util.Objects;
@ -33,83 +31,62 @@ public class AboutFragment extends Fragment {
final TextView donationLink; final TextView donationLink;
final TextView donationLinkPatreon; final TextView donationLinkPatreon;
final TextView translateLink; final TextView translateLink;
final TextView creditsButton;
final TextView sponsorsButton;
final TextView appWebsite; final TextView appWebsite;
final TextView appRepo; final TextView appRepo;
appVerBuild = v.findViewById(R.id.appVerBuild); appVerBuild = v.findViewById(R.id.appVerBuild);
TextView viewTextGiteaVersion = v.findViewById(R.id.giteaVersion); TextView viewTextGiteaVersion = v.findViewById(R.id.giteaVersion);
creditsButton = v.findViewById(R.id.creditsButton);
donationLink = v.findViewById(R.id.donationLink); donationLink = v.findViewById(R.id.donationLink);
donationLinkPatreon = v.findViewById(R.id.donationLinkPatreon); donationLinkPatreon = v.findViewById(R.id.donationLinkPatreon);
translateLink = v.findViewById(R.id.translateLink); translateLink = v.findViewById(R.id.translateLink);
sponsorsButton = v.findViewById(R.id.sponsorsButton);
appWebsite = v.findViewById(R.id.appWebsite); appWebsite = v.findViewById(R.id.appWebsite);
appRepo = v.findViewById(R.id.appRepo); appRepo = v.findViewById(R.id.appRepo);
appVerBuild.setText(getString(R.string.appVerBuild, AppUtil.getAppVersion(Objects.requireNonNull(getContext())), AppUtil.getAppBuildNo(getContext()))); appVerBuild.setText(getString(R.string.appVerBuild, AppUtil.getAppVersion(Objects.requireNonNull(getContext())), AppUtil.getAppBuildNo(getContext())));
donationLink.setOnClickListener(new View.OnClickListener() { donationLink.setOnClickListener(v1 -> {
public void onClick(View v) {
Intent intent = new Intent(); Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW); intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE); intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setData(Uri.parse(getResources().getString(R.string.supportLink))); intent.setData(Uri.parse(getResources().getString(R.string.supportLink)));
startActivity(intent); startActivity(intent);
}
}); });
donationLinkPatreon.setOnClickListener(new View.OnClickListener() { donationLinkPatreon.setOnClickListener(v12 -> {
public void onClick(View v) {
Intent intent = new Intent(); Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW); intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE); intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setData(Uri.parse(getResources().getString(R.string.supportLinkPatreon))); intent.setData(Uri.parse(getResources().getString(R.string.supportLinkPatreon)));
startActivity(intent); startActivity(intent);
}
}); });
translateLink.setOnClickListener(new View.OnClickListener() { translateLink.setOnClickListener(v13 -> {
public void onClick(View v) {
Intent intent = new Intent(); Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW); intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE); intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setData(Uri.parse(getResources().getString(R.string.crowdInLink))); intent.setData(Uri.parse(getResources().getString(R.string.crowdInLink)));
startActivity(intent); startActivity(intent);
}
}); });
appWebsite.setOnClickListener(new View.OnClickListener() { appWebsite.setOnClickListener(v14 -> {
public void onClick(View v) {
Intent intent = new Intent(); Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW); intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE); intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setData(Uri.parse(getResources().getString(R.string.appWebsiteLink))); intent.setData(Uri.parse(getResources().getString(R.string.appWebsiteLink)));
startActivity(intent); startActivity(intent);
}
}); });
appRepo.setOnClickListener(new View.OnClickListener() { appRepo.setOnClickListener(v15 -> {
public void onClick(View v) {
Intent intent = new Intent(); Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW); intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE); intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setData(Uri.parse(getResources().getString(R.string.appRepoLink))); intent.setData(Uri.parse(getResources().getString(R.string.appRepoLink)));
startActivity(intent); startActivity(intent);
}
});
creditsButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
startActivity(new Intent(getContext(), CreditsActivity.class));
}
});
sponsorsButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
startActivity(new Intent(getContext(), SponsorsActivity.class));
}
}); });
String commit = getResources().getString(R.string.commitPage) + tinyDb.getString("giteaVersion"); String commit = getResources().getString(R.string.commitPage) + tinyDb.getString("giteaVersion");

View File

@ -26,13 +26,25 @@ public class BottomSheetFileViewerFragment extends BottomSheetDialogFragment {
View v = inflater.inflate(R.layout.bottom_sheet_file_viewer, container, false); View v = inflater.inflate(R.layout.bottom_sheet_file_viewer, container, false);
TextView downloadFile = v.findViewById(R.id.downloadFile); TextView downloadFile = v.findViewById(R.id.downloadFile);
TextView deleteFile = v.findViewById(R.id.deleteFile);
TextView editFile = v.findViewById(R.id.editFile);
downloadFile.setOnClickListener(v1 -> {
downloadFile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bmListener.onButtonClicked("downloadFile"); bmListener.onButtonClicked("downloadFile");
dismiss(); dismiss();
} });
deleteFile.setOnClickListener(v1 -> {
bmListener.onButtonClicked("deleteFile");
dismiss();
});
editFile.setOnClickListener(v1 -> {
bmListener.onButtonClicked("editFile");
dismiss();
}); });
return v; return v;
@ -47,9 +59,11 @@ public class BottomSheetFileViewerFragment extends BottomSheetDialogFragment {
super.onAttach(context); super.onAttach(context);
try { try {
bmListener = (BottomSheetFileViewerFragment.BottomSheetListener) context; bmListener = (BottomSheetFileViewerFragment.BottomSheetListener) context;
} }
catch (ClassCastException e) { catch (ClassCastException e) {
throw new ClassCastException(context.toString() + " must implement BottomSheetListener"); throw new ClassCastException(context.toString() + " must implement BottomSheetListener");
} }
} }

View File

@ -19,14 +19,10 @@ import org.mian.gitnex.activities.AddRemoveLabelsActivity;
import org.mian.gitnex.activities.EditIssueActivity; import org.mian.gitnex.activities.EditIssueActivity;
import org.mian.gitnex.activities.FileDiffActivity; import org.mian.gitnex.activities.FileDiffActivity;
import org.mian.gitnex.activities.MergePullRequestActivity; import org.mian.gitnex.activities.MergePullRequestActivity;
import org.mian.gitnex.helpers.PathsHelper;
import org.mian.gitnex.helpers.TinyDB; import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.helpers.Toasty;
import org.mian.gitnex.helpers.Version; import org.mian.gitnex.helpers.Version;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Objects; import java.util.Objects;
import io.mikael.urlbuilder.UrlBuilder;
/** /**
* Author M M Arif * Author M M Arif
@ -122,60 +118,27 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment {
shareIssue.setOnClickListener(v1 -> { shareIssue.setOnClickListener(v1 -> {
try {
URI instanceUrl = new URI(tinyDB.getString("instanceUrlWithProtocol"));
String issuePath = PathsHelper.join(instanceUrl.getPath(), tinyDB.getString("repoFullName"), "/issues/", tinyDB.getString("issueNumber"));
String issueUrl = UrlBuilder.fromUri(instanceUrl)
.withPath(issuePath)
.toString();
// share issue
Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("text/plain"); sharingIntent.setType("text/plain");
sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, getResources().getString(R.string.hash) + tinyDB.getString("issueNumber") + " " + tinyDB.getString("issueTitle")); sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, getResources().getString(R.string.hash) + tinyDB.getString("issueNumber") + " " + tinyDB.getString("issueTitle"));
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, issueUrl); sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, tinyDB.getString("singleIssueHtmlUrl"));
startActivity(Intent.createChooser(sharingIntent, getResources().getString(R.string.hash) + tinyDB.getString("issueNumber") + " " + tinyDB.getString("issueTitle"))); startActivity(Intent.createChooser(sharingIntent, getResources().getString(R.string.hash) + tinyDB.getString("issueNumber") + " " + tinyDB.getString("issueTitle")));
}
catch(URISyntaxException e) {
Toasty.error(ctx, getString(R.string.genericError));
}
finally {
dismiss(); dismiss();
}
}); });
copyIssueUrl.setOnClickListener(v12 -> { copyIssueUrl.setOnClickListener(v12 -> {
try {
URI instanceUrl = new URI(tinyDB.getString("instanceUrlWithProtocol"));
String issuePath = PathsHelper.join(instanceUrl.getPath(), tinyDB.getString("repoFullName"), "/issues/", tinyDB.getString("issueNumber"));
String issueUrl = UrlBuilder.fromUri(instanceUrl)
.withPath(issuePath)
.toString();
// copy to clipboard // copy to clipboard
ClipboardManager clipboard = (ClipboardManager) Objects.requireNonNull(ctx).getSystemService(Context.CLIPBOARD_SERVICE); ClipboardManager clipboard = (ClipboardManager) Objects.requireNonNull(ctx).getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("issueUrl", issueUrl); ClipData clip = ClipData.newPlainText("issueUrl", tinyDB.getString("singleIssueHtmlUrl"));
assert clipboard != null; assert clipboard != null;
clipboard.setPrimaryClip(clip); clipboard.setPrimaryClip(clip);
Toasty.info(ctx, ctx.getString(R.string.copyIssueUrlToastMsg)); Toasty.info(ctx, ctx.getString(R.string.copyIssueUrlToastMsg));
}
catch(URISyntaxException e) {
Toasty.error(ctx, getString(R.string.genericError));
}
finally {
dismiss(); dismiss();
}
}); });

View File

@ -4,7 +4,6 @@ import android.content.Context;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -30,9 +29,8 @@ import retrofit2.Callback;
import retrofit2.Response; import retrofit2.Response;
/** /**
* + * Template Author M M Arif * Template Author Author M M Arif
* + * Author 6543 * Author 6543
* +
*/ */
public class ExploreRepositoriesFragment extends Fragment { public class ExploreRepositoriesFragment extends Fragment {
@ -92,10 +90,7 @@ public class ExploreRepositoriesFragment extends Fragment {
mProgressBar.setVisibility(View.VISIBLE); mProgressBar.setVisibility(View.VISIBLE);
searchKeyword.setOnEditorActionListener(new TextView.OnEditorActionListener() { searchKeyword.setOnEditorActionListener((v1, actionId, event) -> {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId == EditorInfo.IME_ACTION_SEND) { if(actionId == EditorInfo.IME_ACTION_SEND) {
if(!searchKeyword.getText().toString().equals("")) { if(!searchKeyword.getText().toString().equals("")) {
@ -105,10 +100,9 @@ public class ExploreRepositoriesFragment extends Fragment {
} }
} }
return false; return false;
}
}); });
int limitDefault = 10; int limitDefault = 25;
loadDefaultList(instanceUrl, instanceToken, loginUid, repoTypeInclude, sort, order, getContext(), limitDefault); loadDefaultList(instanceUrl, instanceToken, loginUid, repoTypeInclude, sort, order, getContext(), limitDefault);
return v; return v;

View File

@ -55,6 +55,7 @@ public class IssuesFragment extends Fragment {
private TextView noDataIssues; private TextView noDataIssues;
private int resultLimit = StaticGlobalVariables.resultLimitOldGiteaInstances; private int resultLimit = StaticGlobalVariables.resultLimitOldGiteaInstances;
private String requestType = StaticGlobalVariables.issuesRequestType; private String requestType = StaticGlobalVariables.issuesRequestType;
private ProgressBar progressLoadMore;
@Nullable @Nullable
@Override @Override
@ -83,6 +84,7 @@ public class IssuesFragment extends Fragment {
recyclerView = v.findViewById(R.id.recyclerView); recyclerView = v.findViewById(R.id.recyclerView);
issuesList = new ArrayList<>(); issuesList = new ArrayList<>();
progressLoadMore = v.findViewById(R.id.progressLoadMore);
mProgressBar = v.findViewById(R.id.progress_bar); mProgressBar = v.findViewById(R.id.progress_bar);
noDataIssues = v.findViewById(R.id.noDataIssues); noDataIssues = v.findViewById(R.id.noDataIssues);
@ -226,9 +228,7 @@ public class IssuesFragment extends Fragment {
private void loadMore(String token, String repoOwner, String repoName, int page, int resultLimit, String requestType, String issueState) { private void loadMore(String token, String repoOwner, String repoName, int page, int resultLimit, String requestType, String issueState) {
//add loading progress view progressLoadMore.setVisibility(View.VISIBLE);
issuesList.add(new Issues("load"));
adapter.notifyItemInserted((issuesList.size() - 1));
Call<List<Issues>> call = api.getIssues(token, repoOwner, repoName, page, resultLimit, requestType, issueState); Call<List<Issues>> call = api.getIssues(token, repoOwner, repoName, page, resultLimit, requestType, issueState);
@ -239,9 +239,6 @@ public class IssuesFragment extends Fragment {
if(response.code() == 200) { if(response.code() == 200) {
//remove loading view
issuesList.remove(issuesList.size() - 1);
List<Issues> result = response.body(); List<Issues> result = response.body();
assert result != null; assert result != null;
@ -259,6 +256,7 @@ public class IssuesFragment extends Fragment {
} }
adapter.notifyDataChanged(); adapter.notifyDataChanged();
progressLoadMore.setVisibility(View.GONE);
} }
else { else {

View File

@ -10,6 +10,7 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
import android.widget.GridView; import android.widget.GridView;
import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@ -39,6 +40,7 @@ public class MembersByOrgFragment extends Fragment {
private String orgName; private String orgName;
private MembersByOrgAdapter adapter; private MembersByOrgAdapter adapter;
private GridView mGridView; private GridView mGridView;
private ProgressBar progressBar;
public MembersByOrgFragment() { public MembersByOrgFragment() {
} }
@ -72,6 +74,7 @@ public class MembersByOrgFragment extends Fragment {
final String instanceToken = "token " + tinyDb.getString(loginUid + "-token"); final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
noDataMembers = v.findViewById(R.id.noDataMembers); noDataMembers = v.findViewById(R.id.noDataMembers);
progressBar = v.findViewById(R.id.progressBar);
mGridView = v.findViewById(R.id.gridView); mGridView = v.findViewById(R.id.gridView);
fetchDataAsync(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), orgName); fetchDataAsync(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), orgName);
@ -96,6 +99,8 @@ public class MembersByOrgFragment extends Fragment {
mGridView.setAdapter(adapter); mGridView.setAdapter(adapter);
noDataMembers.setVisibility(View.VISIBLE); noDataMembers.setVisibility(View.VISIBLE);
} }
progressBar.setVisibility(View.GONE);
} }
}); });

View File

@ -219,9 +219,7 @@ public class MilestonesFragment extends Fragment {
private void loadMore(String token, String repoOwner, String repoName, int page, int resultLimit, String milestoneState) { private void loadMore(String token, String repoOwner, String repoName, int page, int resultLimit, String milestoneState) {
//add loading progress view viewBinding.progressLoadMore.setVisibility(View.VISIBLE);
dataList.add(new Milestones("load"));
adapter.notifyItemInserted((dataList.size() - 1));
Call<List<Milestones>> call = api.getMilestones(token, repoOwner, repoName, page, resultLimit, milestoneState); Call<List<Milestones>> call = api.getMilestones(token, repoOwner, repoName, page, resultLimit, milestoneState);
@ -251,6 +249,7 @@ public class MilestonesFragment extends Fragment {
} }
adapter.notifyDataChanged(); adapter.notifyDataChanged();
viewBinding.progressLoadMore.setVisibility(View.GONE);
} }
else { else {

View File

@ -67,7 +67,7 @@ public class ProfileFragment extends Fragment {
if(userLanguageCodes.length >= 2) { if(userLanguageCodes.length >= 2) {
Locale locale = new Locale(userLanguageCodes[0], userLanguageCodes[1]); Locale locale = new Locale(userLanguageCodes[0], userLanguageCodes[1]);
userLanguage.setText(locale.getDisplayCountry()); userLanguage.setText(locale.getDisplayLanguage());
} }
else { else {

View File

@ -55,6 +55,7 @@ public class PullRequestsFragment extends Fragment {
private int pageSize = StaticGlobalVariables.prPageInit; private int pageSize = StaticGlobalVariables.prPageInit;
private TextView noData; private TextView noData;
private int resultLimit = StaticGlobalVariables.resultLimitOldGiteaInstances; private int resultLimit = StaticGlobalVariables.resultLimitOldGiteaInstances;
private ProgressBar progressLoadMore;
@Nullable @Nullable
@Override @Override
@ -83,6 +84,7 @@ public class PullRequestsFragment extends Fragment {
recyclerView = v.findViewById(R.id.recyclerView); recyclerView = v.findViewById(R.id.recyclerView);
prList = new ArrayList<>(); prList = new ArrayList<>();
progressLoadMore = v.findViewById(R.id.progressLoadMore);
mProgressBar = v.findViewById(R.id.progress_bar); mProgressBar = v.findViewById(R.id.progress_bar);
noData = v.findViewById(R.id.noData); noData = v.findViewById(R.id.noData);
@ -233,9 +235,7 @@ public class PullRequestsFragment extends Fragment {
private void loadMore(String token, String repoOwner, String repoName, int page, String prState, int resultLimit) { private void loadMore(String token, String repoOwner, String repoName, int page, String prState, int resultLimit) {
//add loading progress view progressLoadMore.setVisibility(View.VISIBLE);
prList.add(new PullRequests("load"));
adapter.notifyItemInserted((prList.size() - 1));
Call<List<PullRequests>> call = apiPR.getPullRequests(token, repoOwner, repoName, page, prState, resultLimit); Call<List<PullRequests>> call = apiPR.getPullRequests(token, repoOwner, repoName, page, prState, resultLimit);
@ -266,6 +266,7 @@ public class PullRequestsFragment extends Fragment {
} }
adapter.notifyDataChanged(); adapter.notifyDataChanged();
progressLoadMore.setVisibility(View.GONE);
} }
else { else {

View File

@ -93,7 +93,7 @@ public class ChangeLog {
androidx.appcompat.app.AlertDialog.Builder builder = new AlertDialog.Builder(changelogActivity); androidx.appcompat.app.AlertDialog.Builder builder = new AlertDialog.Builder(changelogActivity);
builder.setTitle(R.string.changelogTitle); builder.setTitle(R.string.changelogTitle);
builder.setMessage(Html.fromHtml("<small>" + changelogMessage + "</small>")); builder.setMessage(Html.fromHtml("<small>" + changelogMessage + "</small>"));
builder.setNegativeButton(R.string.close, (dialog, which) -> dialog.cancel()); builder.setNeutralButton(R.string.close, null);
builder.setCancelable(false); builder.setCancelable(false);
builder.create(); builder.create();
builder.show(); builder.show();

View File

@ -7,6 +7,8 @@ import org.mian.gitnex.models.Collaborators;
import org.mian.gitnex.models.Commits; import org.mian.gitnex.models.Commits;
import org.mian.gitnex.models.CreateIssue; import org.mian.gitnex.models.CreateIssue;
import org.mian.gitnex.models.CreateLabel; import org.mian.gitnex.models.CreateLabel;
import org.mian.gitnex.models.DeleteFile;
import org.mian.gitnex.models.EditFile;
import org.mian.gitnex.models.Emails; import org.mian.gitnex.models.Emails;
import org.mian.gitnex.models.ExploreRepositories; import org.mian.gitnex.models.ExploreRepositories;
import org.mian.gitnex.models.Files; import org.mian.gitnex.models.Files;
@ -39,6 +41,7 @@ import retrofit2.Call;
import retrofit2.http.Body; import retrofit2.http.Body;
import retrofit2.http.DELETE; import retrofit2.http.DELETE;
import retrofit2.http.GET; import retrofit2.http.GET;
import retrofit2.http.HTTP;
import retrofit2.http.Header; import retrofit2.http.Header;
import retrofit2.http.PATCH; import retrofit2.http.PATCH;
import retrofit2.http.POST; import retrofit2.http.POST;
@ -265,6 +268,12 @@ public interface ApiInterface {
@GET("repos/{owner}/{repo}/contents/{fileDir}") // get all the sub files and dirs of a repository @GET("repos/{owner}/{repo}/contents/{fileDir}") // get all the sub files and dirs of a repository
Call<List<Files>> getDirFiles(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("fileDir") String fileDir, @Query("ref") String ref); Call<List<Files>> getDirFiles(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("fileDir") String fileDir, @Query("ref") String ref);
@HTTP(method = "DELETE", path = "repos/{owner}/{repo}/contents/{filepath}", hasBody = true) // delete a file
Call<JsonElement> deleteFile(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("filepath") String filepath, @Body DeleteFile jsonStr);
@PUT("repos/{owner}/{repo}/contents/{filepath}") // edit/update a file
Call<JsonElement> editFile(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("filepath") String filepath, @Body EditFile jsonStr);
@GET("user/starred/{owner}/{repo}") // check star status of a repository @GET("user/starred/{owner}/{repo}") // check star status of a repository
Call<JsonElement> checkRepoStarStatus(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName); Call<JsonElement> checkRepoStarStatus(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName);

View File

@ -0,0 +1,60 @@
package org.mian.gitnex.models;
/**
* Author M M Arif
*/
public class DeleteFile {
private String branch;
private String message;
private String new_branch;
private String sha;
public String getBranch() {
return branch;
}
public void setBranch(String branch) {
this.branch = branch;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getNew_branch() {
return new_branch;
}
public void setNew_branch(String new_branch) {
this.new_branch = new_branch;
}
public String getSha() {
return sha;
}
public void setSha(String sha) {
this.sha = sha;
}
public DeleteFile(String branch, String message, String new_branch, String sha) {
this.branch = branch;
this.message = message;
this.new_branch = new_branch;
this.sha = sha;
}
}

View File

@ -0,0 +1,73 @@
package org.mian.gitnex.models;
/**
* Author M M Arif
*/
public class EditFile {
private String branch;
private String message;
private String new_branch;
private String sha;
private String content;
public String getBranch() {
return branch;
}
public void setBranch(String branch) {
this.branch = branch;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getNew_branch() {
return new_branch;
}
public void setNew_branch(String new_branch) {
this.new_branch = new_branch;
}
public String getSha() {
return sha;
}
public void setSha(String sha) {
this.sha = sha;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public EditFile(String branch, String message, String new_branch, String sha, String content) {
this.branch = branch;
this.message = message;
this.new_branch = new_branch;
this.sha = sha;
this.content = content;
}
}

View File

@ -11,6 +11,7 @@ public class Issues {
private int id; private int id;
private String url; private String url;
private String html_url;
private int number; private int number;
private String title; private String title;
private String body; private String body;
@ -256,4 +257,14 @@ public class Issues {
return assignees; return assignees;
} }
public String getHtml_url() {
return html_url;
}
public void setHtml_url(String html_url) {
this.html_url = html_url;
}
} }

View File

@ -46,7 +46,7 @@ public class NewFile {
this.new_branch = new_branch; this.new_branch = new_branch;
} }
public class authorObject { public static class authorObject {
private String email; private String email;
private String name; private String name;
@ -68,7 +68,7 @@ public class NewFile {
} }
} }
public class committerObject { public static class committerObject {
private String email; private String email;
private String name; private String name;

View File

@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#368F73"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,5c1.66,0 3,1.34 3,3s-1.34,3 -3,3 -3,-1.34 -3,-3 1.34,-3 3,-3zM12,19.2c-2.5,0 -4.71,-1.28 -6,-3.22 0.03,-1.99 4,-3.08 6,-3.08 1.99,0 5.97,1.09 6,3.08 -1.29,1.94 -3.5,3.22 -6,3.22z"/>
</vector>

View File

@ -1,5 +1,5 @@
<vector android:height="24dp" android:tint="#368f73" <vector android:height="24dp" android:tint="#368f73"
android:viewportHeight="24.0" android:viewportWidth="24.0" android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M6,18c0,0.55 0.45,1 1,1h1v3.5c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5L11,19h2v3.5c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5L16,19h1c0.55,0 1,-0.45 1,-1L18,8L6,8v10zM3.5,8C2.67,8 2,8.67 2,9.5v7c0,0.83 0.67,1.5 1.5,1.5S5,17.33 5,16.5v-7C5,8.67 4.33,8 3.5,8zM20.5,8c-0.83,0 -1.5,0.67 -1.5,1.5v7c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5v-7c0,-0.83 -0.67,-1.5 -1.5,-1.5zM15.53,2.16l1.3,-1.3c0.2,-0.2 0.2,-0.51 0,-0.71 -0.2,-0.2 -0.51,-0.2 -0.71,0l-1.48,1.48C13.85,1.23 12.95,1 12,1c-0.96,0 -1.86,0.23 -2.66,0.63L7.85,0.15c-0.2,-0.2 -0.51,-0.2 -0.71,0 -0.2,0.2 -0.2,0.51 0,0.71l1.31,1.31C6.97,3.26 6,5.01 6,7h12c0,-1.99 -0.97,-3.75 -2.47,-4.84zM10,5L9,5L9,4h1v1zM15,5h-1L14,4h1v1z"/> <path android:fillColor="?attr/iconsColor" android:pathData="M6,18c0,0.55 0.45,1 1,1h1v3.5c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5L11,19h2v3.5c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5L16,19h1c0.55,0 1,-0.45 1,-1L18,8L6,8v10zM3.5,8C2.67,8 2,8.67 2,9.5v7c0,0.83 0.67,1.5 1.5,1.5S5,17.33 5,16.5v-7C5,8.67 4.33,8 3.5,8zM20.5,8c-0.83,0 -1.5,0.67 -1.5,1.5v7c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5v-7c0,-0.83 -0.67,-1.5 -1.5,-1.5zM15.53,2.16l1.3,-1.3c0.2,-0.2 0.2,-0.51 0,-0.71 -0.2,-0.2 -0.51,-0.2 -0.71,0l-1.48,1.48C13.85,1.23 12.95,1 12,1c-0.96,0 -1.86,0.23 -2.66,0.63L7.85,0.15c-0.2,-0.2 -0.51,-0.2 -0.71,0 -0.2,0.2 -0.2,0.51 0,0.71l1.31,1.31C6.97,3.26 6,5.01 6,7h12c0,-1.99 -0.97,-3.75 -2.47,-4.84zM10,5L9,5L9,4h1v1zM15,5h-1L14,4h1v1z"/>
</vector> </vector>

View File

@ -8,20 +8,20 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M8,21L16,21" android:pathData="M8,21L16,21"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M12,17L12,21" android:pathData="M12,17L12,21"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,20 +8,20 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M1,3h22v5h-22z" android:pathData="M1,3h22v5h-22z"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M10,12L14,12" android:pathData="M10,12L14,12"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,13 +8,13 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M12,19l-7,-7l7,-7" android:pathData="M12,19l-7,-7l7,-7"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,13 +8,13 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M19,12l-7,7l-7,-7" android:pathData="M19,12l-7,7l-7,-7"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,13 +8,13 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M12,5l7,7l-7,7" android:pathData="M12,5l7,7l-7,7"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,13 +8,13 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M5,12l7,-7l7,7" android:pathData="M5,12l7,-7l7,7"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,27 +8,27 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M18,6m-3,0a3,3 0,1 1,6 0a3,3 0,1 1,-6 0" android:pathData="M18,6m-3,0a3,3 0,1 1,6 0a3,3 0,1 1,-6 0"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M6,18m-3,0a3,3 0,1 1,6 0a3,3 0,1 1,-6 0" android:pathData="M6,18m-3,0a3,3 0,1 1,6 0a3,3 0,1 1,-6 0"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M18,9a9,9 0,0 1,-9 9" android:pathData="M18,9a9,9 0,0 1,-9 9"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -1,4 +1,4 @@
<vector android:height="24dp" android:viewportHeight="16" <vector android:height="24dp" android:viewportHeight="16"
android:viewportWidth="16" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:viewportWidth="16" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#368f73" android:fillType="evenOdd" android:pathData="M6,3h1v1L6,4L6,3zM4,3h1v1L4,4L4,3zM2,3h1v1L2,4L2,3zM14,13L2,13L2,5h12v8zM14,4L8,4L8,3h6v1zM15,3c0,-0.55 -0.45,-1 -1,-1L2,2c-0.55,0 -1,0.45 -1,1v10c0,0.55 0.45,1 1,1h12c0.55,0 1,-0.45 1,-1L15,3z"/> <path android:fillColor="?attr/iconsColor" android:fillType="evenOdd" android:pathData="M6,3h1v1L6,4L6,3zM4,3h1v1L4,4L4,3zM2,3h1v1L2,4L2,3zM14,13L2,13L2,5h12v8zM14,4L8,4L8,3h6v1zM15,3c0,-0.55 -0.45,-1 -1,-1L2,2c-0.55,0 -1,0.45 -1,1v10c0,0.55 0.45,1 1,1h12c0.55,0 1,-0.45 1,-1L15,3z"/>
</vector> </vector>

View File

@ -1,10 +1,83 @@
<vector xmlns:tools="http://schemas.android.com/tools" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp" android:viewportHeight="324.274" android:width="24dp"
android:viewportWidth="324.274" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:height="24dp"
<path android:fillColor="#368F73" android:pathData="M34.419,298V22h138.696h0.841v33.411c0,8.301 6.753,15.055 15.053,15.055h33.154v88.5c2.443,-0.484 4.957,-0.75 7.528,-0.75c5.087,0 9.962,0.994 14.472,2.804V64.006c0,-1.326 -0.526,-2.598 -1.464,-3.536L183.694,1.464C182.755,0.527 181.484,0 180.158,0H27.472c-8.3,0 -15.053,6.753 -15.053,15.054v289.893c0,8.301 6.753,15.054 15.053,15.054h111.884c-1.256,-6.713 1.504,-13.831 7.559,-17.83c2.341,-1.546 4.692,-2.919 7.034,-4.17H34.419z"/> android:viewportWidth="24"
<path android:fillColor="#368F73" android:pathData="M308.487,310.515c-12.254,-8.092 -25.057,-11.423 -33.599,-12.795c6.02,-9.685 9.564,-21.448 9.564,-34.129c0,-9.12 -1.824,-17.889 -5.174,-25.781c8.22,-1.738 18.908,-5.176 29.209,-11.98c3.457,-2.283 4.408,-6.935 2.126,-10.392c-2.283,-3.456 -6.936,-4.407 -10.392,-2.125c-10.742,7.094 -22.229,9.723 -29.102,10.698c-3.459,-4.387 -7.5,-8.249 -12.077,-11.394c0.859,-3.081 1.294,-6.265 1.294,-9.509c0,-17.861 -13.062,-32.393 -29.117,-32.393c-16.055,0 -29.115,14.531 -29.115,32.393c0,3.244 0.435,6.428 1.294,9.509c-4.577,3.145 -8.618,7.007 -12.077,11.394c-6.873,-0.975 -18.358,-3.603 -29.102,-10.698c-3.456,-2.282 -8.108,-1.331 -10.392,2.125c-2.282,3.456 -1.331,8.109 2.126,10.392c10.301,6.803 20.988,10.241 29.208,11.979c-3.351,7.893 -5.175,16.661 -5.175,25.781c0,12.681 3.544,24.444 9.563,34.129c-8.541,1.372 -21.343,4.703 -33.597,12.794c-3.456,2.283 -4.408,6.935 -2.126,10.392c1.442,2.184 3.83,3.368 6.266,3.368c1.419,0 2.854,-0.402 4.126,-1.242c16.62,-10.975 35.036,-11.269 35.362,-11.272c0.639,-0.002 1.255,-0.093 1.847,-0.245c8.877,7.447 19.884,11.861 31.791,11.861c11.907,0 22.914,-4.415 31.791,-11.861c0.598,0.153 1.22,0.244 1.865,0.245c0.183,0 18.499,0.148 35.346,11.272c1.272,0.84 2.707,1.242 4.126,1.242c2.434,0 4.823,-1.184 6.266,-3.368C312.895,317.45 311.943,312.797 308.487,310.515zM238.719,296.005c0,4.142 -3.357,7.5 -7.5,7.5c-4.142,0 -7.5,-3.358 -7.5,-7.5v-64.83c0,-4.142 3.358,-7.5 7.5,-7.5c4.143,0 7.5,3.358 7.5,7.5V296.005z" android:viewportHeight="24">
tools:ignore="VectorPath" /> <path
<path android:fillColor="#368F73" android:pathData="M143.627,49.624h-78c-4.418,0 -8,3.582 -8,8c0,4.418 3.582,8 8,8h78c4.418,0 8,-3.582 8,-8C151.627,53.206 148.045,49.624 143.627,49.624z"/> android:pathData="M12,7.5L12,7.5A5,5 0,0 1,17 12.5L17,16.5A5,5 0,0 1,12 21.5L12,21.5A5,5 0,0 1,7 16.5L7,12.5A5,5 0,0 1,12 7.5z"
<path android:fillColor="#368F73" android:pathData="M143.627,99.624h-78c-4.418,0 -8,3.582 -8,8c0,4.419 3.582,8 8,8h78c4.418,0 8,-3.581 8,-8C151.627,103.206 148.045,99.624 143.627,99.624z"/> android:strokeLineJoin="round"
<path android:fillColor="#368F73" android:pathData="M143.627,149.624h-78c-4.418,0 -8,3.582 -8,8c0,4.419 3.582,8 8,8h78c4.418,0 8,-3.581 8,-8C151.627,153.206 148.045,149.624 143.627,149.624z"/> android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/>
<path
android:pathData="M2,12.5l2,2l3,0"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/>
<path
android:pathData="M22,12.5l-2,2l-3,0"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/>
<path
android:pathData="M3,21.5l2,-3l2,-1"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/>
<path
android:pathData="M21,21.5l-2,-3l-2,-1"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/>
<path
android:pathData="M3,8.5l2,2l2,1"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/>
<path
android:pathData="M21,8.5l-2,2l-2,1"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/>
<path
android:pathData="M12,7.5L12,21.5"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/>
<path
android:pathData="M15.38,8.82A3,3 0,0 0,16 7h0a3,3 0,0 0,-3 -3H11A3,3 0,0 0,8 7H8a3,3 0,0 0,0.61 1.82"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/>
<path
android:pathData="M9,4.5L8,2.5"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/>
<path
android:pathData="M15,4.5L16,2.5"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,27 +8,27 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M16,2L16,6" android:pathData="M16,2L16,6"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M8,2L8,6" android:pathData="M8,2L8,6"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M3,10L21,10" android:pathData="M3,10L21,10"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,6 +8,6 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,6 +8,6 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,6 +8,6 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,6 +8,6 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,6 +8,6 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,13 +8,13 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M6,6L18,18" android:pathData="M6,6L18,18"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,13 +8,13 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M8,6l-6,6l6,6" android:pathData="M8,6l-6,6l6,6"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,6 +8,6 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,13 +8,13 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M5,15H4a2,2 0,0 1,-2 -2V4a2,2 0,0 1,2 -2h9a2,2 0,0 1,2 2v1" android:pathData="M5,15H4a2,2 0,0 1,-2 -2V4a2,2 0,0 1,2 -2h9a2,2 0,0 1,2 2v1"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,27 +8,27 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M19,6v14a2,2 0,0 1,-2 2H7a2,2 0,0 1,-2 -2V6m3,0V4a2,2 0,0 1,2 -2h4a2,2 0,0 1,2 2v2" android:pathData="M19,6v14a2,2 0,0 1,-2 2H7a2,2 0,0 1,-2 -2V6m3,0V4a2,2 0,0 1,2 -2h4a2,2 0,0 1,2 2v2"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M10,11L10,17" android:pathData="M10,11L10,17"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M14,11L14,17" android:pathData="M14,11L14,17"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,6 +8,6 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -1,4 +1,4 @@
<vector android:height="24dp" android:tint="#368f73" <vector android:height="24dp" android:tint="?attr/iconsColor"
android:viewportHeight="24.0" android:viewportWidth="24.0" android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M18,7l-1.41,-1.41 -6.34,6.34 1.41,1.41L18,7zM22.24,5.59L11.66,16.17 7.48,12l-1.41,1.41L11.66,19l12,-12 -1.42,-1.41zM0.41,13.41L6,19l1.41,-1.41L1.83,12 0.41,13.41z"/> <path android:fillColor="#FF000000" android:pathData="M18,7l-1.41,-1.41 -6.34,6.34 1.41,1.41L18,7zM22.24,5.59L11.66,16.17 7.48,12l-1.41,1.41L11.66,19l12,-12 -1.42,-1.41zM0.41,13.41L6,19l1.41,-1.41L1.83,12 0.41,13.41z"/>

View File

@ -8,20 +8,20 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M12,5m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0" android:pathData="M12,5m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M12,19m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0" android:pathData="M12,19m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -4,7 +4,7 @@
android:viewportWidth="24" android:viewportWidth="24"
android:viewportHeight="24"> android:viewportHeight="24">
<path <path
android:fillColor="#368f73" android:fillColor="?attr/iconsColor"
android:pathData="M6,12a2,2 0,1 1,-4 0,2 2,0 0,1 4,0zM14,12a2,2 0,1 1,-4 0,2 2,0 0,1 4,0zM20,14a2,2 0,1 0,0 -4,2 2,0 0,0 0,4z" android:pathData="M6,12a2,2 0,1 1,-4 0,2 2,0 0,1 4,0zM14,12a2,2 0,1 1,-4 0,2 2,0 0,1 4,0zM20,14a2,2 0,1 0,0 -4,2 2,0 0,0 0,4z"
android:fillType="evenOdd"/> android:fillType="evenOdd"/>
</vector> </vector>

View File

@ -8,20 +8,20 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M7,10l5,5l5,-5" android:pathData="M7,10l5,5l5,-5"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M12,15L12,3" android:pathData="M12,15L12,3"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,13 +8,13 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M5.45,5.11L2,12v6a2,2 0,0 0,2 2h16a2,2 0,0 0,2 -2v-6l-3.45,-6.89A2,2 0,0 0,16.76 4H7.24a2,2 0,0 0,-1.79 1.11z" android:pathData="M5.45,5.11L2,12v6a2,2 0,0 0,2 2h16a2,2 0,0 0,2 -2v-6l-3.45,-6.89A2,2 0,0 0,16.76 4H7.24a2,2 0,0 0,-1.79 1.11z"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,13 +8,13 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M16.5,3.5a2.121,2.121 0,0 1,3 3L7,19l-4,1 1,-4L16.5,3.5z" android:pathData="M16.5,3.5a2.121,2.121 0,0 1,3 3L7,19l-4,1 1,-4L16.5,3.5z"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,13 +8,13 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M22,6l-10,7l-10,-7" android:pathData="M22,6l-10,7l-10,-7"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,13 +8,13 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M13,2l0,7l7,0" android:pathData="M13,2l0,7l7,0"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,6 +8,6 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,13 +8,13 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M4,22L4,15" android:pathData="M4,22L4,15"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -4,15 +4,15 @@
android:viewportWidth="24" android:viewportWidth="24"
android:viewportHeight="24"> android:viewportHeight="24">
<path <path
android:fillColor="#368f73" android:fillColor="?attr/iconsColor"
android:pathData="M12,21a1.75,1.75 0,1 1,0 -3.5,1.75 1.75,0 0,1 0,3.5zM8.75,19.25a3.25,3.25 0,1 0,6.5 0,3.25 3.25,0 0,0 -6.5,0zM5.75,6.5a1.75,1.75 0,1 1,0 -3.5,1.75 1.75,0 0,1 0,3.5zM2.5,4.75a3.25,3.25 0,1 0,6.5 0,3.25 3.25,0 0,0 -6.5,0zM18.25,6.5a1.75,1.75 0,1 1,0 -3.5,1.75 1.75,0 0,1 0,3.5zM15,4.75a3.25,3.25 0,1 0,6.5 0,3.25 3.25,0 0,0 -6.5,0z" android:pathData="M12,21a1.75,1.75 0,1 1,0 -3.5,1.75 1.75,0 0,1 0,3.5zM8.75,19.25a3.25,3.25 0,1 0,6.5 0,3.25 3.25,0 0,0 -6.5,0zM5.75,6.5a1.75,1.75 0,1 1,0 -3.5,1.75 1.75,0 0,1 0,3.5zM2.5,4.75a3.25,3.25 0,1 0,6.5 0,3.25 3.25,0 0,0 -6.5,0zM18.25,6.5a1.75,1.75 0,1 1,0 -3.5,1.75 1.75,0 0,1 0,3.5zM15,4.75a3.25,3.25 0,1 0,6.5 0,3.25 3.25,0 0,0 -6.5,0z"
android:fillType="evenOdd"/> android:fillType="evenOdd"/>
<path <path
android:fillColor="#368f73" android:fillColor="?attr/iconsColor"
android:pathData="M6.5,7.75v1A2.25,2.25 0,0 0,8.75 11h6.5a2.25,2.25 0,0 0,2.25 -2.25v-1H19v1a3.75,3.75 0,0 1,-3.75 3.75h-6.5A3.75,3.75 0,0 1,5 8.75v-1h1.5z" android:pathData="M6.5,7.75v1A2.25,2.25 0,0 0,8.75 11h6.5a2.25,2.25 0,0 0,2.25 -2.25v-1H19v1a3.75,3.75 0,0 1,-3.75 3.75h-6.5A3.75,3.75 0,0 1,5 8.75v-1h1.5z"
android:fillType="evenOdd"/> android:fillType="evenOdd"/>
<path <path
android:fillColor="#368f73" android:fillColor="?attr/iconsColor"
android:pathData="M11.25,16.25v-5h1.5v5h-1.5z" android:pathData="M11.25,16.25v-5h1.5v5h-1.5z"
android:fillType="evenOdd"/> android:fillType="evenOdd"/>
</vector> </vector>

View File

@ -8,20 +8,20 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M12,16L12,12" android:pathData="M12,16L12,12"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M12,8L12.01,8" android:pathData="M12,8L12.01,8"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,20 +8,20 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M12,8L12,12" android:pathData="M12,8L12,12"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M12,16L12.01,16" android:pathData="M12,16L12.01,16"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,13 +8,13 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M22,4l-10,10.01l-3,-3" android:pathData="M22,4l-10,10.01l-3,-3"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,13 +8,13 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M7,7L7.01,7" android:pathData="M7,7L7.01,7"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -1,4 +1,4 @@
<vector android:height="24dp" android:tint="#368f73" <vector android:height="24dp" android:tint="?attr/iconsColor"
android:viewportHeight="24.0" android:viewportWidth="24.0" android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM18.92,8h-2.95c-0.32,-1.25 -0.78,-2.45 -1.38,-3.56 1.84,0.63 3.37,1.91 4.33,3.56zM12,4.04c0.83,1.2 1.48,2.53 1.91,3.96h-3.82c0.43,-1.43 1.08,-2.76 1.91,-3.96zM4.26,14C4.1,13.36 4,12.69 4,12s0.1,-1.36 0.26,-2h3.38c-0.08,0.66 -0.14,1.32 -0.14,2 0,0.68 0.06,1.34 0.14,2L4.26,14zM5.08,16h2.95c0.32,1.25 0.78,2.45 1.38,3.56 -1.84,-0.63 -3.37,-1.9 -4.33,-3.56zM8.03,8L5.08,8c0.96,-1.66 2.49,-2.93 4.33,-3.56C8.81,5.55 8.35,6.75 8.03,8zM12,19.96c-0.83,-1.2 -1.48,-2.53 -1.91,-3.96h3.82c-0.43,1.43 -1.08,2.76 -1.91,3.96zM14.34,14L9.66,14c-0.09,-0.66 -0.16,-1.32 -0.16,-2 0,-0.68 0.07,-1.35 0.16,-2h4.68c0.09,0.65 0.16,1.32 0.16,2 0,0.68 -0.07,1.34 -0.16,2zM14.59,19.56c0.6,-1.11 1.06,-2.31 1.38,-3.56h2.95c-0.96,1.65 -2.49,2.93 -4.33,3.56zM16.36,14c0.08,-0.66 0.14,-1.32 0.14,-2 0,-0.68 -0.06,-1.34 -0.14,-2h3.38c0.16,0.64 0.26,1.31 0.26,2s-0.1,1.36 -0.26,2h-3.38z"/> <path android:fillColor="#FF000000" android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM18.92,8h-2.95c-0.32,-1.25 -0.78,-2.45 -1.38,-3.56 1.84,0.63 3.37,1.91 4.33,3.56zM12,4.04c0.83,1.2 1.48,2.53 1.91,3.96h-3.82c0.43,-1.43 1.08,-2.76 1.91,-3.96zM4.26,14C4.1,13.36 4,12.69 4,12s0.1,-1.36 0.26,-2h3.38c-0.08,0.66 -0.14,1.32 -0.14,2 0,0.68 0.06,1.34 0.14,2L4.26,14zM5.08,16h2.95c0.32,1.25 0.78,2.45 1.38,3.56 -1.84,-0.63 -3.37,-1.9 -4.33,-3.56zM8.03,8L5.08,8c0.96,-1.66 2.49,-2.93 4.33,-3.56C8.81,5.55 8.35,6.75 8.03,8zM12,19.96c-0.83,-1.2 -1.48,-2.53 -1.91,-3.96h3.82c-0.43,1.43 -1.08,2.76 -1.91,3.96zM14.34,14L9.66,14c-0.09,-0.66 -0.16,-1.32 -0.16,-2 0,-0.68 0.07,-1.35 0.16,-2h4.68c0.09,0.65 0.16,1.32 0.16,2 0,0.68 -0.07,1.34 -0.16,2zM14.59,19.56c0.6,-1.11 1.06,-2.31 1.38,-3.56h2.95c-0.96,1.65 -2.49,2.93 -4.33,3.56zM16.36,14c0.08,-0.66 0.14,-1.32 0.14,-2 0,-0.68 -0.06,-1.34 -0.14,-2h3.38c0.16,0.64 0.26,1.31 0.26,2s-0.1,1.36 -0.26,2h-3.38z"/>

View File

@ -8,6 +8,6 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,13 +8,13 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M14,11a5,5 0,0 0,-7.54 -0.54l-3,3a5,5 0,0 0,7.07 7.07l1.71,-1.71" android:pathData="M14,11a5,5 0,0 0,-7.54 -0.54l-3,3a5,5 0,0 0,7.07 7.07l1.71,-1.71"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -3,5 +3,5 @@
android:width="40dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:width="40dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillAlpha="0.2" android:fillColor="@color/colorAccent" <path android:fillAlpha="0.2" android:fillColor="@color/colorAccent"
android:pathData="M20.201,5.169c-8.254,0 -14.946,6.692 -14.946,14.946c0,8.255 6.692,14.946 14.946,14.946s14.946,-6.691 14.946,-14.946C35.146,11.861 28.455,5.169 20.201,5.169zM20.201,31.749c-6.425,0 -11.634,-5.208 -11.634,-11.634c0,-6.425 5.209,-11.634 11.634,-11.634c6.425,0 11.633,5.209 11.633,11.634C31.834,26.541 26.626,31.749 20.201,31.749z" android:strokeAlpha="0.2"/> android:pathData="M20.201,5.169c-8.254,0 -14.946,6.692 -14.946,14.946c0,8.255 6.692,14.946 14.946,14.946s14.946,-6.691 14.946,-14.946C35.146,11.861 28.455,5.169 20.201,5.169zM20.201,31.749c-6.425,0 -11.634,-5.208 -11.634,-11.634c0,-6.425 5.209,-11.634 11.634,-11.634c6.425,0 11.633,5.209 11.633,11.634C31.834,26.541 26.626,31.749 20.201,31.749z" android:strokeAlpha="0.2"/>
<path android:fillColor="@color/darkGreen" android:pathData="M26.013,10.047l1.654,-2.866c-2.198,-1.272 -4.743,-2.012 -7.466,-2.012h0v3.312h0C22.32,8.481 24.301,9.057 26.013,10.047z"/> <path android:fillColor="@color/colorAccent" android:pathData="M26.013,10.047l1.654,-2.866c-2.198,-1.272 -4.743,-2.012 -7.466,-2.012h0v3.312h0C22.32,8.481 24.301,9.057 26.013,10.047z"/>
</vector> </vector>

View File

@ -8,13 +8,13 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M12,10m-3,0a3,3 0,1 1,6 0a3,3 0,1 1,-6 0" android:pathData="M12,10m-3,0a3,3 0,1 1,6 0a3,3 0,1 1,-6 0"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,13 +8,13 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M7,11V7a5,5 0,0 1,10 0v4" android:pathData="M7,11V7a5,5 0,0 1,10 0v4"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -8,20 +8,20 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M16,17l5,-5l-5,-5" android:pathData="M16,17l5,-5l-5,-5"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M21,12L9,12" android:pathData="M21,12L9,12"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368F73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -1,4 +1,4 @@
<vector android:height="24dp" android:viewportHeight="16" <vector android:height="24dp" android:viewportHeight="16"
android:viewportWidth="16" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:viewportWidth="16" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#368f73" android:fillType="evenOdd" android:pathData="M14.85,3L1.15,3C0.52,3 0,3.52 0,4.15v7.69C0,12.48 0.52,13 1.15,13h13.69c0.64,0 1.15,-0.52 1.15,-1.15v-7.7C16,3.52 15.48,3 14.85,3zM9,11L7,11L7,8L5.5,9.92 4,8v3L2,11L2,5h2l1.5,2L7,5h2v6zM11.99,11.5L9.5,8L11,8L11,5h2v3h1.5l-2.51,3.5z"/> <path android:fillColor="?attr/iconsColor" android:fillType="evenOdd" android:pathData="M14.85,3L1.15,3C0.52,3 0,3.52 0,4.15v7.69C0,12.48 0.52,13 1.15,13h13.69c0.64,0 1.15,-0.52 1.15,-1.15v-7.7C16,3.52 15.48,3 14.85,3zM9,11L7,11L7,8L5.5,9.92 4,8v3L2,11L2,5h2l1.5,2L7,5h2v6zM11.99,11.5L9.5,8L11,8L11,5h2v3h1.5l-2.51,3.5z"/>
</vector> </vector>

View File

@ -8,20 +8,20 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M3,6L21,6" android:pathData="M3,6L21,6"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M3,18L21,18" android:pathData="M3,18L21,18"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -4,7 +4,7 @@
android:viewportWidth="24" android:viewportWidth="24"
android:viewportHeight="24"> android:viewportHeight="24">
<path <path
android:fillColor="#368f73" android:fillColor="?attr/iconsColor"
android:pathData="M11.75,1a0.75,0.75 0,0 1,0.75 0.75L12.5,4h6.532c0.42,0 0.826,0.15 1.143,0.425l3.187,2.75a1.75,1.75 0,0 1,0 2.65l-3.187,2.75a1.75,1.75 0,0 1,-1.143 0.425L12.5,13v9.25a0.75,0.75 0,0 1,-1.5 0L11,13L3.75,13A1.75,1.75 0,0 1,2 11.25v-5.5C2,4.783 2.784,4 3.75,4L11,4L11,1.75a0.75,0.75 0,0 1,0.75 -0.75zM11.75,5.5h7.282a0.25,0.25 0,0 1,0.163 0.06l3.188,2.75a0.25,0.25 0,0 1,0 0.38l-3.188,2.75a0.25,0.25 0,0 1,-0.163 0.06L3.75,11.5a0.25,0.25 0,0 1,-0.25 -0.25v-5.5a0.25,0.25 0,0 1,0.25 -0.25h8z" android:pathData="M11.75,1a0.75,0.75 0,0 1,0.75 0.75L12.5,4h6.532c0.42,0 0.826,0.15 1.143,0.425l3.187,2.75a1.75,1.75 0,0 1,0 2.65l-3.187,2.75a1.75,1.75 0,0 1,-1.143 0.425L12.5,13v9.25a0.75,0.75 0,0 1,-1.5 0L11,13L3.75,13A1.75,1.75 0,0 1,2 11.25v-5.5C2,4.783 2.784,4 3.75,4L11,4L11,1.75a0.75,0.75 0,0 1,0.75 -0.75zM11.75,5.5h7.282a0.25,0.25 0,0 1,0.163 0.06l3.188,2.75a0.25,0.25 0,0 1,0 0.38l-3.188,2.75a0.25,0.25 0,0 1,-0.163 0.06L3.75,11.5a0.25,0.25 0,0 1,-0.25 -0.25v-5.5a0.25,0.25 0,0 1,0.25 -0.25h8z"
android:fillType="evenOdd"/> android:fillType="evenOdd"/>
</vector> </vector>

View File

@ -8,13 +8,13 @@
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
<path <path
android:pathData="M13.73,21a2,2 0,0 1,-3.46 0" android:pathData="M13.73,21a2,2 0,0 1,-3.46 0"
android:strokeLineJoin="round" android:strokeLineJoin="round"
android:strokeWidth="2" android:strokeWidth="2"
android:fillColor="#00000000" android:fillColor="#00000000"
android:strokeColor="#368f73" android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/> android:strokeLineCap="round"/>
</vector> </vector>

View File

@ -4,10 +4,10 @@
android:viewportWidth="24" android:viewportWidth="24"
android:viewportHeight="24"> android:viewportHeight="24">
<path <path
android:fillColor="#368f73" android:fillColor="?attr/iconsColor"
android:pathData="M7.25,12a0.75,0.75 0,0 0,0 1.5h0.5a0.75,0.75 0,0 0,0 -1.5h-0.5zM6.5,9.25a0.75,0.75 0,0 1,0.75 -0.75h0.5a0.75,0.75 0,0 1,0 1.5h-0.5a0.75,0.75 0,0 1,-0.75 -0.75zM7.25,5a0.75,0.75 0,0 0,0 1.5h0.5a0.75,0.75 0,0 0,0 -1.5h-0.5zM10,12.75a0.75,0.75 0,0 1,0.75 -0.75h0.5a0.75,0.75 0,0 1,0 1.5h-0.5a0.75,0.75 0,0 1,-0.75 -0.75zM10.75,8.5a0.75,0.75 0,0 0,0 1.5h0.5a0.75,0.75 0,0 0,0 -1.5h-0.5zM10,5.75a0.75,0.75 0,0 1,0.75 -0.75h0.5a0.75,0.75 0,0 1,0 1.5h-0.5a0.75,0.75 0,0 1,-0.75 -0.75zM14.25,12a0.75,0.75 0,0 0,0 1.5h0.5a0.75,0.75 0,0 0,0 -1.5h-0.5zM13.5,9.25a0.75,0.75 0,0 1,0.75 -0.75h0.5a0.75,0.75 0,0 1,0 1.5h-0.5a0.75,0.75 0,0 1,-0.75 -0.75zM14.25,5a0.75,0.75 0,0 0,0 1.5h0.5a0.75,0.75 0,0 0,0 -1.5h-0.5z"/> android:pathData="M7.25,12a0.75,0.75 0,0 0,0 1.5h0.5a0.75,0.75 0,0 0,0 -1.5h-0.5zM6.5,9.25a0.75,0.75 0,0 1,0.75 -0.75h0.5a0.75,0.75 0,0 1,0 1.5h-0.5a0.75,0.75 0,0 1,-0.75 -0.75zM7.25,5a0.75,0.75 0,0 0,0 1.5h0.5a0.75,0.75 0,0 0,0 -1.5h-0.5zM10,12.75a0.75,0.75 0,0 1,0.75 -0.75h0.5a0.75,0.75 0,0 1,0 1.5h-0.5a0.75,0.75 0,0 1,-0.75 -0.75zM10.75,8.5a0.75,0.75 0,0 0,0 1.5h0.5a0.75,0.75 0,0 0,0 -1.5h-0.5zM10,5.75a0.75,0.75 0,0 1,0.75 -0.75h0.5a0.75,0.75 0,0 1,0 1.5h-0.5a0.75,0.75 0,0 1,-0.75 -0.75zM14.25,12a0.75,0.75 0,0 0,0 1.5h0.5a0.75,0.75 0,0 0,0 -1.5h-0.5zM13.5,9.25a0.75,0.75 0,0 1,0.75 -0.75h0.5a0.75,0.75 0,0 1,0 1.5h-0.5a0.75,0.75 0,0 1,-0.75 -0.75zM14.25,5a0.75,0.75 0,0 0,0 1.5h0.5a0.75,0.75 0,0 0,0 -1.5h-0.5z"/>
<path <path
android:fillColor="#368f73" android:fillColor="?attr/iconsColor"
android:pathData="M3,20a2,2 0,0 0,2 2h3.75a0.75,0.75 0,0 0,0.75 -0.75L9.5,19h3v2.25c0,0.414 0.336,0.75 0.75,0.75L17,22c0.092,0 0.183,-0.006 0.272,-0.018a0.758,0.758 0,0 0,0.166 0.018L21.5,22a2,2 0,0 0,2 -2v-7.625a2,2 0,0 0,-0.8 -1.6l-1,-0.75a0.75,0.75 0,1 0,-0.9 1.2l1,0.75a0.5,0.5 0,0 1,0.2 0.4L22,20a0.5,0.5 0,0 1,-0.5 0.5h-2.563c0.041,-0.16 0.063,-0.327 0.063,-0.5L19,3a2,2 0,0 0,-2 -2L5,1a2,2 0,0 0,-2 2v17zM5,20.5a0.5,0.5 0,0 1,-0.5 -0.5L4.5,3a0.5,0.5 0,0 1,0.5 -0.5h12a0.5,0.5 0,0 1,0.5 0.5v17a0.5,0.5 0,0 1,-0.5 0.5h-3v-2.25a0.75,0.75 0,0 0,-0.75 -0.75h-4.5a0.75,0.75 0,0 0,-0.75 0.75v2.25L5,20.5z" android:pathData="M3,20a2,2 0,0 0,2 2h3.75a0.75,0.75 0,0 0,0.75 -0.75L9.5,19h3v2.25c0,0.414 0.336,0.75 0.75,0.75L17,22c0.092,0 0.183,-0.006 0.272,-0.018a0.758,0.758 0,0 0,0.166 0.018L21.5,22a2,2 0,0 0,2 -2v-7.625a2,2 0,0 0,-0.8 -1.6l-1,-0.75a0.75,0.75 0,1 0,-0.9 1.2l1,0.75a0.5,0.5 0,0 1,0.2 0.4L22,20a0.5,0.5 0,0 1,-0.5 0.5h-2.563c0.041,-0.16 0.063,-0.327 0.063,-0.5L19,3a2,2 0,0 0,-2 -2L5,1a2,2 0,0 0,-2 2v17zM5,20.5a0.5,0.5 0,0 1,-0.5 -0.5L4.5,3a0.5,0.5 0,0 1,0.5 -0.5h12a0.5,0.5 0,0 1,0.5 0.5v17a0.5,0.5 0,0 1,-0.5 0.5h-3v-2.25a0.75,0.75 0,0 0,-0.75 -0.75h-4.5a0.75,0.75 0,0 0,-0.75 0.75v2.25L5,20.5z"
android:fillType="evenOdd"/> android:fillType="evenOdd"/>
</vector> </vector>

Some files were not shown because too many files have changed in this diff Show More