Compare commits
30 Commits
Author | SHA1 | Date | |
---|---|---|---|
f448e3dcad | |||
d448a06d95 | |||
b6950e5238 | |||
17a4958a65 | |||
0928e936d7 | |||
a29011c6a2 | |||
c09fc4988a | |||
39ac49b258 | |||
cd55f946f0 | |||
b529f81115 | |||
e6109ef36d | |||
e00fcd846a | |||
060c86c090 | |||
26f54280a1 | |||
8a7923cba7 | |||
673b9f564c | |||
d1be03956c | |||
caa437d5e3 | |||
25036ce5d2 | |||
a8a34ccc7a | |||
f87e8020d8 | |||
4d67e63db4 | |||
3561dde19f | |||
9c48dec54d | |||
3d72d68e14 | |||
47b24470e6 | |||
1db6a3294b | |||
500dc019c1 | |||
e2aff890d7 | |||
cdfc2cfb9e |
10
.drone.yml
10
.drone.yml
@ -26,6 +26,12 @@ steps:
|
|||||||
# depends_on: [ clone ]
|
# depends_on: [ clone ]
|
||||||
# commands:
|
# commands:
|
||||||
# - /opt/intellij/bin/idea.sh inspect/format ...
|
# - /opt/intellij/bin/idea.sh inspect/format ...
|
||||||
|
#
|
||||||
|
# - name: do-or-check-formatting
|
||||||
|
# image: dlsniper/docker-intellij
|
||||||
|
# depends_on: [ clone ]
|
||||||
|
# commands:
|
||||||
|
# - /opt/intellij/bin/idea.sh format -s .idea/codeStyles/Project.xml -m *.java app/src/main/java
|
||||||
|
|
||||||
trigger:
|
trigger:
|
||||||
event:
|
event:
|
||||||
@ -65,7 +71,7 @@ steps:
|
|||||||
- name: sign
|
- name: sign
|
||||||
image: nextcloudci/android:android-49
|
image: nextcloudci/android:android-49
|
||||||
environment:
|
environment:
|
||||||
TOKEN:
|
BOT_TOKEN:
|
||||||
from_secret: BOT_TOKEN
|
from_secret: BOT_TOKEN
|
||||||
KS_PASS:
|
KS_PASS:
|
||||||
from_secret: KS_PASS
|
from_secret: KS_PASS
|
||||||
@ -88,7 +94,7 @@ steps:
|
|||||||
PLUGIN_FILE: 'signed.apk'
|
PLUGIN_FILE: 'signed.apk'
|
||||||
PLUGIN_TIMEOUT: 180
|
PLUGIN_TIMEOUT: 180
|
||||||
PLUGIN_ATTEMPTS: 5
|
PLUGIN_ATTEMPTS: 5
|
||||||
PLUGIN_DESTINATION: 'https://cloud.swatian.com/remote.php/dav/files/GitNexBot/GitNex-Builds/latest.apk'
|
PLUGIN_DESTINATION: 'https://cloud.swatian.com/remote.php/dav/files/GitNexBot/gitnex/builds/latest.apk'
|
||||||
PLUGIN_CUSTOM_ARGUMENTS: '--progress-bar'
|
PLUGIN_CUSTOM_ARGUMENTS: '--progress-bar'
|
||||||
|
|
||||||
trigger:
|
trigger:
|
||||||
|
@ -9,7 +9,6 @@ max_line_length = 150
|
|||||||
|
|
||||||
[*.java]
|
[*.java]
|
||||||
indent_style = tab
|
indent_style = tab
|
||||||
max_line_length = 220
|
|
||||||
line_comment = //
|
line_comment = //
|
||||||
block_comment_start = /*
|
block_comment_start = /*
|
||||||
block_comment = *
|
block_comment = *
|
||||||
|
63
.gitlab-ci.yml
Normal file
63
.gitlab-ci.yml
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
stages:
|
||||||
|
- test
|
||||||
|
- build
|
||||||
|
- sign
|
||||||
|
- publish
|
||||||
|
|
||||||
|
test:
|
||||||
|
image: nextcloudci/android:android-49
|
||||||
|
stage: test
|
||||||
|
script:
|
||||||
|
- ./gradlew test
|
||||||
|
|
||||||
|
build:
|
||||||
|
image: nextcloudci/android:android-49
|
||||||
|
stage: build
|
||||||
|
only:
|
||||||
|
- master
|
||||||
|
script:
|
||||||
|
- ./gradlew build
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- app/build/outputs/
|
||||||
|
expire_in: 15 minutes
|
||||||
|
|
||||||
|
sign:
|
||||||
|
image: nextcloudci/android:android-49
|
||||||
|
stage: sign
|
||||||
|
only:
|
||||||
|
- master
|
||||||
|
variables:
|
||||||
|
OUTPUT: "signed.apk"
|
||||||
|
GITEA: "https://gitea.com"
|
||||||
|
KS_FILE: "ci_keystore.jks"
|
||||||
|
script:
|
||||||
|
- ./scripts/sign-build.sh
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- signed.apk
|
||||||
|
expire_in: 15 minutes
|
||||||
|
|
||||||
|
latest:
|
||||||
|
image: tutum/curl
|
||||||
|
stage: publish
|
||||||
|
only:
|
||||||
|
- master
|
||||||
|
variables:
|
||||||
|
WEBDAV_USERNAME: "GitNexBot"
|
||||||
|
PLUGIN_FILE: "signed.apk"
|
||||||
|
PLUGIN_DESTINATION: "https://cloud.swatian.com/remote.php/dav/files/GitNexBot/gitnex/builds/latest.apk"
|
||||||
|
script:
|
||||||
|
- curl -T "$PLUGIN_FILE" -u "$WEBDAV_USERNAME":"$WEBDAV_PASSWORD" "$PLUGIN_DESTINATION"
|
||||||
|
|
||||||
|
release:
|
||||||
|
image: tutum/curl
|
||||||
|
stage: publish
|
||||||
|
only:
|
||||||
|
- tags
|
||||||
|
variables:
|
||||||
|
WEBDAV_USERNAME: "GitNexBot"
|
||||||
|
PLUGIN_FILE: "signed.apk"
|
||||||
|
script:
|
||||||
|
- "[[ $CI_COMMIT_REF_NAME == *'-rc'* ]] && echo 'Upload blocked. Build seems to be a release candidate.' && exit 0"
|
||||||
|
- curl -T "$PLUGIN_FILE" -u "$WEBDAV_USERNAME":"$WEBDAV_PASSWORD" 'https://cloud.swatian.com/remote.php/dav/files/GitNexBot/gitnex/releases/'"$CI_COMMIT_REF_NAME"'.apk'
|
7
.idea/codeStyles/Project.xml
generated
7
.idea/codeStyles/Project.xml
generated
@ -29,6 +29,7 @@
|
|||||||
<option name="ELSE_ON_NEW_LINE" value="true" />
|
<option name="ELSE_ON_NEW_LINE" value="true" />
|
||||||
<option name="CATCH_ON_NEW_LINE" value="true" />
|
<option name="CATCH_ON_NEW_LINE" value="true" />
|
||||||
<option name="FINALLY_ON_NEW_LINE" value="true" />
|
<option name="FINALLY_ON_NEW_LINE" value="true" />
|
||||||
|
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
|
||||||
<option name="SPACE_BEFORE_IF_PARENTHESES" value="false" />
|
<option name="SPACE_BEFORE_IF_PARENTHESES" value="false" />
|
||||||
<option name="SPACE_BEFORE_WHILE_PARENTHESES" value="false" />
|
<option name="SPACE_BEFORE_WHILE_PARENTHESES" value="false" />
|
||||||
<option name="SPACE_BEFORE_FOR_PARENTHESES" value="false" />
|
<option name="SPACE_BEFORE_FOR_PARENTHESES" value="false" />
|
||||||
@ -36,9 +37,13 @@
|
|||||||
<option name="SPACE_BEFORE_CATCH_PARENTHESES" value="false" />
|
<option name="SPACE_BEFORE_CATCH_PARENTHESES" value="false" />
|
||||||
<option name="SPACE_BEFORE_SWITCH_PARENTHESES" value="false" />
|
<option name="SPACE_BEFORE_SWITCH_PARENTHESES" value="false" />
|
||||||
<option name="SPACE_BEFORE_SYNCHRONIZED_PARENTHESES" value="false" />
|
<option name="SPACE_BEFORE_SYNCHRONIZED_PARENTHESES" value="false" />
|
||||||
|
<option name="CALL_PARAMETERS_WRAP" value="1" />
|
||||||
|
<option name="METHOD_PARAMETERS_WRAP" value="1" />
|
||||||
|
<option name="THROWS_LIST_WRAP" value="1" />
|
||||||
<option name="METHOD_CALL_CHAIN_WRAP" value="1" />
|
<option name="METHOD_CALL_CHAIN_WRAP" value="1" />
|
||||||
|
<option name="TERNARY_OPERATION_WRAP" value="1" />
|
||||||
|
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
|
||||||
<option name="IF_BRACE_FORCE" value="3" />
|
<option name="IF_BRACE_FORCE" value="3" />
|
||||||
<option name="WRAP_ON_TYPING" value="1" />
|
|
||||||
<indentOptions>
|
<indentOptions>
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
<option name="USE_TAB_CHARACTER" value="true" />
|
||||||
<option name="SMART_TABS" value="true" />
|
<option name="SMART_TABS" value="true" />
|
||||||
|
45
LICENSE
45
LICENSE
@ -1,7 +1,7 @@
|
|||||||
GNU GENERAL PUBLIC LICENSE
|
GNU GENERAL PUBLIC LICENSE
|
||||||
Version 3, 29 June 2007
|
Version 3, 29 June 2007
|
||||||
|
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
of this license document, but changing it is not allowed.
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
@ -620,19 +620,8 @@ copy of the Program in return for a fee.
|
|||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
How to Apply These Terms to Your New Programs
|
GitNex is an Android client/application for Gitea.
|
||||||
|
Copyright (C) 2019 The GitNex Authors
|
||||||
If you develop a new program, and you want it to be of the greatest
|
|
||||||
possible use to the public, the best way to achieve this is to make it
|
|
||||||
free software which everyone can redistribute and change under these terms.
|
|
||||||
|
|
||||||
To do so, attach the following notices to the program. It is safest
|
|
||||||
to attach them to the start of each source file to most effectively
|
|
||||||
state the exclusion of warranty; and each file should have at least
|
|
||||||
the "copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
Mastalab is a Mastodon client for Android devices
|
|
||||||
Copyright (C) 2017 Thomas Schneider
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -645,30 +634,4 @@ the "copyright" line and a pointer to where the full notice is found.
|
|||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
If the program does terminal interaction, make it output a short
|
|
||||||
notice like this when it starts in an interactive mode:
|
|
||||||
|
|
||||||
Mastalab Copyright (C) 2017 Thomas Schneider
|
|
||||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
|
||||||
This is free software, and you are welcome to redistribute it
|
|
||||||
under certain conditions; type `show c' for details.
|
|
||||||
|
|
||||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
|
||||||
parts of the General Public License. Of course, your program's commands
|
|
||||||
might be different; for a GUI interface, you would use an "about box".
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or school,
|
|
||||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
|
||||||
For more information on this, and how to apply and follow the GNU GPL, see
|
|
||||||
<http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
The GNU General Public License does not permit incorporating your program
|
|
||||||
into proprietary programs. If your program is a subroutine library, you
|
|
||||||
may consider it more useful to permit linking proprietary applications with
|
|
||||||
the library. If this is what you want to do, use the GNU Lesser General
|
|
||||||
Public License instead of this License. But first, please read
|
|
||||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
|
11
README.md
11
README.md
@ -11,9 +11,7 @@ GitNex is licensed under GPLv3 License. See the LICENSE file for the full licens
|
|||||||
## Downloads
|
## Downloads
|
||||||
[<img alt='Get it on F-droid' src='https://gitlab.com/fdroid/artwork/raw/master/badge/get-it-on.png' height="80"/>](https://f-droid.org/en/packages/org.mian.gitnex/)
|
[<img alt='Get it on F-droid' src='https://gitlab.com/fdroid/artwork/raw/master/badge/get-it-on.png' height="80"/>](https://f-droid.org/en/packages/org.mian.gitnex/)
|
||||||
[<img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png' height="80"/>](https://play.google.com/store/apps/details?id=org.mian.gitnex)
|
[<img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png' height="80"/>](https://play.google.com/store/apps/details?id=org.mian.gitnex)
|
||||||
[<img alt='Download APK' src='https://gitnex.com/img/download-apk.png' height="80"/>](https://cloud.swatian.com/s/QoDFzMxmnf2FfYw)
|
[<img alt='Download builds and releases' src='assets/apk-badge.png' height="82"/>](https://cloud.swatian.com/s/DN7E5xxtaw4fRbE)
|
||||||
|
|
||||||
Download latest build from master: [https://cloud.swatian.com/s/Cq592xGEfnsGAAW](https://cloud.swatian.com/s/Cq592xGEfnsGAAW)
|
|
||||||
|
|
||||||
## Note about Gitea version
|
## Note about Gitea version
|
||||||
Please make sure that you are on latest stable release or later for better app experience.
|
Please make sure that you are on latest stable release or later for better app experience.
|
||||||
@ -26,12 +24,15 @@ 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
|
||||||
|
- Repositories / issues/ org list
|
||||||
- File and directory browser
|
- File and directory browser
|
||||||
|
- File viewer
|
||||||
- Create files
|
- Create files
|
||||||
- Explore repositories
|
- Explore repositories
|
||||||
- Issues list
|
|
||||||
- Pull requests
|
- Pull requests
|
||||||
- Merge pull request
|
- Files diff for PRs
|
||||||
|
- Notifications
|
||||||
|
- Drafts
|
||||||
- [MANY MORE](https://codeberg.org/gitnex/GitNex/wiki/Features)
|
- [MANY MORE](https://codeberg.org/gitnex/GitNex/wiki/Features)
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
@ -6,12 +6,12 @@ android {
|
|||||||
applicationId "org.mian.gitnex"
|
applicationId "org.mian.gitnex"
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 29
|
targetSdkVersion 29
|
||||||
versionCode 297
|
versionCode 301
|
||||||
versionName "3.0.0-rc3"
|
versionName "3.0.1"
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
viewBinding {
|
buildFeatures {
|
||||||
enabled = true
|
viewBinding = true
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
@ -37,7 +37,8 @@ configurations {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
def lifecycle_version = "2.3.0-alpha05"
|
def lifecycle_version = "2.3.0-alpha05"
|
||||||
def markwon_version = '4.4.0'
|
def markwon_version = "4.4.0"
|
||||||
|
def work_version = "2.4.0"
|
||||||
def acra = "5.5.0"
|
def acra = "5.5.0"
|
||||||
|
|
||||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
||||||
@ -50,14 +51,14 @@ dependencies {
|
|||||||
androidTestImplementation "androidx.test:runner:1.2.0"
|
androidTestImplementation "androidx.test:runner:1.2.0"
|
||||||
androidTestImplementation "androidx.test.espresso:espresso-core:3.2.0"
|
androidTestImplementation "androidx.test.espresso:espresso-core:3.2.0"
|
||||||
implementation "com.github.vihtarb:tooltip:0.2.0"
|
implementation "com.github.vihtarb:tooltip:0.2.0"
|
||||||
implementation 'com.squareup.okhttp3:okhttp:4.7.2'
|
implementation 'com.squareup.okhttp3:okhttp:4.8.0'
|
||||||
implementation "com.google.code.gson:gson:2.8.6"
|
implementation "com.google.code.gson:gson:2.8.6"
|
||||||
implementation "com.squareup.picasso:picasso:2.71828"
|
implementation "com.squareup.picasso:picasso:2.71828"
|
||||||
implementation "com.amulyakhare:com.amulyakhare.textdrawable:1.0.1"
|
implementation "com.amulyakhare:com.amulyakhare.textdrawable:1.0.1"
|
||||||
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
|
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
|
||||||
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
|
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
|
||||||
implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'
|
implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'
|
||||||
implementation 'com.squareup.okhttp3:logging-interceptor:4.7.2'
|
implementation 'com.squareup.okhttp3:logging-interceptor:4.8.0'
|
||||||
implementation 'org.ocpsoft.prettytime:prettytime:4.0.5.Final'
|
implementation 'org.ocpsoft.prettytime:prettytime:4.0.5.Final'
|
||||||
implementation "com.vdurmont:emoji-java:5.1.1"
|
implementation "com.vdurmont:emoji-java:5.1.1"
|
||||||
implementation "com.pes.materialcolorpicker:library:1.2.5"
|
implementation "com.pes.materialcolorpicker:library:1.2.5"
|
||||||
@ -80,11 +81,15 @@ dependencies {
|
|||||||
implementation "com.hendraanggrian.appcompat:socialview-commons:0.2"
|
implementation "com.hendraanggrian.appcompat:socialview-commons:0.2"
|
||||||
implementation "com.github.HamidrezaAmz:BreadcrumbsView:0.2.9"
|
implementation "com.github.HamidrezaAmz:BreadcrumbsView:0.2.9"
|
||||||
implementation "commons-io:commons-io:20030203.000550"
|
implementation "commons-io:commons-io:20030203.000550"
|
||||||
|
implementation "org.apache.commons:commons-lang3:3.10"
|
||||||
implementation "com.github.chrisbanes:PhotoView:2.3.0"
|
implementation "com.github.chrisbanes:PhotoView:2.3.0"
|
||||||
implementation "com.github.barteksc:android-pdf-viewer:3.2.0-beta.1"
|
implementation "com.github.barteksc:android-pdf-viewer:3.2.0-beta.1"
|
||||||
implementation "ch.acra:acra-mail:$acra"
|
implementation "ch.acra:acra-mail:$acra"
|
||||||
implementation "ch.acra:acra-limiter:$acra"
|
implementation "ch.acra:acra-limiter:$acra"
|
||||||
implementation "ch.acra:acra-notification:$acra"
|
implementation "ch.acra:acra-notification:$acra"
|
||||||
|
implementation "androidx.room:room-runtime:2.2.5"
|
||||||
|
annotationProcessor "androidx.room:room-compiler:2.2.5"
|
||||||
|
implementation "androidx.work:work-runtime:$work_version"
|
||||||
implementation "com.eightbitlab:blurview:1.6.3"
|
implementation "com.eightbitlab:blurview:1.6.3"
|
||||||
implementation "io.mikael:urlbuilder:2.0.9"
|
implementation "io.mikael:urlbuilder:2.0.9"
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
package="org.mian.gitnex">
|
package="org.mian.gitnex">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
<uses-permission android:name="android.permission.VIBRATE" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
@ -11,9 +12,11 @@
|
|||||||
android:icon="@mipmap/app_logo"
|
android:icon="@mipmap/app_logo"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:networkSecurityConfig="@xml/network_security_config"
|
android:networkSecurityConfig="@xml/network_security_config"
|
||||||
|
android:resizeableActivity="true"
|
||||||
android:roundIcon="@mipmap/app_logo_round"
|
android:roundIcon="@mipmap/app_logo_round"
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
tools:targetApi="n">
|
tools:targetApi="n">
|
||||||
|
|
||||||
<activity android:name=".activities.MergePullRequestActivity" />
|
<activity android:name=".activities.MergePullRequestActivity" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.FileViewActivity"
|
android:name=".activities.FileViewActivity"
|
||||||
@ -58,7 +61,7 @@
|
|||||||
android:name=".activities.RepoDetailActivity"
|
android:name=".activities.RepoDetailActivity"
|
||||||
android:label="@string/title_activity_repo_detail"
|
android:label="@string/title_activity_repo_detail"
|
||||||
android:theme="@style/AppTheme.NoActionBar" />
|
android:theme="@style/AppTheme.NoActionBar" />
|
||||||
<activity android:name=".activities.MainActivity" android:theme="@android:style/Theme.NoTitleBar">
|
<activity android:name=".activities.MainActivity" android:theme="@android:style/Theme.NoTitleBar" android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|uiMode|keyboard|keyboardHidden|navigation">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
@ -80,6 +83,13 @@
|
|||||||
<activity android:name=".activities.SettingsTranslationActivity" />
|
<activity android:name=".activities.SettingsTranslationActivity" />
|
||||||
<activity android:name=".activities.SettingsReportsActivity" />
|
<activity android:name=".activities.SettingsReportsActivity" />
|
||||||
<activity android:name=".activities.AddNewTeamMemberActivity" />
|
<activity android:name=".activities.AddNewTeamMemberActivity" />
|
||||||
|
<activity android:name=".activities.SettingsDraftsActivity" />
|
||||||
|
|
||||||
|
<!-- Version < 3.0. DeX Mode and Screen Mirroring support -->
|
||||||
|
<meta-data android:name="com.samsung.android.keepalive.density" android:value="true"/>
|
||||||
|
<!-- Version >= 3.0. DeX Dual Mode support -->
|
||||||
|
<meta-data android:name="com.samsung.android.multidisplay.keep_process_alive" android:value="true"/>
|
||||||
|
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
@ -2,16 +2,16 @@ package org.mian.gitnex.actions;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.activities.AddCollaboratorToRepositoryActivity;
|
import org.mian.gitnex.activities.AddCollaboratorToRepositoryActivity;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
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.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.models.Collaborators;
|
import org.mian.gitnex.models.Collaborators;
|
||||||
import org.mian.gitnex.models.Permission;
|
import org.mian.gitnex.models.Permission;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
|
|
||||||
|
@ -9,10 +9,10 @@ import org.mian.gitnex.activities.ReplyToIssueActivity;
|
|||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
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.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.models.IssueComments;
|
import org.mian.gitnex.models.IssueComments;
|
||||||
import org.mian.gitnex.models.UpdateIssueState;
|
import org.mian.gitnex.models.UpdateIssueState;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
|
|
||||||
|
@ -7,9 +7,9 @@ import com.google.gson.JsonElement;
|
|||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.helpers.AlertDialogs;
|
import org.mian.gitnex.helpers.AlertDialogs;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.models.Milestones;
|
import org.mian.gitnex.models.Milestones;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
|
|
||||||
|
@ -0,0 +1,59 @@
|
|||||||
|
package org.mian.gitnex.actions;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
|
import org.mian.gitnex.models.NotificationThread;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Date;
|
||||||
|
import okhttp3.ResponseBody;
|
||||||
|
import retrofit2.Call;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author opyale
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class NotificationsActions {
|
||||||
|
|
||||||
|
public enum NotificationStatus {READ, UNREAD, PINNED}
|
||||||
|
|
||||||
|
private TinyDB tinyDB;
|
||||||
|
private Context context;
|
||||||
|
private String instanceUrl;
|
||||||
|
private String instanceToken;
|
||||||
|
|
||||||
|
public NotificationsActions(Context context) {
|
||||||
|
|
||||||
|
this.context = context;
|
||||||
|
this.tinyDB = new TinyDB(context);
|
||||||
|
|
||||||
|
String loginUid = tinyDB.getString("loginUid");
|
||||||
|
|
||||||
|
instanceUrl = tinyDB.getString("instanceUrl");
|
||||||
|
instanceToken = "token " + tinyDB.getString(loginUid + "-token");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNotificationStatus(NotificationThread notificationThread, NotificationStatus notificationStatus) throws IOException {
|
||||||
|
|
||||||
|
Call<ResponseBody> call = RetrofitClient.getInstance(instanceUrl, context).getApiInterface()
|
||||||
|
.markNotificationThreadAsRead(instanceToken, notificationThread.getId(), notificationStatus.name());
|
||||||
|
|
||||||
|
if(!call.execute().isSuccessful()) {
|
||||||
|
|
||||||
|
throw new IllegalStateException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean setAllNotificationsRead(Date date) throws IOException {
|
||||||
|
|
||||||
|
Call<ResponseBody> call = RetrofitClient.getInstance(instanceUrl, context).getApiInterface()
|
||||||
|
.markNotificationThreadsAsRead(instanceToken, AppUtil.getTimestampFromDate(context, date), true,
|
||||||
|
new String[]{"unread", "pinned"}, "read");
|
||||||
|
|
||||||
|
return call.execute().isSuccessful();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -8,8 +8,8 @@ import org.mian.gitnex.R;
|
|||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
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.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
|
|
||||||
|
@ -8,8 +8,8 @@ import org.mian.gitnex.activities.AddNewTeamMemberActivity;
|
|||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
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.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
|
|
||||||
|
@ -1,30 +1,29 @@
|
|||||||
package org.mian.gitnex.activities;
|
package org.mian.gitnex.activities;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.recyclerview.widget.DividerItemDecoration;
|
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
|
||||||
import retrofit2.Call;
|
|
||||||
import retrofit2.Callback;
|
|
||||||
import retrofit2.Response;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.KeyEvent;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.recyclerview.widget.DividerItemDecoration;
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.adapters.UserSearchAdapter;
|
import org.mian.gitnex.adapters.UserSearchAdapter;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
import org.mian.gitnex.models.UserSearch;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.models.UserInfo;
|
import org.mian.gitnex.models.UserInfo;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
import org.mian.gitnex.models.UserSearch;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
import retrofit2.Response;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
|
@ -18,9 +18,9 @@ import org.mian.gitnex.R;
|
|||||||
import org.mian.gitnex.adapters.UserSearchForTeamMemberAdapter;
|
import org.mian.gitnex.adapters.UserSearchForTeamMemberAdapter;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.models.UserInfo;
|
import org.mian.gitnex.models.UserInfo;
|
||||||
import org.mian.gitnex.models.UserSearch;
|
import org.mian.gitnex.models.UserSearch;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
@ -1,23 +1,23 @@
|
|||||||
package org.mian.gitnex.activities;
|
package org.mian.gitnex.activities;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.drawable.ColorDrawable;
|
import android.graphics.drawable.ColorDrawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
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.MultiSelectDialog;
|
import org.mian.gitnex.helpers.MultiSelectDialog;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
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 org.mian.gitnex.models.MultiSelectModel;
|
import org.mian.gitnex.models.MultiSelectModel;
|
||||||
import org.mian.gitnex.models.UpdateIssueAssignees;
|
import org.mian.gitnex.models.UpdateIssueAssignees;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
@ -139,7 +139,7 @@ public class AddRemoveAssigneesActivity extends BaseActivity {
|
|||||||
.multiSelectList(listOfCollaborators)
|
.multiSelectList(listOfCollaborators)
|
||||||
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSelected(ArrayList<Integer> selectedIds, ArrayList<String> selectedNames, String dataString) {
|
public void onSelected(List<Integer> selectedIds, List<String> selectedNames, String dataString) {
|
||||||
|
|
||||||
Log.i("selectedNames", String.valueOf(selectedNames));
|
Log.i("selectedNames", String.valueOf(selectedNames));
|
||||||
|
|
||||||
@ -167,7 +167,7 @@ public class AddRemoveAssigneesActivity extends BaseActivity {
|
|||||||
.multiSelectList(listOfCollaborators)
|
.multiSelectList(listOfCollaborators)
|
||||||
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSelected(ArrayList<Integer> selectedIds, ArrayList<String> selectedNames, String dataString) {
|
public void onSelected(List<Integer> selectedIds, List<String> selectedNames, String dataString) {
|
||||||
|
|
||||||
updateIssueAssignees(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, loginUid, issueIndex, selectedNames);
|
updateIssueAssignees(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, loginUid, issueIndex, selectedNames);
|
||||||
tinyDb.putBoolean("singleIssueUpdate", true);
|
tinyDb.putBoolean("singleIssueUpdate", true);
|
||||||
|
@ -1,25 +1,25 @@
|
|||||||
package org.mian.gitnex.activities;
|
package org.mian.gitnex.activities;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import retrofit2.Call;
|
|
||||||
import retrofit2.Callback;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.drawable.ColorDrawable;
|
import android.graphics.drawable.ColorDrawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
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.MultiSelectDialog;
|
import org.mian.gitnex.helpers.MultiSelectDialog;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.models.Labels;
|
import org.mian.gitnex.models.Labels;
|
||||||
import org.mian.gitnex.models.MultiSelectModel;
|
import org.mian.gitnex.models.MultiSelectModel;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
@ -128,7 +128,7 @@ public class AddRemoveLabelsActivity extends BaseActivity {
|
|||||||
.multiSelectList(listOfLabels)
|
.multiSelectList(listOfLabels)
|
||||||
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSelected(ArrayList<Integer> selectedIds, ArrayList<String> selectedNames, String dataString) {
|
public void onSelected(List<Integer> selectedIds, List<String> selectedNames, String dataString) {
|
||||||
|
|
||||||
String labelIds = selectedIds.toString();
|
String labelIds = selectedIds.toString();
|
||||||
int[] integers;
|
int[] integers;
|
||||||
@ -169,7 +169,7 @@ public class AddRemoveLabelsActivity extends BaseActivity {
|
|||||||
.multiSelectList(listOfLabels)
|
.multiSelectList(listOfLabels)
|
||||||
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSelected(ArrayList<Integer> selectedIds, ArrayList<String> selectedNames, String dataString) {
|
public void onSelected(List<Integer> selectedIds, List<String> selectedNames, String dataString) {
|
||||||
|
|
||||||
String labelIds = selectedIds.toString();
|
String labelIds = selectedIds.toString();
|
||||||
int[] integers;
|
int[] integers;
|
||||||
|
@ -21,9 +21,9 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
|||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.adapters.AdminGetUsersAdapter;
|
import org.mian.gitnex.adapters.AdminGetUsersAdapter;
|
||||||
import org.mian.gitnex.fragments.BottomSheetAdminUsersFragment;
|
import org.mian.gitnex.fragments.BottomSheetAdminUsersFragment;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import org.mian.gitnex.viewmodels.AdminGetUsersViewModel;
|
import org.mian.gitnex.viewmodels.AdminGetUsersViewModel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package org.mian.gitnex.activities;
|
package org.mian.gitnex.activities;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import org.acra.ACRA;
|
import org.acra.ACRA;
|
||||||
@ -10,10 +11,11 @@ import org.acra.config.LimiterConfigurationBuilder;
|
|||||||
import org.acra.config.MailSenderConfigurationBuilder;
|
import org.acra.config.MailSenderConfigurationBuilder;
|
||||||
import org.acra.data.StringFormat;
|
import org.acra.data.StringFormat;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.FontsOverride;
|
import org.mian.gitnex.helpers.FontsOverride;
|
||||||
import org.mian.gitnex.helpers.TimeHelper;
|
import org.mian.gitnex.helpers.TimeHelper;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
import org.mian.gitnex.notifications.NotificationsMaster;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
@ -26,10 +28,13 @@ import org.mian.gitnex.util.TinyDB;
|
|||||||
|
|
||||||
public abstract class BaseActivity extends AppCompatActivity {
|
public abstract class BaseActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
private Context appCtx;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
|
||||||
final TinyDB tinyDb = new TinyDB(getApplicationContext());
|
appCtx = getApplicationContext();
|
||||||
|
final TinyDB tinyDb = new TinyDB(appCtx);
|
||||||
|
|
||||||
switch(tinyDb.getInt("themeId")) {
|
switch(tinyDb.getInt("themeId")) {
|
||||||
|
|
||||||
@ -83,6 +88,12 @@ public abstract class BaseActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(tinyDb.getInt("pollingDelayMinutes") == 0) {
|
||||||
|
tinyDb.putInt("pollingDelayMinutes", 15);
|
||||||
|
}
|
||||||
|
|
||||||
|
NotificationsMaster.hireWorker(appCtx);
|
||||||
|
|
||||||
// enabling counter badges by default
|
// enabling counter badges by default
|
||||||
if(tinyDb.getString("enableCounterBadgesInit").isEmpty()) {
|
if(tinyDb.getString("enableCounterBadgesInit").isEmpty()) {
|
||||||
tinyDb.putBoolean("enableCounterBadges", true);
|
tinyDb.putBoolean("enableCounterBadges", true);
|
||||||
@ -103,6 +114,12 @@ public abstract class BaseActivity extends AppCompatActivity {
|
|||||||
tinyDb.putString("cacheSizeImagesStr", getResources().getString(R.string.cacheSizeImagesSelectionSelectedText));
|
tinyDb.putString("cacheSizeImagesStr", getResources().getString(R.string.cacheSizeImagesSelectionSelectedText));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// enable comment drafts by default
|
||||||
|
if(tinyDb.getString("draftsCommentsDeletionEnabledInit").isEmpty()) {
|
||||||
|
tinyDb.putBoolean("draftsCommentsDeletionEnabled", true);
|
||||||
|
tinyDb.putString("draftsCommentsDeletionEnabledInit", "yes");
|
||||||
|
}
|
||||||
|
|
||||||
if(!tinyDb.getString("instanceUrlWithProtocol").endsWith("/")) {
|
if(!tinyDb.getString("instanceUrlWithProtocol").endsWith("/")) {
|
||||||
|
|
||||||
tinyDb.putString("instanceUrlWithProtocol", tinyDb.getString("instanceUrlWithProtocol") + "/");
|
tinyDb.putString("instanceUrlWithProtocol", tinyDb.getString("instanceUrlWithProtocol") + "/");
|
||||||
|
@ -23,10 +23,10 @@ import org.mian.gitnex.adapters.CommitsAdapter;
|
|||||||
import org.mian.gitnex.clients.AppApiService;
|
import org.mian.gitnex.clients.AppApiService;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
import org.mian.gitnex.helpers.StaticGlobalVariables;
|
import org.mian.gitnex.helpers.StaticGlobalVariables;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Version;
|
import org.mian.gitnex.helpers.Version;
|
||||||
import org.mian.gitnex.interfaces.ApiInterface;
|
import org.mian.gitnex.interfaces.ApiInterface;
|
||||||
import org.mian.gitnex.models.Commits;
|
import org.mian.gitnex.models.Commits;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
|
@ -19,12 +19,12 @@ import com.google.gson.JsonElement;
|
|||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.helpers.AlertDialogs;
|
import org.mian.gitnex.helpers.AlertDialogs;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
|
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.NewFile;
|
import org.mian.gitnex.models.NewFile;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
|
@ -1,9 +1,5 @@
|
|||||||
package org.mian.gitnex.activities;
|
package org.mian.gitnex.activities;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import retrofit2.Call;
|
|
||||||
import retrofit2.Callback;
|
|
||||||
import retrofit2.Response;
|
|
||||||
import android.app.DatePickerDialog;
|
import android.app.DatePickerDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.PorterDuff;
|
import android.graphics.PorterDuff;
|
||||||
@ -19,6 +15,7 @@ import android.widget.EditText;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.Spinner;
|
import android.widget.Spinner;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.hendraanggrian.appcompat.socialview.Mention;
|
import com.hendraanggrian.appcompat.socialview.Mention;
|
||||||
import com.hendraanggrian.appcompat.widget.MentionArrayAdapter;
|
import com.hendraanggrian.appcompat.widget.MentionArrayAdapter;
|
||||||
@ -26,22 +23,25 @@ import com.hendraanggrian.appcompat.widget.SocialAutoCompleteTextView;
|
|||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.helpers.AlertDialogs;
|
import org.mian.gitnex.helpers.AlertDialogs;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
import org.mian.gitnex.helpers.MultiSelectDialog;
|
import org.mian.gitnex.helpers.MultiSelectDialog;
|
||||||
import org.mian.gitnex.helpers.StaticGlobalVariables;
|
import org.mian.gitnex.helpers.StaticGlobalVariables;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.helpers.Version;
|
import org.mian.gitnex.helpers.Version;
|
||||||
import org.mian.gitnex.models.Collaborators;
|
import org.mian.gitnex.models.Collaborators;
|
||||||
import org.mian.gitnex.models.CreateIssue;
|
import org.mian.gitnex.models.CreateIssue;
|
||||||
import org.mian.gitnex.models.Labels;
|
import org.mian.gitnex.models.Labels;
|
||||||
import org.mian.gitnex.models.Milestones;
|
import org.mian.gitnex.models.Milestones;
|
||||||
import org.mian.gitnex.models.MultiSelectModel;
|
import org.mian.gitnex.models.MultiSelectModel;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
import retrofit2.Response;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
@ -444,7 +444,7 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
|
|||||||
.multiSelectList(listOfAssignees)
|
.multiSelectList(listOfAssignees)
|
||||||
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSelected(ArrayList<Integer> selectedIds, ArrayList<String> selectedNames, String dataString) {
|
public void onSelected(List<Integer> selectedIds, List<String> selectedNames, String dataString) {
|
||||||
|
|
||||||
assigneesList.setText(dataString);
|
assigneesList.setText(dataString);
|
||||||
|
|
||||||
@ -507,7 +507,7 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
|
|||||||
.multiSelectList(listOfLabels)
|
.multiSelectList(listOfLabels)
|
||||||
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSelected(ArrayList<Integer> selectedIds, ArrayList<String> selectedNames, String dataString) {
|
public void onSelected(List<Integer> selectedIds, List<String> selectedNames, String dataString) {
|
||||||
|
|
||||||
newIssueLabels.setText(dataString.trim());
|
newIssueLabels.setText(dataString.trim());
|
||||||
labelsIdHolder.setText(selectedIds.toString());
|
labelsIdHolder.setText(selectedIds.toString());
|
||||||
|
@ -1,10 +1,5 @@
|
|||||||
package org.mian.gitnex.activities;
|
package org.mian.gitnex.activities;
|
||||||
|
|
||||||
import androidx.annotation.ColorInt;
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.core.content.ContextCompat;
|
|
||||||
import retrofit2.Call;
|
|
||||||
import retrofit2.Callback;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.drawable.GradientDrawable;
|
import android.graphics.drawable.GradientDrawable;
|
||||||
@ -16,19 +11,24 @@ import android.widget.Button;
|
|||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.ColorInt;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.core.content.ContextCompat;
|
||||||
import com.pes.androidmaterialcolorpickerdialog.ColorPicker;
|
import com.pes.androidmaterialcolorpickerdialog.ColorPicker;
|
||||||
import com.pes.androidmaterialcolorpickerdialog.ColorPickerCallback;
|
import com.pes.androidmaterialcolorpickerdialog.ColorPickerCallback;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.helpers.AlertDialogs;
|
import org.mian.gitnex.helpers.AlertDialogs;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.models.CreateLabel;
|
import org.mian.gitnex.models.CreateLabel;
|
||||||
import org.mian.gitnex.models.Labels;
|
import org.mian.gitnex.models.Labels;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import org.mian.gitnex.viewmodels.LabelsViewModel;
|
import org.mian.gitnex.viewmodels.LabelsViewModel;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
package org.mian.gitnex.activities;
|
package org.mian.gitnex.activities;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import retrofit2.Call;
|
|
||||||
import retrofit2.Callback;
|
|
||||||
import android.app.DatePickerDialog;
|
import android.app.DatePickerDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.drawable.GradientDrawable;
|
import android.graphics.drawable.GradientDrawable;
|
||||||
@ -14,16 +11,19 @@ import android.widget.Button;
|
|||||||
import android.widget.DatePicker;
|
import android.widget.DatePicker;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.helpers.AlertDialogs;
|
import org.mian.gitnex.helpers.AlertDialogs;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
import org.mian.gitnex.helpers.Version;
|
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.models.Milestones;
|
import org.mian.gitnex.models.Milestones;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
package org.mian.gitnex.activities;
|
package org.mian.gitnex.activities;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import retrofit2.Call;
|
|
||||||
import retrofit2.Callback;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.drawable.GradientDrawable;
|
import android.graphics.drawable.GradientDrawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@ -13,14 +10,17 @@ import android.view.inputmethod.InputMethodManager;
|
|||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.helpers.AlertDialogs;
|
import org.mian.gitnex.helpers.AlertDialogs;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.models.UserInfo;
|
import org.mian.gitnex.models.UserInfo;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
import retrofit2.Call;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
import retrofit2.Callback;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
|
@ -3,21 +3,21 @@ package org.mian.gitnex.activities;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.drawable.GradientDrawable;
|
import android.graphics.drawable.GradientDrawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.helpers.AlertDialogs;
|
import org.mian.gitnex.helpers.AlertDialogs;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.models.UserOrganizations;
|
import org.mian.gitnex.models.UserOrganizations;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
|
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
package org.mian.gitnex.activities;
|
package org.mian.gitnex.activities;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import retrofit2.Call;
|
|
||||||
import retrofit2.Callback;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.PorterDuff;
|
import android.graphics.PorterDuff;
|
||||||
import android.graphics.drawable.GradientDrawable;
|
import android.graphics.drawable.GradientDrawable;
|
||||||
@ -17,17 +14,20 @@ import android.widget.CheckBox;
|
|||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.Spinner;
|
import android.widget.Spinner;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.helpers.AlertDialogs;
|
import org.mian.gitnex.helpers.AlertDialogs;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
|
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.Releases;
|
import org.mian.gitnex.models.Releases;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
|
@ -4,7 +4,6 @@ import android.content.Context;
|
|||||||
import android.graphics.PorterDuff;
|
import android.graphics.PorterDuff;
|
||||||
import android.graphics.drawable.GradientDrawable;
|
import android.graphics.drawable.GradientDrawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
@ -15,15 +14,16 @@ import android.widget.CheckBox;
|
|||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.Spinner;
|
import android.widget.Spinner;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.helpers.AlertDialogs;
|
import org.mian.gitnex.helpers.AlertDialogs;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.models.OrgOwner;
|
import org.mian.gitnex.models.OrgOwner;
|
||||||
import org.mian.gitnex.models.OrganizationRepository;
|
import org.mian.gitnex.models.OrganizationRepository;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -1,30 +1,30 @@
|
|||||||
package org.mian.gitnex.activities;
|
package org.mian.gitnex.activities;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.appcompat.app.AlertDialog;
|
|
||||||
import retrofit2.Call;
|
|
||||||
import retrofit2.Callback;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.graphics.drawable.GradientDrawable;
|
import android.graphics.drawable.GradientDrawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.helpers.AlertDialogs;
|
import org.mian.gitnex.helpers.AlertDialogs;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.models.Teams;
|
import org.mian.gitnex.models.Teams;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import android.util.Log;
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
|
@ -1,9 +1,5 @@
|
|||||||
package org.mian.gitnex.activities;
|
package org.mian.gitnex.activities;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import retrofit2.Call;
|
|
||||||
import retrofit2.Callback;
|
|
||||||
import retrofit2.Response;
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.DatePickerDialog;
|
import android.app.DatePickerDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@ -20,6 +16,7 @@ import android.widget.EditText;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.Spinner;
|
import android.widget.Spinner;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.hendraanggrian.appcompat.socialview.Mention;
|
import com.hendraanggrian.appcompat.socialview.Mention;
|
||||||
import com.hendraanggrian.appcompat.widget.MentionArrayAdapter;
|
import com.hendraanggrian.appcompat.widget.MentionArrayAdapter;
|
||||||
@ -27,21 +24,24 @@ import com.hendraanggrian.appcompat.widget.SocialAutoCompleteTextView;
|
|||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.helpers.AlertDialogs;
|
import org.mian.gitnex.helpers.AlertDialogs;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
import org.mian.gitnex.helpers.StaticGlobalVariables;
|
import org.mian.gitnex.helpers.StaticGlobalVariables;
|
||||||
|
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 org.mian.gitnex.models.Collaborators;
|
import org.mian.gitnex.models.Collaborators;
|
||||||
import org.mian.gitnex.models.CreateIssue;
|
import org.mian.gitnex.models.CreateIssue;
|
||||||
import org.mian.gitnex.models.Issues;
|
import org.mian.gitnex.models.Issues;
|
||||||
import org.mian.gitnex.models.Milestones;
|
import org.mian.gitnex.models.Milestones;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
import retrofit2.Response;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
@ -121,7 +121,7 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe
|
|||||||
|
|
||||||
if(!tinyDb.getString("issueNumber").isEmpty()) {
|
if(!tinyDb.getString("issueNumber").isEmpty()) {
|
||||||
|
|
||||||
if(tinyDb.getString("issueType").equals("pr")) {
|
if(tinyDb.getString("issueType").equalsIgnoreCase("Pull")) {
|
||||||
toolbar_title.setText(getString(R.string.editPrNavHeader, String.valueOf(issueIndex)));
|
toolbar_title.setText(getString(R.string.editPrNavHeader, String.valueOf(issueIndex)));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -266,7 +266,7 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe
|
|||||||
|
|
||||||
if(response.code() == 201) {
|
if(response.code() == 201) {
|
||||||
|
|
||||||
if(tinyDb.getString("issueType").equals("pr")) {
|
if(tinyDb.getString("issueType").equalsIgnoreCase("Pull")) {
|
||||||
Toasty.info(ctx, getString(R.string.editPrSuccessMessage));
|
Toasty.info(ctx, getString(R.string.editPrSuccessMessage));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -14,12 +14,12 @@ import org.mian.gitnex.R;
|
|||||||
import org.mian.gitnex.adapters.FilesDiffAdapter;
|
import org.mian.gitnex.adapters.FilesDiffAdapter;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.helpers.AlertDialogs;
|
import org.mian.gitnex.helpers.AlertDialogs;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.ParseDiff;
|
import org.mian.gitnex.helpers.ParseDiff;
|
||||||
|
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 org.mian.gitnex.models.FileDiffView;
|
import org.mian.gitnex.models.FileDiffView;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import okhttp3.ResponseBody;
|
import okhttp3.ResponseBody;
|
||||||
|
@ -31,12 +31,12 @@ import org.mian.gitnex.R;
|
|||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.fragments.BottomSheetFileViewerFragment;
|
import org.mian.gitnex.fragments.BottomSheetFileViewerFragment;
|
||||||
import org.mian.gitnex.helpers.AlertDialogs;
|
import org.mian.gitnex.helpers.AlertDialogs;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.helpers.highlightjs.HighlightJsView;
|
import org.mian.gitnex.helpers.highlightjs.HighlightJsView;
|
||||||
import org.mian.gitnex.helpers.highlightjs.models.Theme;
|
import org.mian.gitnex.helpers.highlightjs.models.Theme;
|
||||||
import org.mian.gitnex.models.Files;
|
import org.mian.gitnex.models.Files;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
@ -83,6 +83,7 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
|
|||||||
|
|
||||||
final TinyDB tinyDb = new TinyDB(appCtx);
|
final TinyDB tinyDb = new TinyDB(appCtx);
|
||||||
String repoFullName = tinyDb.getString("repoFullName");
|
String repoFullName = tinyDb.getString("repoFullName");
|
||||||
|
String repoBranch = tinyDb.getString("repoBranch");
|
||||||
String[] parts = repoFullName.split("/");
|
String[] parts = repoFullName.split("/");
|
||||||
final String repoOwner = parts[0];
|
final String repoOwner = parts[0];
|
||||||
final String repoName = parts[1];
|
final String repoName = parts[1];
|
||||||
@ -125,15 +126,15 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
|
|||||||
|
|
||||||
toolbar_title.setText(singleFileName);
|
toolbar_title.setText(singleFileName);
|
||||||
|
|
||||||
getSingleFileContents(instanceUrl, instanceToken, repoOwner, repoName, singleFileName);
|
getSingleFileContents(instanceUrl, instanceToken, repoOwner, repoName, singleFileName, repoBranch);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getSingleFileContents(String instanceUrl, String token, final String owner, String repo, final String filename) {
|
private void getSingleFileContents(String instanceUrl, String token, final String owner, String repo, final String filename, String ref) {
|
||||||
|
|
||||||
final TinyDB tinyDb = new TinyDB(appCtx);
|
final TinyDB tinyDb = new TinyDB(appCtx);
|
||||||
|
|
||||||
Call<Files> call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getSingleFileContents(token, owner, repo, filename);
|
Call<Files> call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getSingleFileContents(token, owner, repo, filename, ref);
|
||||||
|
|
||||||
call.enqueue(new Callback<Files>() {
|
call.enqueue(new Callback<Files>() {
|
||||||
|
|
||||||
|
@ -25,9 +25,7 @@ import android.widget.RelativeLayout;
|
|||||||
import android.widget.ScrollView;
|
import android.widget.ScrollView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.lifecycle.Observer;
|
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
import androidx.recyclerview.widget.DividerItemDecoration;
|
import androidx.recyclerview.widget.DividerItemDecoration;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
@ -41,24 +39,23 @@ import org.mian.gitnex.clients.PicassoService;
|
|||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.fragments.BottomSheetSingleIssueFragment;
|
import org.mian.gitnex.fragments.BottomSheetSingleIssueFragment;
|
||||||
import org.mian.gitnex.helpers.AlertDialogs;
|
import org.mian.gitnex.helpers.AlertDialogs;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
import org.mian.gitnex.helpers.ClickListener;
|
import org.mian.gitnex.helpers.ClickListener;
|
||||||
import org.mian.gitnex.helpers.ColorInverter;
|
import org.mian.gitnex.helpers.ColorInverter;
|
||||||
import org.mian.gitnex.helpers.LabelWidthCalculator;
|
import org.mian.gitnex.helpers.LabelWidthCalculator;
|
||||||
import org.mian.gitnex.helpers.RoundedTransformation;
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
||||||
import org.mian.gitnex.helpers.TimeHelper;
|
import org.mian.gitnex.helpers.TimeHelper;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.UserMentions;
|
import org.mian.gitnex.helpers.UserMentions;
|
||||||
import org.mian.gitnex.helpers.Version;
|
import org.mian.gitnex.helpers.Version;
|
||||||
import org.mian.gitnex.models.IssueComments;
|
|
||||||
import org.mian.gitnex.models.Issues;
|
import org.mian.gitnex.models.Issues;
|
||||||
import org.mian.gitnex.models.WatchInfo;
|
import org.mian.gitnex.models.WatchInfo;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import org.mian.gitnex.viewmodels.IssueCommentsViewModel;
|
import org.mian.gitnex.viewmodels.IssueCommentsViewModel;
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||||
@ -191,7 +188,9 @@ public class IssueDetailActivity extends BaseActivity {
|
|||||||
swipeRefresh.setOnRefreshListener(() -> new Handler().postDelayed(() -> {
|
swipeRefresh.setOnRefreshListener(() -> new Handler().postDelayed(() -> {
|
||||||
|
|
||||||
swipeRefresh.setRefreshing(false);
|
swipeRefresh.setRefreshing(false);
|
||||||
IssueCommentsViewModel.loadIssueComments(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex, ctx);
|
IssueCommentsViewModel
|
||||||
|
.loadIssueComments(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex,
|
||||||
|
ctx);
|
||||||
|
|
||||||
}, 500));
|
}, 500));
|
||||||
|
|
||||||
@ -265,7 +264,9 @@ public class IssueDetailActivity extends BaseActivity {
|
|||||||
if(tinyDb.getBoolean("commentPosted")) {
|
if(tinyDb.getBoolean("commentPosted")) {
|
||||||
scrollViewComments.post(() -> {
|
scrollViewComments.post(() -> {
|
||||||
|
|
||||||
IssueCommentsViewModel.loadIssueComments(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex, ctx);
|
IssueCommentsViewModel
|
||||||
|
.loadIssueComments(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex,
|
||||||
|
ctx);
|
||||||
|
|
||||||
new Handler().postDelayed(() -> scrollViewComments.fullScroll(ScrollView.FOCUS_DOWN), 1000);
|
new Handler().postDelayed(() -> scrollViewComments.fullScroll(ScrollView.FOCUS_DOWN), 1000);
|
||||||
|
|
||||||
@ -277,7 +278,9 @@ public class IssueDetailActivity extends BaseActivity {
|
|||||||
if(tinyDb.getBoolean("commentEdited")) {
|
if(tinyDb.getBoolean("commentEdited")) {
|
||||||
scrollViewComments.post(() -> {
|
scrollViewComments.post(() -> {
|
||||||
|
|
||||||
IssueCommentsViewModel.loadIssueComments(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex, ctx);
|
IssueCommentsViewModel
|
||||||
|
.loadIssueComments(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex,
|
||||||
|
ctx);
|
||||||
tinyDb.putBoolean("commentEdited", false);
|
tinyDb.putBoolean("commentEdited", false);
|
||||||
|
|
||||||
});
|
});
|
||||||
@ -315,12 +318,11 @@ public class IssueDetailActivity extends BaseActivity {
|
|||||||
|
|
||||||
IssueCommentsViewModel issueCommentsModel = new ViewModelProvider(this).get(IssueCommentsViewModel.class);
|
IssueCommentsViewModel issueCommentsModel = new ViewModelProvider(this).get(IssueCommentsViewModel.class);
|
||||||
|
|
||||||
issueCommentsModel.getIssueCommentList(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), owner, repo, index, ctx).observe(this, new Observer<List<IssueComments>>() {
|
issueCommentsModel.getIssueCommentList(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), owner, repo, index, ctx)
|
||||||
|
.observe(this, issueCommentsMain -> {
|
||||||
@Override
|
|
||||||
public void onChanged(@Nullable List<IssueComments> issueCommentsMain) {
|
|
||||||
|
|
||||||
assert issueCommentsMain != null;
|
assert issueCommentsMain != null;
|
||||||
|
|
||||||
if(issueCommentsMain.size() > 0) {
|
if(issueCommentsMain.size() > 0) {
|
||||||
divider.setVisibility(View.VISIBLE);
|
divider.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
@ -328,7 +330,6 @@ public class IssueDetailActivity extends BaseActivity {
|
|||||||
adapter = new IssueCommentsAdapter(ctx, issueCommentsMain);
|
adapter = new IssueCommentsAdapter(ctx, issueCommentsMain);
|
||||||
mRecyclerView.setAdapter(adapter);
|
mRecyclerView.setAdapter(adapter);
|
||||||
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -336,7 +337,8 @@ public class IssueDetailActivity extends BaseActivity {
|
|||||||
private void getSingleIssue(String instanceUrl, String instanceToken, String repoOwner, String repoName, int issueIndex, String loginUid) {
|
private void getSingleIssue(String instanceUrl, String instanceToken, String repoOwner, String repoName, int issueIndex, String loginUid) {
|
||||||
|
|
||||||
final TinyDB tinyDb = new TinyDB(appCtx);
|
final TinyDB tinyDb = new TinyDB(appCtx);
|
||||||
Call<Issues> call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getIssueByIndex(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex);
|
Call<Issues> call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface()
|
||||||
|
.getIssueByIndex(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex);
|
||||||
|
|
||||||
call.enqueue(new Callback<Issues>() {
|
call.enqueue(new Callback<Issues>() {
|
||||||
|
|
||||||
@ -348,14 +350,16 @@ public class IssueDetailActivity extends BaseActivity {
|
|||||||
Issues singleIssue = response.body();
|
Issues singleIssue = response.body();
|
||||||
assert singleIssue != null;
|
assert singleIssue != null;
|
||||||
|
|
||||||
final Markwon markwon = Markwon.builder(Objects.requireNonNull(ctx)).usePlugin(CorePlugin.create()).usePlugin(ImagesPlugin.create(plugin -> {
|
final Markwon markwon = Markwon.builder(Objects.requireNonNull(ctx)).usePlugin(CorePlugin.create())
|
||||||
|
.usePlugin(ImagesPlugin.create(plugin -> {
|
||||||
plugin.addSchemeHandler(new SchemeHandler() {
|
plugin.addSchemeHandler(new SchemeHandler() {
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ImageItem handle(@NonNull String raw, @NonNull Uri uri) {
|
public ImageItem handle(@NonNull String raw, @NonNull Uri uri) {
|
||||||
|
|
||||||
final int resourceId = ctx.getResources().getIdentifier(raw.substring("drawable://".length()), "drawable", ctx.getPackageName());
|
final int resourceId = ctx.getResources()
|
||||||
|
.getIdentifier(raw.substring("drawable://".length()), "drawable", ctx.getPackageName());
|
||||||
|
|
||||||
final Drawable drawable = ctx.getDrawable(resourceId);
|
final Drawable drawable = ctx.getDrawable(resourceId);
|
||||||
|
|
||||||
@ -382,9 +386,11 @@ public class IssueDetailActivity extends BaseActivity {
|
|||||||
@Override
|
@Override
|
||||||
public void configureTheme(@NonNull MarkwonTheme.Builder builder) {
|
public void configureTheme(@NonNull MarkwonTheme.Builder builder) {
|
||||||
|
|
||||||
builder.codeTextColor(tinyDb.getInt("codeBlockColor")).codeBackgroundColor(tinyDb.getInt("codeBlockBackground")).linkColor(getResources().getColor(R.color.lightBlue));
|
builder.codeTextColor(tinyDb.getInt("codeBlockColor")).codeBackgroundColor(tinyDb.getInt("codeBlockBackground"))
|
||||||
|
.linkColor(getResources().getColor(R.color.lightBlue));
|
||||||
}
|
}
|
||||||
}).usePlugin(TablePlugin.create(ctx)).usePlugin(TaskListPlugin.create(ctx)).usePlugin(HtmlPlugin.create()).usePlugin(StrikethroughPlugin.create()).usePlugin(LinkifyPlugin.create()).build();
|
}).usePlugin(TablePlugin.create(ctx)).usePlugin(TaskListPlugin.create(ctx)).usePlugin(HtmlPlugin.create())
|
||||||
|
.usePlugin(StrikethroughPlugin.create()).usePlugin(LinkifyPlugin.create()).build();
|
||||||
|
|
||||||
TinyDB tinyDb = new TinyDB(appCtx);
|
TinyDB tinyDb = new TinyDB(appCtx);
|
||||||
final String locale = tinyDb.getString("locale");
|
final String locale = tinyDb.getString("locale");
|
||||||
@ -392,8 +398,10 @@ public class IssueDetailActivity extends BaseActivity {
|
|||||||
tinyDb.putString("issueState", singleIssue.getState());
|
tinyDb.putString("issueState", singleIssue.getState());
|
||||||
tinyDb.putString("issueTitle", singleIssue.getTitle());
|
tinyDb.putString("issueTitle", singleIssue.getTitle());
|
||||||
|
|
||||||
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);
|
PicassoService.getInstance(ctx).get().load(singleIssue.getUser().getAvatar_url()).placeholder(R.drawable.loader_animated)
|
||||||
String issueNumber_ = "<font color='" + appCtx.getResources().getColor(R.color.lightGray) + "'>" + appCtx.getResources().getString(R.string.hash) + singleIssue.getNumber() + "</font>";
|
.transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(assigneeAvatar);
|
||||||
|
String issueNumber_ = "<font color='" + appCtx.getResources().getColor(R.color.lightGray) + "'>" + appCtx.getResources()
|
||||||
|
.getString(R.string.hash) + singleIssue.getNumber() + "</font>";
|
||||||
issueTitle.setText(Html.fromHtml(issueNumber_ + " " + singleIssue.getTitle()));
|
issueTitle.setText(Html.fromHtml(issueNumber_ + " " + singleIssue.getTitle()));
|
||||||
String cleanIssueDescription = singleIssue.getBody().trim();
|
String cleanIssueDescription = singleIssue.getBody().trim();
|
||||||
Spanned bodyWithMD = markwon.toMarkdown(EmojiParser.parseToUnicode(cleanIssueDescription));
|
Spanned bodyWithMD = markwon.toMarkdown(EmojiParser.parseToUnicode(cleanIssueDescription));
|
||||||
@ -410,15 +418,19 @@ public class IssueDetailActivity extends BaseActivity {
|
|||||||
|
|
||||||
ImageView assigneesView = new ImageView(ctx);
|
ImageView assigneesView = new ImageView(ctx);
|
||||||
|
|
||||||
PicassoService.getInstance(ctx).get().load(singleIssue.getAssignees().get(i).getAvatar_url()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(100, 100).centerCrop().into(assigneesView);
|
PicassoService.getInstance(ctx).get().load(singleIssue.getAssignees().get(i).getAvatar_url())
|
||||||
|
.placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(100, 100).centerCrop()
|
||||||
|
.into(assigneesView);
|
||||||
|
|
||||||
assigneesLayout.addView(assigneesView);
|
assigneesLayout.addView(assigneesView);
|
||||||
assigneesView.setLayoutParams(params1);
|
assigneesView.setLayoutParams(params1);
|
||||||
if(!singleIssue.getAssignees().get(i).getFull_name().equals("")) {
|
if(!singleIssue.getAssignees().get(i).getFull_name().equals("")) {
|
||||||
assigneesView.setOnClickListener(new ClickListener(getString(R.string.assignedTo, singleIssue.getAssignees().get(i).getFull_name()), ctx));
|
assigneesView.setOnClickListener(
|
||||||
|
new ClickListener(getString(R.string.assignedTo, singleIssue.getAssignees().get(i).getFull_name()), ctx));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
assigneesView.setOnClickListener(new ClickListener(getString(R.string.assignedTo, singleIssue.getAssignees().get(i).getLogin()), ctx));
|
assigneesView.setOnClickListener(
|
||||||
|
new ClickListener(getString(R.string.assignedTo, singleIssue.getAssignees().get(i).getLogin()), ctx));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -427,12 +439,13 @@ public class IssueDetailActivity extends BaseActivity {
|
|||||||
assigneesScrollView.setVisibility(View.GONE);
|
assigneesScrollView.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
|
||||||
|
LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||||
params.setMargins(0, 0, 15, 0);
|
params.setMargins(0, 0, 15, 0);
|
||||||
|
|
||||||
if(singleIssue.getLabels() != null) {
|
if(singleIssue.getLabels() != null) {
|
||||||
labelsScrollView.setVisibility(View.VISIBLE);
|
labelsScrollView.setVisibility(View.VISIBLE);
|
||||||
int width = 25;
|
|
||||||
for(int i = 0; i < singleIssue.getLabels().size(); i++) {
|
for(int i = 0; i < singleIssue.getLabels().size(); i++) {
|
||||||
|
|
||||||
String labelColor = singleIssue.getLabels().get(i).getColor();
|
String labelColor = singleIssue.getLabels().get(i).getColor();
|
||||||
@ -444,9 +457,15 @@ public class IssueDetailActivity extends BaseActivity {
|
|||||||
labelsLayout.setGravity(Gravity.START | Gravity.TOP);
|
labelsLayout.setGravity(Gravity.START | Gravity.TOP);
|
||||||
labelsView.setLayoutParams(params);
|
labelsView.setLayoutParams(params);
|
||||||
|
|
||||||
TextDrawable drawable = TextDrawable.builder().beginConfig().useFont(Typeface.DEFAULT).textColor(new ColorInverter().getContrastColor(color)).fontSize(30).width(LabelWidthCalculator.calculateLabelWidth(labelName, Typeface.DEFAULT, 30, 15)).height(50).endConfig().buildRoundRect(labelName, color, 10);
|
int height = AppUtil.getPixelsFromDensity(ctx, 25);
|
||||||
labelsView.setImageDrawable(drawable);
|
int textSize = AppUtil.getPixelsFromScaledDensity(ctx, 15);
|
||||||
|
|
||||||
|
TextDrawable drawable = TextDrawable.builder().beginConfig().useFont(Typeface.DEFAULT)
|
||||||
|
.textColor(new ColorInverter().getContrastColor(color)).fontSize(textSize)
|
||||||
|
.width(LabelWidthCalculator.calculateLabelWidth(labelName, Typeface.DEFAULT, textSize, AppUtil.getPixelsFromDensity(ctx, 10)))
|
||||||
|
.height(height).endConfig().buildRoundRect(labelName, color, AppUtil.getPixelsFromDensity(ctx, 5));
|
||||||
|
|
||||||
|
labelsView.setImageDrawable(drawable);
|
||||||
labelsLayout.addView(labelsView);
|
labelsLayout.addView(labelsView);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -461,7 +480,8 @@ public class IssueDetailActivity extends BaseActivity {
|
|||||||
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", new Locale(locale));
|
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", new Locale(locale));
|
||||||
String dueDate = formatter.format(singleIssue.getDue_date());
|
String dueDate = formatter.format(singleIssue.getDue_date());
|
||||||
issueDueDate.setText(dueDate);
|
issueDueDate.setText(dueDate);
|
||||||
issueDueDate.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(singleIssue.getDue_date()), ctx));
|
issueDueDate
|
||||||
|
.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(singleIssue.getDue_date()), ctx));
|
||||||
}
|
}
|
||||||
else if(timeFormat.equals("normal1")) {
|
else if(timeFormat.equals("normal1")) {
|
||||||
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy", new Locale(locale));
|
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy", new Locale(locale));
|
||||||
@ -481,7 +501,8 @@ public class IssueDetailActivity extends BaseActivity {
|
|||||||
edited = getString(R.string.colorfulBulletSpan) + getString(R.string.modifiedText);
|
edited = getString(R.string.colorfulBulletSpan) + getString(R.string.modifiedText);
|
||||||
issueModified.setVisibility(View.VISIBLE);
|
issueModified.setVisibility(View.VISIBLE);
|
||||||
issueModified.setText(edited);
|
issueModified.setText(edited);
|
||||||
issueModified.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(singleIssue.getUpdated_at()), ctx));
|
issueModified
|
||||||
|
.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(singleIssue.getUpdated_at()), ctx));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
issueModified.setVisibility(View.INVISIBLE);
|
issueModified.setVisibility(View.INVISIBLE);
|
||||||
@ -508,7 +529,8 @@ public class IssueDetailActivity extends BaseActivity {
|
|||||||
issueCreatedTime.setVisibility(View.VISIBLE);
|
issueCreatedTime.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
if(timeFormat.equals("pretty")) {
|
if(timeFormat.equals("pretty")) {
|
||||||
issueCreatedTime.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(singleIssue.getCreated_at()), ctx));
|
issueCreatedTime
|
||||||
|
.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(singleIssue.getCreated_at()), ctx));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(singleIssue.getMilestone() != null) {
|
if(singleIssue.getMilestone() != null) {
|
||||||
@ -519,10 +541,12 @@ public class IssueDetailActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(!singleIssue.getUser().getFull_name().equals("")) {
|
if(!singleIssue.getUser().getFull_name().equals("")) {
|
||||||
assigneeAvatar.setOnClickListener(new ClickListener(ctx.getResources().getString(R.string.issueCreator) + singleIssue.getUser().getFull_name(), ctx));
|
assigneeAvatar.setOnClickListener(
|
||||||
|
new ClickListener(ctx.getResources().getString(R.string.issueCreator) + singleIssue.getUser().getFull_name(), ctx));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
assigneeAvatar.setOnClickListener(new ClickListener(ctx.getResources().getString(R.string.issueCreator) + singleIssue.getUser().getLogin(), ctx));
|
assigneeAvatar.setOnClickListener(
|
||||||
|
new ClickListener(ctx.getResources().getString(R.string.issueCreator) + singleIssue.getUser().getLogin(), ctx));
|
||||||
}
|
}
|
||||||
|
|
||||||
progressBar.setVisibility(View.GONE);
|
progressBar.setVisibility(View.GONE);
|
||||||
@ -531,7 +555,10 @@ public class IssueDetailActivity extends BaseActivity {
|
|||||||
|
|
||||||
else if(response.code() == 401) {
|
else if(response.code() == 401) {
|
||||||
|
|
||||||
AlertDialogs.authorizationTokenRevokedDialog(ctx, getResources().getString(R.string.alertDialogTokenRevokedTitle), getResources().getString(R.string.alertDialogTokenRevokedMessage), getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton), getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
|
AlertDialogs.authorizationTokenRevokedDialog(ctx, getResources().getString(R.string.alertDialogTokenRevokedTitle),
|
||||||
|
getResources().getString(R.string.alertDialogTokenRevokedMessage),
|
||||||
|
getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton),
|
||||||
|
getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -547,7 +574,8 @@ public class IssueDetailActivity extends BaseActivity {
|
|||||||
|
|
||||||
if(new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.0")) {
|
if(new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.0")) {
|
||||||
|
|
||||||
Call<WatchInfo> call2 = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().checkIssueWatchStatus(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex);
|
Call<WatchInfo> call2 = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface()
|
||||||
|
.checkIssueWatchStatus(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex);
|
||||||
|
|
||||||
call2.enqueue(new Callback<WatchInfo>() {
|
call2.enqueue(new Callback<WatchInfo>() {
|
||||||
|
|
||||||
|
@ -21,16 +21,17 @@ import androidx.appcompat.app.AlertDialog;
|
|||||||
import com.tooltip.Tooltip;
|
import com.tooltip.Tooltip;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
|
import org.mian.gitnex.database.api.UserAccountsApi;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.NetworkObserver;
|
import org.mian.gitnex.helpers.NetworkObserver;
|
||||||
import org.mian.gitnex.helpers.PathsHelper;
|
import org.mian.gitnex.helpers.PathsHelper;
|
||||||
import org.mian.gitnex.helpers.SnackBar;
|
import org.mian.gitnex.helpers.SnackBar;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.UrlHelper;
|
import org.mian.gitnex.helpers.UrlHelper;
|
||||||
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 org.mian.gitnex.models.UserTokens;
|
import org.mian.gitnex.models.UserTokens;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -46,8 +47,9 @@ import retrofit2.Callback;
|
|||||||
|
|
||||||
public class LoginActivity extends BaseActivity {
|
public class LoginActivity extends BaseActivity {
|
||||||
|
|
||||||
private enum Protocol { HTTPS, HTTP }
|
private enum Protocol {HTTPS, HTTP}
|
||||||
private enum LoginType { BASIC, TOKEN }
|
|
||||||
|
private enum LoginType {BASIC, TOKEN}
|
||||||
|
|
||||||
private Context appCtx;
|
private Context appCtx;
|
||||||
private Context ctx = this;
|
private Context ctx = this;
|
||||||
@ -103,19 +105,16 @@ public class LoginActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onNothingSelected(AdapterView<?> parent) {}
|
public void onNothingSelected(AdapterView<?> parent) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
info_button.setOnClickListener(view -> new Tooltip.Builder(view)
|
info_button.setOnClickListener(
|
||||||
.setText(R.string.urlInfoTooltip)
|
view -> new Tooltip.Builder(view).setText(R.string.urlInfoTooltip).setTextColor(getResources().getColor(R.color.white))
|
||||||
.setTextColor(getResources().getColor(R.color.white))
|
.setBackgroundColor(getResources().getColor(R.color.tooltipBackground)).setCancelable(true).setDismissOnClick(true).setPadding(30)
|
||||||
.setBackgroundColor(getResources().getColor(R.color.tooltipBackground))
|
.setCornerRadius(R.dimen.tooltipCornor).setGravity(Gravity.BOTTOM).show());
|
||||||
.setCancelable(true)
|
|
||||||
.setDismissOnClick(true)
|
|
||||||
.setPadding(30)
|
|
||||||
.setCornerRadius(R.dimen.tooltipCornor)
|
|
||||||
.setGravity(Gravity.BOTTOM).show());
|
|
||||||
|
|
||||||
loginMethod.setOnCheckedChangeListener((group, checkedId) -> {
|
loginMethod.setOnCheckedChangeListener((group, checkedId) -> {
|
||||||
|
|
||||||
@ -170,16 +169,12 @@ public class LoginActivity extends BaseActivity {
|
|||||||
Protocol protocol = (Protocol) protocolSpinner.getSelectedItem();
|
Protocol protocol = (Protocol) protocolSpinner.getSelectedItem();
|
||||||
LoginType loginType = (loginMethod.getCheckedRadioButtonId() == R.id.loginUsernamePassword) ? LoginType.BASIC : LoginType.TOKEN;
|
LoginType loginType = (loginMethod.getCheckedRadioButtonId() == R.id.loginUsernamePassword) ? LoginType.BASIC : LoginType.TOKEN;
|
||||||
|
|
||||||
URI rawInstanceUrl = UrlBuilder.fromString(UrlHelper.fixScheme(instanceUrlET.getText().toString(), "http"))
|
URI rawInstanceUrl = UrlBuilder.fromString(UrlHelper.fixScheme(instanceUrlET.getText().toString(), "http")).toUri();
|
||||||
.toUri();
|
|
||||||
|
|
||||||
URI instanceUrlWithProtocol = UrlBuilder.fromUri(rawInstanceUrl)
|
URI instanceUrlWithProtocol = UrlBuilder.fromUri(rawInstanceUrl).withPath(PathsHelper.join(rawInstanceUrl.getPath()))
|
||||||
.withPath(PathsHelper.join(rawInstanceUrl.getPath()))
|
.withScheme(protocol.name().toLowerCase()).toUri();
|
||||||
.withScheme(protocol.name().toLowerCase())
|
|
||||||
.toUri();
|
|
||||||
|
|
||||||
URI instanceUrl = UrlBuilder.fromUri(instanceUrlWithProtocol)
|
URI instanceUrl = UrlBuilder.fromUri(instanceUrlWithProtocol).withPath(PathsHelper.join(instanceUrlWithProtocol.getPath(), "/api/v1/"))
|
||||||
.withPath(PathsHelper.join(instanceUrlWithProtocol.getPath(), "/api/v1/"))
|
|
||||||
.toUri();
|
.toUri();
|
||||||
|
|
||||||
tinyDB.putString("loginType", loginType.name().toLowerCase());
|
tinyDB.putString("loginType", loginType.name().toLowerCase());
|
||||||
@ -220,6 +215,14 @@ public class LoginActivity extends BaseActivity {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(loginUid.contains("@")) {
|
||||||
|
|
||||||
|
SnackBar.warning(ctx, layoutView, getResources().getString(R.string.userInvalidUserName));
|
||||||
|
enableProcessButton();
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if(loginPass.equals("")) {
|
if(loginPass.equals("")) {
|
||||||
|
|
||||||
SnackBar.warning(ctx, layoutView, getResources().getString(R.string.emptyFieldPassword));
|
SnackBar.warning(ctx, layoutView, getResources().getString(R.string.emptyFieldPassword));
|
||||||
@ -231,7 +234,7 @@ public class LoginActivity extends BaseActivity {
|
|||||||
int loginOTP = (otpCode.length() > 0) ? Integer.parseInt(otpCode.getText().toString().trim()) : 0;
|
int loginOTP = (otpCode.length() > 0) ? Integer.parseInt(otpCode.getText().toString().trim()) : 0;
|
||||||
tinyDB.putString("loginUid", loginUid);
|
tinyDB.putString("loginUid", loginUid);
|
||||||
|
|
||||||
versionCheck(instanceUrl.toString(), loginUid, loginPass, loginOTP, loginToken, 1);
|
versionCheck(instanceUrl.toString(), loginUid, loginPass, loginOTP, loginToken, loginType);
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -244,11 +247,12 @@ public class LoginActivity extends BaseActivity {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
versionCheck(instanceUrl.toString(), loginUid, loginPass, 123, loginToken, 2);
|
versionCheck(instanceUrl.toString(), loginUid, loginPass, 123, loginToken, loginType);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
}
|
||||||
|
catch(Exception e) {
|
||||||
|
|
||||||
Log.e("onFailure-login", e.toString());
|
Log.e("onFailure-login", e.toString());
|
||||||
SnackBar.error(ctx, layoutView, getResources().getString(R.string.malformedUrl));
|
SnackBar.error(ctx, layoutView, getResources().getString(R.string.malformedUrl));
|
||||||
@ -257,7 +261,8 @@ public class LoginActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void versionCheck(final String instanceUrl, final String loginUid, final String loginPass, final int loginOTP, final String loginToken, final int loginType) {
|
private void versionCheck(final String instanceUrl, final String loginUid, final String loginPass, final int loginOTP, final String loginToken,
|
||||||
|
final LoginType loginType) {
|
||||||
|
|
||||||
Call<GiteaVersion> callVersion;
|
Call<GiteaVersion> callVersion;
|
||||||
|
|
||||||
@ -269,8 +274,8 @@ public class LoginActivity extends BaseActivity {
|
|||||||
|
|
||||||
String credential = Credentials.basic(loginUid, loginPass, StandardCharsets.UTF_8);
|
String credential = Credentials.basic(loginUid, loginPass, StandardCharsets.UTF_8);
|
||||||
|
|
||||||
callVersion = (loginOTP != 0) ?
|
callVersion =
|
||||||
RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getGiteaVersionWithOTP(credential, loginOTP) :
|
(loginOTP != 0) ? RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getGiteaVersionWithOTP(credential, loginOTP) :
|
||||||
RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getGiteaVersionWithBasic(credential);
|
RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getGiteaVersionWithBasic(credential);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -290,7 +295,7 @@ public class LoginActivity extends BaseActivity {
|
|||||||
try {
|
try {
|
||||||
gitea_version = new Version(version.getVersion());
|
gitea_version = new Version(version.getVersion());
|
||||||
}
|
}
|
||||||
catch(Error e) {
|
catch(Exception e) {
|
||||||
|
|
||||||
SnackBar.error(ctx, layoutView, getResources().getString(R.string.versionUnknown));
|
SnackBar.error(ctx, layoutView, getResources().getString(R.string.versionUnknown));
|
||||||
enableProcessButton();
|
enableProcessButton();
|
||||||
@ -299,10 +304,8 @@ public class LoginActivity extends BaseActivity {
|
|||||||
|
|
||||||
if(gitea_version.less(getString(R.string.versionLow))) {
|
if(gitea_version.less(getString(R.string.versionLow))) {
|
||||||
|
|
||||||
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(ctx)
|
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(ctx).setTitle(getString(R.string.versionAlertDialogHeader))
|
||||||
.setTitle(getString(R.string.versionAlertDialogHeader))
|
.setMessage(getResources().getString(R.string.versionUnsupportedOld, version.getVersion())).setIcon(R.drawable.ic_warning)
|
||||||
.setMessage(getResources().getString(R.string.versionUnsupportedOld, version.getVersion()))
|
|
||||||
.setIcon(R.drawable.ic_warning)
|
|
||||||
.setCancelable(true);
|
.setCancelable(true);
|
||||||
|
|
||||||
alertDialogBuilder.setNegativeButton(getString(R.string.cancelButton), (dialog, which) -> {
|
alertDialogBuilder.setNegativeButton(getString(R.string.cancelButton), (dialog, which) -> {
|
||||||
@ -338,12 +341,15 @@ public class LoginActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void login(int loginType, String instanceUrl, String loginUid, String loginPass, int loginOTP, String loginToken) {
|
private void login(LoginType loginType, String instanceUrl, String loginUid, String loginPass, int loginOTP, String loginToken) {
|
||||||
|
|
||||||
if(loginType == 1) {
|
// ToDo: before store/create token: get UserInfo to check DB/AccountManager if there already exist a token
|
||||||
|
// the setup methods then can better handle all different cases
|
||||||
|
|
||||||
|
if(loginType == LoginType.BASIC) {
|
||||||
setup(instanceUrl, loginUid, loginPass, loginOTP);
|
setup(instanceUrl, loginUid, loginPass, loginOTP);
|
||||||
}
|
}
|
||||||
else if(loginType == 2) { // Token
|
else if(loginType == LoginType.TOKEN) { // Token
|
||||||
setupUsingExistingToken(instanceUrl, loginToken);
|
setupUsingExistingToken(instanceUrl, loginToken);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -360,9 +366,7 @@ public class LoginActivity extends BaseActivity {
|
|||||||
|
|
||||||
private void setupUsingExistingToken(String instanceUrl, final String loginToken) {
|
private void setupUsingExistingToken(String instanceUrl, final String loginToken) {
|
||||||
|
|
||||||
Call<UserInfo> call = RetrofitClient.getInstance(instanceUrl, ctx)
|
Call<UserInfo> call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getUserInfo("token " + loginToken);
|
||||||
.getApiInterface()
|
|
||||||
.getUserInfo("token " + loginToken);
|
|
||||||
|
|
||||||
call.enqueue(new Callback<UserInfo>() {
|
call.enqueue(new Callback<UserInfo>() {
|
||||||
|
|
||||||
@ -380,6 +384,15 @@ public class LoginActivity extends BaseActivity {
|
|||||||
tinyDB.putString("loginUid", userDetails.getLogin());
|
tinyDB.putString("loginUid", userDetails.getLogin());
|
||||||
tinyDB.putString("userLogin", userDetails.getUsername());
|
tinyDB.putString("userLogin", userDetails.getUsername());
|
||||||
|
|
||||||
|
// insert new account to db if does not exist
|
||||||
|
String accountName = userDetails.getUsername() + "@" + instanceUrl;
|
||||||
|
UserAccountsApi userAccountsApi = new UserAccountsApi(ctx);
|
||||||
|
int checkAccount = userAccountsApi.getCount(accountName);
|
||||||
|
|
||||||
|
if(checkAccount == 0) {
|
||||||
|
userAccountsApi.insertNewAccount(accountName, instanceUrl, userDetails.getUsername(), loginToken, "");
|
||||||
|
}
|
||||||
|
|
||||||
enableProcessButton();
|
enableProcessButton();
|
||||||
startActivity(new Intent(LoginActivity.this, MainActivity.class));
|
startActivity(new Intent(LoginActivity.this, MainActivity.class));
|
||||||
finish();
|
finish();
|
||||||
@ -413,19 +426,16 @@ public class LoginActivity extends BaseActivity {
|
|||||||
private void setup(final String instanceUrl, final String loginUid, final String loginPass, final int loginOTP) {
|
private void setup(final String instanceUrl, final String loginUid, final String loginPass, final int loginOTP) {
|
||||||
|
|
||||||
final String credential = Credentials.basic(loginUid, loginPass, StandardCharsets.UTF_8);
|
final String credential = Credentials.basic(loginUid, loginPass, StandardCharsets.UTF_8);
|
||||||
|
final String tokenName = "gitnex-app-" + device_id;
|
||||||
|
|
||||||
Call<List<UserTokens>> call;
|
Call<List<UserTokens>> call;
|
||||||
if(loginOTP != 0) {
|
if(loginOTP != 0) {
|
||||||
|
|
||||||
call = RetrofitClient.getInstance(instanceUrl, ctx)
|
call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getUserTokensWithOTP(credential, loginOTP, loginUid);
|
||||||
.getApiInterface()
|
|
||||||
.getUserTokensWithOTP(credential, loginOTP, loginUid);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
call = RetrofitClient.getInstance(instanceUrl, ctx)
|
call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getUserTokens(credential, loginUid);
|
||||||
.getApiInterface()
|
|
||||||
.getUserTokens(credential, loginUid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
call.enqueue(new Callback<List<UserTokens>>() {
|
call.enqueue(new Callback<List<UserTokens>>() {
|
||||||
@ -435,53 +445,92 @@ public class LoginActivity extends BaseActivity {
|
|||||||
|
|
||||||
List<UserTokens> userTokens = response.body();
|
List<UserTokens> userTokens = response.body();
|
||||||
|
|
||||||
AppUtil appUtil = new AppUtil();
|
|
||||||
|
|
||||||
if(response.code() == 200) {
|
if(response.code() == 200) {
|
||||||
|
|
||||||
assert userTokens != null;
|
assert userTokens != null;
|
||||||
boolean setTokenFlag = false;
|
for(UserTokens t : userTokens) {
|
||||||
|
if(t.getName().equals(tokenName)) {
|
||||||
|
|
||||||
if(userTokens.size() > 0) { // FIXME This is in need of a refactor, but i don't understand what the code is used for.
|
// this app had created an token on this instance before
|
||||||
|
// -> since it looks like GitNex forgot the secret we have to delete it first
|
||||||
|
|
||||||
if(userTokens.get(0).getToken_last_eight() != null) {
|
Call<Void> delcall;
|
||||||
|
if(loginOTP != 0) {
|
||||||
|
|
||||||
for(int i = 0; i < userTokens.size(); i++) {
|
delcall = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface()
|
||||||
|
.deleteTokenWithOTP(credential, loginOTP, loginUid, t.getId());
|
||||||
if(userTokens.get(i).getToken_last_eight().equals(tinyDB.getString(loginUid + "-token-last-eight"))) {
|
|
||||||
setTokenFlag = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
for(int i = 0; i < userTokens.size(); i++) {
|
delcall = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().deleteToken(credential, loginUid, t.getId());
|
||||||
|
}
|
||||||
|
delcall.enqueue(new Callback<Void>() {
|
||||||
|
|
||||||
if(userTokens.get(i).getSha1().equals(tinyDB.getString(loginUid + "-token"))) {
|
@Override
|
||||||
setTokenFlag = true;
|
public void onResponse(@NonNull Call<Void> delcall, @NonNull retrofit2.Response<Void> response) {
|
||||||
break;
|
|
||||||
}
|
if(response.code() == 204) {
|
||||||
|
|
||||||
|
setupToken(instanceUrl, loginUid, loginPass, loginOTP, tokenName);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
SnackBar.error(ctx, layoutView, getResources().getString(R.string.genericApiStatusError) + response.code());
|
||||||
|
enableProcessButton();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(tinyDB.getString(loginUid + "-token").isEmpty() || !setTokenFlag) {
|
@Override
|
||||||
|
public void onFailure(@NonNull Call<Void> delcall, @NonNull Throwable t) {
|
||||||
|
|
||||||
UserTokens createUserToken = new UserTokens("gitnex-app-" + device_id);
|
Log.e("onFailure-login", t.toString());
|
||||||
|
SnackBar.error(ctx, layoutView, getResources().getString(R.string.malformedJson));
|
||||||
|
enableProcessButton();
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setupToken(instanceUrl, loginUid, loginPass, loginOTP, tokenName);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
SnackBar.error(ctx, layoutView, getResources().getString(R.string.genericApiStatusError) + response.code());
|
||||||
|
enableProcessButton();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(@NonNull Call<List<UserTokens>> call, @NonNull Throwable t) {
|
||||||
|
|
||||||
|
Log.e("onFailure-login", t.toString());
|
||||||
|
SnackBar.error(ctx, layoutView, getResources().getString(R.string.malformedJson));
|
||||||
|
enableProcessButton();
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setupToken(final String instanceUrl, final String loginUid, final String loginPass, final int loginOTP, final String tokenName) {
|
||||||
|
|
||||||
|
final String credential = Credentials.basic(loginUid, loginPass, StandardCharsets.UTF_8);
|
||||||
|
|
||||||
|
UserTokens createUserToken = new UserTokens(tokenName);
|
||||||
Call<UserTokens> callCreateToken;
|
Call<UserTokens> callCreateToken;
|
||||||
|
|
||||||
if(loginOTP != 0) {
|
if(loginOTP != 0) {
|
||||||
|
|
||||||
callCreateToken = RetrofitClient.getInstance(instanceUrl, ctx)
|
callCreateToken = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface()
|
||||||
.getApiInterface()
|
|
||||||
.createNewTokenWithOTP(credential, loginOTP, loginUid, createUserToken);
|
.createNewTokenWithOTP(credential, loginOTP, loginUid, createUserToken);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
callCreateToken = RetrofitClient.getInstance(instanceUrl, ctx)
|
callCreateToken = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().createNewToken(credential, loginUid, createUserToken);
|
||||||
.getApiInterface()
|
|
||||||
.createNewToken(credential, loginUid, createUserToken);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
callCreateToken.enqueue(new Callback<UserTokens>() {
|
callCreateToken.enqueue(new Callback<UserTokens>() {
|
||||||
@ -496,8 +545,7 @@ public class LoginActivity extends BaseActivity {
|
|||||||
|
|
||||||
if(!newToken.getSha1().equals("")) {
|
if(!newToken.getSha1().equals("")) {
|
||||||
|
|
||||||
Call<UserInfo> call = RetrofitClient.getInstance(instanceUrl, ctx)
|
Call<UserInfo> call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface()
|
||||||
.getApiInterface()
|
|
||||||
.getUserInfo("token " + newToken.getSha1());
|
.getUserInfo("token " + newToken.getSha1());
|
||||||
|
|
||||||
call.enqueue(new Callback<UserInfo>() {
|
call.enqueue(new Callback<UserInfo>() {
|
||||||
@ -515,7 +563,17 @@ public class LoginActivity extends BaseActivity {
|
|||||||
tinyDB.putBoolean("loggedInMode", true);
|
tinyDB.putBoolean("loggedInMode", true);
|
||||||
tinyDB.putString("userLogin", userDetails.getUsername());
|
tinyDB.putString("userLogin", userDetails.getUsername());
|
||||||
tinyDB.putString(loginUid + "-token", newToken.getSha1());
|
tinyDB.putString(loginUid + "-token", newToken.getSha1());
|
||||||
tinyDB.putString(loginUid + "-token-last-eight", appUtil.getLastCharactersOfWord(newToken.getSha1(), 8));
|
tinyDB.putString(loginUid + "-token-last-eight", newToken.getToken_last_eight());
|
||||||
|
|
||||||
|
// insert new account to db if does not exist
|
||||||
|
String accountName = userDetails.getUsername() + "@" + instanceUrl;
|
||||||
|
UserAccountsApi userAccountsApi = new UserAccountsApi(ctx);
|
||||||
|
int checkAccount = userAccountsApi.getCount(accountName);
|
||||||
|
|
||||||
|
if(checkAccount == 0) {
|
||||||
|
userAccountsApi
|
||||||
|
.insertNewAccount(accountName, instanceUrl, userDetails.getUsername(), newToken.getSha1(), "");
|
||||||
|
}
|
||||||
|
|
||||||
startActivity(new Intent(LoginActivity.this, MainActivity.class));
|
startActivity(new Intent(LoginActivity.this, MainActivity.class));
|
||||||
finish();
|
finish();
|
||||||
@ -560,74 +618,7 @@ public class LoginActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
|
|
||||||
String instanceToken = "token " + tinyDB.getString(loginUid + "-token");
|
|
||||||
|
|
||||||
Call<UserInfo> callGetUsername = RetrofitClient.getInstance(instanceUrl, ctx)
|
|
||||||
.getApiInterface()
|
|
||||||
.getUserInfo(instanceToken);
|
|
||||||
|
|
||||||
callGetUsername.enqueue(new Callback<UserInfo>() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResponse(@NonNull Call<UserInfo> call, @NonNull retrofit2.Response<UserInfo> response) {
|
|
||||||
|
|
||||||
UserInfo userDetails = response.body();
|
|
||||||
|
|
||||||
switch(response.code()) {
|
|
||||||
|
|
||||||
case 200:
|
|
||||||
assert userDetails != null;
|
|
||||||
tinyDB.putString("userLogin", userDetails.getUsername());
|
|
||||||
tinyDB.putBoolean("loggedInMode", true);
|
|
||||||
startActivity(new Intent(LoginActivity.this, MainActivity.class));
|
|
||||||
finish();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 401:
|
|
||||||
SnackBar.error(ctx, layoutView, getResources().getString(R.string.unauthorizedApiError));
|
|
||||||
enableProcessButton();
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
SnackBar.error(ctx, layoutView, getResources().getString(R.string.genericApiStatusError) + response.code());
|
|
||||||
enableProcessButton();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFailure(@NonNull Call<UserInfo> call, @NonNull Throwable t) {
|
|
||||||
|
|
||||||
Log.e("onFailure", t.toString());
|
|
||||||
SnackBar.error(ctx, layoutView, getResources().getString(R.string.genericError));
|
|
||||||
enableProcessButton();
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
|
|
||||||
SnackBar.error(ctx, layoutView, getResources().getString(R.string.genericApiStatusError) + response.code());
|
|
||||||
enableProcessButton();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFailure(@NonNull Call<List<UserTokens>> call, @NonNull Throwable t) {
|
|
||||||
|
|
||||||
Log.e("onFailure-login", t.toString());
|
|
||||||
SnackBar.error(ctx, layoutView, getResources().getString(R.string.malformedJson));
|
|
||||||
enableProcessButton();
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void loadDefaults() {
|
private void loadDefaults() {
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ import android.widget.ImageView;
|
|||||||
import android.widget.TextView;
|
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.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;
|
||||||
@ -26,25 +27,32 @@ import com.google.android.material.navigation.NavigationView;
|
|||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
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.DraftsFragment;
|
||||||
import org.mian.gitnex.fragments.ExploreRepositoriesFragment;
|
import org.mian.gitnex.fragments.ExploreRepositoriesFragment;
|
||||||
import org.mian.gitnex.fragments.MyRepositoriesFragment;
|
import org.mian.gitnex.fragments.MyRepositoriesFragment;
|
||||||
|
import org.mian.gitnex.fragments.NotificationsFragment;
|
||||||
import org.mian.gitnex.fragments.OrganizationsFragment;
|
import org.mian.gitnex.fragments.OrganizationsFragment;
|
||||||
import org.mian.gitnex.fragments.ProfileFragment;
|
import org.mian.gitnex.fragments.ProfileFragment;
|
||||||
import org.mian.gitnex.fragments.RepositoriesFragment;
|
import org.mian.gitnex.fragments.RepositoriesFragment;
|
||||||
import org.mian.gitnex.fragments.SettingsFragment;
|
import org.mian.gitnex.fragments.SettingsFragment;
|
||||||
import org.mian.gitnex.fragments.StarredRepositoriesFragment;
|
import org.mian.gitnex.fragments.StarredRepositoriesFragment;
|
||||||
|
import org.mian.gitnex.fragments.UserAccountsFragment;
|
||||||
import org.mian.gitnex.helpers.AlertDialogs;
|
import org.mian.gitnex.helpers.AlertDialogs;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
import org.mian.gitnex.helpers.ChangeLog;
|
import org.mian.gitnex.helpers.ChangeLog;
|
||||||
import org.mian.gitnex.helpers.ColorInverter;
|
import org.mian.gitnex.helpers.ColorInverter;
|
||||||
import org.mian.gitnex.helpers.RoundedTransformation;
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
||||||
|
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.models.GiteaVersion;
|
import org.mian.gitnex.models.GiteaVersion;
|
||||||
import org.mian.gitnex.models.UserInfo;
|
import org.mian.gitnex.models.UserInfo;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
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;
|
||||||
@ -55,7 +63,7 @@ import retrofit2.Callback;
|
|||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class MainActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener {
|
public class MainActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener, BottomSheetDraftsFragment.BottomSheetListener {
|
||||||
|
|
||||||
private DrawerLayout drawer;
|
private DrawerLayout drawer;
|
||||||
private BlurView blurView;
|
private BlurView blurView;
|
||||||
@ -83,7 +91,9 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
|||||||
|
|
||||||
final TinyDB tinyDb = new TinyDB(appCtx);
|
final TinyDB tinyDb = new TinyDB(appCtx);
|
||||||
tinyDb.putBoolean("noConnection", false);
|
tinyDb.putBoolean("noConnection", false);
|
||||||
//userAvatar = findViewById(R.id.userAvatar);
|
|
||||||
|
Intent mainIntent = getIntent();
|
||||||
|
String launchFragment = mainIntent.getStringExtra("launchFragment");
|
||||||
|
|
||||||
final String instanceUrl = tinyDb.getString("instanceUrl");
|
final String instanceUrl = tinyDb.getString("instanceUrl");
|
||||||
final String loginUid = tinyDb.getString("loginUid");
|
final String loginUid = tinyDb.getString("loginUid");
|
||||||
@ -113,6 +123,9 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String accountName = loginUid + "@" + instanceUrl;
|
||||||
|
getAccountData(accountName);
|
||||||
|
|
||||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||||
toolbarTitle = toolbar.findViewById(R.id.toolbar_title);
|
toolbarTitle = toolbar.findViewById(R.id.toolbar_title);
|
||||||
|
|
||||||
@ -153,15 +166,24 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
|||||||
else if(fragmentById instanceof ExploreRepositoriesFragment) {
|
else if(fragmentById instanceof ExploreRepositoriesFragment) {
|
||||||
toolbarTitle.setText(getResources().getString(R.string.pageTitleExplore));
|
toolbarTitle.setText(getResources().getString(R.string.pageTitleExplore));
|
||||||
}
|
}
|
||||||
|
else if(fragmentById instanceof NotificationsFragment) {
|
||||||
|
toolbarTitle.setText(R.string.pageTitleNotifications);
|
||||||
|
}
|
||||||
else if(fragmentById instanceof ProfileFragment) {
|
else if(fragmentById instanceof ProfileFragment) {
|
||||||
toolbarTitle.setText(getResources().getString(R.string.pageTitleProfile));
|
toolbarTitle.setText(getResources().getString(R.string.pageTitleProfile));
|
||||||
}
|
}
|
||||||
else if(fragmentById instanceof AboutFragment) {
|
else if(fragmentById instanceof AboutFragment) {
|
||||||
toolbarTitle.setText(getResources().getString(R.string.pageTitleAbout));
|
toolbarTitle.setText(getResources().getString(R.string.pageTitleAbout));
|
||||||
}
|
}
|
||||||
|
else if(fragmentById instanceof DraftsFragment) {
|
||||||
|
toolbarTitle.setText(getResources().getString(R.string.titleDrafts));
|
||||||
|
}
|
||||||
else if(fragmentById instanceof AdministrationFragment) {
|
else if(fragmentById instanceof AdministrationFragment) {
|
||||||
toolbarTitle.setText(getResources().getString(R.string.pageTitleAdministration));
|
toolbarTitle.setText(getResources().getString(R.string.pageTitleAdministration));
|
||||||
}
|
}
|
||||||
|
else if(fragmentById instanceof UserAccountsFragment) {
|
||||||
|
toolbarTitle.setText(getResources().getString(R.string.pageTitleUserAccounts));
|
||||||
|
}
|
||||||
|
|
||||||
drawer = findViewById(R.id.drawer_layout);
|
drawer = findViewById(R.id.drawer_layout);
|
||||||
NavigationView navigationView = findViewById(R.id.nav_view);
|
NavigationView navigationView = findViewById(R.id.nav_view);
|
||||||
@ -169,7 +191,6 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
|||||||
final View hView = navigationView.getHeaderView(0);
|
final View hView = navigationView.getHeaderView(0);
|
||||||
|
|
||||||
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
|
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
|
||||||
toggle.getDrawerArrowDrawable().setColor(getResources().getColor(R.color.darkGreen));
|
|
||||||
|
|
||||||
drawer.addDrawerListener(toggle);
|
drawer.addDrawerListener(toggle);
|
||||||
drawer.addDrawerListener(new DrawerLayout.DrawerListener() {
|
drawer.addDrawerListener(new DrawerLayout.DrawerListener() {
|
||||||
@ -196,7 +217,10 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
|||||||
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_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);
|
||||||
@ -261,7 +285,37 @@ 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);
|
||||||
|
|
||||||
|
if(launchFragment != null) {
|
||||||
|
|
||||||
|
mainIntent.removeExtra("launchFragment");
|
||||||
|
|
||||||
|
switch(launchFragment) {
|
||||||
|
|
||||||
|
case "drafts":
|
||||||
|
toolbarTitle.setText(getResources().getString(R.string.titleDrafts));
|
||||||
|
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new DraftsFragment()).commit();
|
||||||
|
navigationView.setCheckedItem(R.id.nav_comments_draft);
|
||||||
|
return;
|
||||||
|
|
||||||
|
case "notifications":
|
||||||
|
toolbarTitle.setText(getResources().getString(R.string.pageTitleNotifications));
|
||||||
|
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new NotificationsFragment()).commit();
|
||||||
|
navigationView.setCheckedItem(R.id.nav_notifications);
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(savedInstanceState == null) {
|
if(savedInstanceState == null) {
|
||||||
|
|
||||||
@ -291,6 +345,18 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
|||||||
navigationView.setCheckedItem(R.id.nav_profile);
|
navigationView.setCheckedItem(R.id.nav_profile);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 5:
|
||||||
|
toolbarTitle.setText(getResources().getString(R.string.pageTitleExplore));
|
||||||
|
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ExploreRepositoriesFragment()).commit();
|
||||||
|
navigationView.setCheckedItem(R.id.nav_explore);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 6:
|
||||||
|
toolbarTitle.setText(getResources().getString(R.string.titleDrafts));
|
||||||
|
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new DraftsFragment()).commit();
|
||||||
|
navigationView.setCheckedItem(R.id.nav_comments_draft);
|
||||||
|
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();
|
||||||
@ -298,7 +364,6 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!connToInternet) {
|
if(!connToInternet) {
|
||||||
@ -320,25 +385,75 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
|||||||
|
|
||||||
// Changelog popup
|
// Changelog popup
|
||||||
int versionCode = 0;
|
int versionCode = 0;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
PackageInfo packageInfo = appCtx.getPackageManager().getPackageInfo(appCtx.getPackageName(), 0);
|
PackageInfo packageInfo = appCtx.getPackageManager().getPackageInfo(appCtx.getPackageName(), 0);
|
||||||
versionCode = packageInfo.versionCode;
|
versionCode = packageInfo.versionCode;
|
||||||
}
|
}
|
||||||
catch(PackageManager.NameNotFoundException e) {
|
catch(PackageManager.NameNotFoundException e) {
|
||||||
|
|
||||||
Log.e("changelogDialog", Objects.requireNonNull(e.getMessage()));
|
Log.e("changelogDialog", Objects.requireNonNull(e.getMessage()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(versionCode > tinyDb.getInt("versionCode")) {
|
if(versionCode > tinyDb.getInt("versionCode")) {
|
||||||
|
|
||||||
tinyDb.putInt("versionCode", versionCode);
|
tinyDb.putInt("versionCode", versionCode);
|
||||||
tinyDb.putBoolean("versionFlag", true);
|
tinyDb.putBoolean("versionFlag", true);
|
||||||
|
|
||||||
ChangeLog changelogDialog = new ChangeLog(this);
|
ChangeLog changelogDialog = new ChangeLog(this);
|
||||||
changelogDialog.showDialog();
|
changelogDialog.showDialog();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setActionBarTitle(@NonNull String title) {
|
@Override
|
||||||
|
public void onButtonClicked(String text) {
|
||||||
|
|
||||||
Objects.requireNonNull(getSupportActionBar()).setTitle(title);
|
TinyDB tinyDb = new TinyDB(ctx);
|
||||||
|
int currentActiveAccountId = tinyDb.getInt("currentActiveAccountId");
|
||||||
|
|
||||||
|
if("deleteDrafts".equals(text)) {
|
||||||
|
|
||||||
|
if(currentActiveAccountId > 0) {
|
||||||
|
|
||||||
|
FragmentManager fm = getSupportFragmentManager();
|
||||||
|
DraftsFragment frag = (DraftsFragment) fm.findFragmentById(R.id.fragment_container);
|
||||||
|
|
||||||
|
if(frag != null) {
|
||||||
|
|
||||||
|
new AlertDialog.Builder(ctx).setTitle(R.string.deleteAllDrafts).setIcon(R.drawable.ic_delete).setCancelable(false).setMessage(R.string.deleteAllDraftsDialogMessage).setPositiveButton(R.string.menuDeleteText, (dialog, which) -> {
|
||||||
|
|
||||||
|
frag.deleteAllDrafts(currentActiveAccountId);
|
||||||
|
dialog.dismiss();
|
||||||
|
|
||||||
|
}).setNegativeButton(R.string.cancelButton, (dialog, which) -> dialog.dismiss()).show();
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Toasty.error(ctx, getResources().getString(R.string.genericError));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Toasty.error(ctx, getResources().getString(R.string.genericError));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getAccountData(String accountName) {
|
||||||
|
|
||||||
|
UserAccountsApi accountData = new UserAccountsApi(ctx);
|
||||||
|
UserAccount data = accountData.getAccountData(accountName);
|
||||||
|
|
||||||
|
if(data != null) {
|
||||||
|
TinyDB tinyDb = new TinyDB(ctx.getApplicationContext());
|
||||||
|
tinyDb.putInt("currentActiveAccountId", data.getAccountId());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
AlertDialogs.forceLogoutDialog(ctx, getResources().getString(R.string.forceLogoutDialogHeader), getResources().getString(R.string.forceLogoutDialogDescription), getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -407,6 +522,16 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
|||||||
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ExploreRepositoriesFragment()).commit();
|
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ExploreRepositoriesFragment()).commit();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case R.id.nav_notifications:
|
||||||
|
toolbarTitle.setText(R.string.pageTitleNotifications);
|
||||||
|
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new NotificationsFragment()).commit();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case R.id.nav_comments_draft:
|
||||||
|
toolbarTitle.setText(getResources().getString(R.string.titleDrafts));
|
||||||
|
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new DraftsFragment()).commit();
|
||||||
|
break;
|
||||||
|
|
||||||
case R.id.nav_administration:
|
case R.id.nav_administration:
|
||||||
toolbarTitle.setText(getResources().getString(R.string.pageTitleAdministration));
|
toolbarTitle.setText(getResources().getString(R.string.pageTitleAdministration));
|
||||||
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new AdministrationFragment()).commit();
|
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new AdministrationFragment()).commit();
|
||||||
@ -440,6 +565,21 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
|
||||||
|
int id = item.getItemId();
|
||||||
|
|
||||||
|
if(id == R.id.genericMenu) {
|
||||||
|
BottomSheetDraftsFragment bottomSheet = new BottomSheetDraftsFragment();
|
||||||
|
bottomSheet.show(getSupportFragmentManager(), "draftsBottomSheet");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private void giteaVersion(final String instanceUrl) {
|
private void giteaVersion(final String instanceUrl) {
|
||||||
|
|
||||||
final TinyDB tinyDb = new TinyDB(appCtx);
|
final TinyDB tinyDb = new TinyDB(appCtx);
|
||||||
@ -461,14 +601,12 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
|||||||
tinyDb.putString("giteaVersion", version.getVersion());
|
tinyDb.putString("giteaVersion", version.getVersion());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(@NonNull Call<GiteaVersion> callVersion, @NonNull Throwable t) {
|
public void onFailure(@NonNull Call<GiteaVersion> callVersion, @NonNull Throwable t) {
|
||||||
|
|
||||||
Log.e("onFailure-version", t.toString());
|
Log.e("onFailure-version", t.toString());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -16,14 +16,14 @@ import org.mian.gitnex.R;
|
|||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.databinding.ActivityMergePullRequestBinding;
|
import org.mian.gitnex.databinding.ActivityMergePullRequestBinding;
|
||||||
import org.mian.gitnex.helpers.AlertDialogs;
|
import org.mian.gitnex.helpers.AlertDialogs;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
|
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 org.mian.gitnex.models.Collaborators;
|
import org.mian.gitnex.models.Collaborators;
|
||||||
import org.mian.gitnex.models.MergePullRequest;
|
import org.mian.gitnex.models.MergePullRequest;
|
||||||
import org.mian.gitnex.models.MergePullRequestSpinner;
|
import org.mian.gitnex.models.MergePullRequestSpinner;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import okhttp3.ResponseBody;
|
import okhttp3.ResponseBody;
|
||||||
|
@ -7,8 +7,8 @@ import android.os.Bundle;
|
|||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.helpers.PathsHelper;
|
import org.mian.gitnex.helpers.PathsHelper;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import io.mikael.urlbuilder.UrlBuilder;
|
import io.mikael.urlbuilder.UrlBuilder;
|
||||||
|
@ -1,12 +1,5 @@
|
|||||||
package org.mian.gitnex.activities;
|
package org.mian.gitnex.activities;
|
||||||
|
|
||||||
import com.google.android.material.tabs.TabLayout;
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.appcompat.widget.Toolbar;
|
|
||||||
import androidx.fragment.app.Fragment;
|
|
||||||
import androidx.fragment.app.FragmentManager;
|
|
||||||
import androidx.fragment.app.FragmentPagerAdapter;
|
|
||||||
import androidx.viewpager.widget.ViewPager;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.Typeface;
|
import android.graphics.Typeface;
|
||||||
@ -17,13 +10,20 @@ import android.view.MenuItem;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.appcompat.widget.Toolbar;
|
||||||
|
import androidx.fragment.app.Fragment;
|
||||||
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
import androidx.fragment.app.FragmentPagerAdapter;
|
||||||
|
import androidx.viewpager.widget.ViewPager;
|
||||||
|
import com.google.android.material.tabs.TabLayout;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.fragments.MembersByOrgFragment;
|
|
||||||
import org.mian.gitnex.fragments.BottomSheetOrganizationFragment;
|
import org.mian.gitnex.fragments.BottomSheetOrganizationFragment;
|
||||||
|
import org.mian.gitnex.fragments.MembersByOrgFragment;
|
||||||
import org.mian.gitnex.fragments.OrganizationInfoFragment;
|
import org.mian.gitnex.fragments.OrganizationInfoFragment;
|
||||||
import org.mian.gitnex.fragments.RepositoriesByOrgFragment;
|
import org.mian.gitnex.fragments.RepositoriesByOrgFragment;
|
||||||
import org.mian.gitnex.fragments.TeamsByOrgFragment;
|
import org.mian.gitnex.fragments.TeamsByOrgFragment;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -16,7 +16,7 @@ import org.mian.gitnex.R;
|
|||||||
import org.mian.gitnex.adapters.TeamMembersByOrgAdapter;
|
import org.mian.gitnex.adapters.TeamMembersByOrgAdapter;
|
||||||
import org.mian.gitnex.fragments.BottomSheetOrganizationTeamsFragment;
|
import org.mian.gitnex.fragments.BottomSheetOrganizationTeamsFragment;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.viewmodels.TeamMembersByOrgViewModel;
|
import org.mian.gitnex.viewmodels.TeamMembersByOrgViewModel;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
package org.mian.gitnex.activities;
|
package org.mian.gitnex.activities;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import retrofit2.Call;
|
|
||||||
import retrofit2.Callback;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.drawable.GradientDrawable;
|
import android.graphics.drawable.GradientDrawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@ -13,18 +10,21 @@ import android.view.inputmethod.InputMethodManager;
|
|||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.helpers.AlertDialogs;
|
import org.mian.gitnex.helpers.AlertDialogs;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.models.AddEmail;
|
import org.mian.gitnex.models.AddEmail;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
|
@ -1,33 +1,42 @@
|
|||||||
package org.mian.gitnex.activities;
|
package org.mian.gitnex.activities;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import retrofit2.Call;
|
|
||||||
import retrofit2.Callback;
|
|
||||||
import retrofit2.Response;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
import android.graphics.drawable.GradientDrawable;
|
import android.graphics.drawable.GradientDrawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.text.Editable;
|
||||||
|
import android.text.TextWatcher;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuInflater;
|
||||||
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import com.hendraanggrian.appcompat.socialview.Mention;
|
import com.hendraanggrian.appcompat.socialview.Mention;
|
||||||
import com.hendraanggrian.appcompat.widget.MentionArrayAdapter;
|
import com.hendraanggrian.appcompat.widget.MentionArrayAdapter;
|
||||||
import com.hendraanggrian.appcompat.widget.SocialAutoCompleteTextView;
|
import com.hendraanggrian.appcompat.widget.SocialAutoCompleteTextView;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.actions.IssueActions;
|
import org.mian.gitnex.actions.IssueActions;
|
||||||
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.AppUtil;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
|
import org.mian.gitnex.helpers.StaticGlobalVariables;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
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 org.mian.gitnex.util.AppUtil;
|
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
import retrofit2.Response;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
@ -41,9 +50,12 @@ public class ReplyToIssueActivity extends BaseActivity {
|
|||||||
final Context ctx = this;
|
final Context ctx = this;
|
||||||
private Context appCtx;
|
private Context appCtx;
|
||||||
|
|
||||||
|
private TextView draftSaved;
|
||||||
private SocialAutoCompleteTextView addComment;
|
private SocialAutoCompleteTextView addComment;
|
||||||
private ArrayAdapter<Mention> defaultMentionAdapter;
|
private ArrayAdapter<Mention> defaultMentionAdapter;
|
||||||
private Button replyButton;
|
private Button replyButton;
|
||||||
|
private String TAG = StaticGlobalVariables.replyToIssueActivity;
|
||||||
|
private long draftId;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getLayoutResourceId(){
|
protected int getLayoutResourceId(){
|
||||||
@ -55,12 +67,15 @@ public class ReplyToIssueActivity extends BaseActivity {
|
|||||||
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
appCtx = getApplicationContext();
|
appCtx = getApplicationContext();
|
||||||
|
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||||
|
setSupportActionBar(toolbar);
|
||||||
|
|
||||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
|
||||||
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
|
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
|
||||||
TinyDB tinyDb = new TinyDB(appCtx);
|
TinyDB tinyDb = new TinyDB(appCtx);
|
||||||
|
|
||||||
|
draftSaved = findViewById(R.id.draftSaved);
|
||||||
addComment = findViewById(R.id.addComment);
|
addComment = findViewById(R.id.addComment);
|
||||||
addComment.setShowSoftInputOnFocus(true);
|
addComment.setShowSoftInputOnFocus(true);
|
||||||
|
|
||||||
@ -95,6 +110,12 @@ public class ReplyToIssueActivity extends BaseActivity {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(getIntent().getStringExtra("draftTitle") != null) {
|
||||||
|
|
||||||
|
toolbar_title.setText(getIntent().getStringExtra("draftTitle"));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if(getIntent().getStringExtra("commentAction") != null && getIntent().getStringExtra("commentAction").equals("edit")) {
|
if(getIntent().getStringExtra("commentAction") != null && getIntent().getStringExtra("commentAction").equals("edit")) {
|
||||||
|
|
||||||
final String commentId = getIntent().getStringExtra("commentId");
|
final String commentId = getIntent().getStringExtra("commentId");
|
||||||
@ -102,20 +123,62 @@ public class ReplyToIssueActivity extends BaseActivity {
|
|||||||
toolbar_title.setText(getResources().getString(R.string.editCommentTitle));
|
toolbar_title.setText(getResources().getString(R.string.editCommentTitle));
|
||||||
replyButton.setText(getResources().getString(R.string.editCommentButtonText));
|
replyButton.setText(getResources().getString(R.string.editCommentButtonText));
|
||||||
|
|
||||||
|
addComment.addTextChangedListener(new TextWatcher() {
|
||||||
|
|
||||||
|
public void afterTextChanged(Editable s) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||||
|
|
||||||
|
saveDraft(addComment.getText().toString());
|
||||||
|
draftSaved.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
replyButton.setOnClickListener(v -> {
|
replyButton.setOnClickListener(v -> {
|
||||||
|
|
||||||
disableProcessButton();
|
disableProcessButton();
|
||||||
|
assert commentId != null;
|
||||||
IssueActions.editIssueComment(ctx, Integer.parseInt(commentId), addComment.getText().toString());
|
IssueActions.editIssueComment(ctx, Integer.parseInt(commentId), addComment.getText().toString());
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
addComment.addTextChangedListener(new TextWatcher() {
|
||||||
|
|
||||||
|
public void afterTextChanged(Editable s) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||||
|
|
||||||
|
saveDraft(addComment.getText().toString());
|
||||||
|
draftSaved.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
if(!connToInternet) {
|
if(!connToInternet) {
|
||||||
|
|
||||||
disableProcessButton();
|
disableProcessButton();
|
||||||
|
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
replyButton.setOnClickListener(replyToIssue);
|
replyButton.setOnClickListener(replyToIssue);
|
||||||
|
|
||||||
@ -123,6 +186,27 @@ public class ReplyToIssueActivity extends BaseActivity {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void saveDraft(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);
|
||||||
|
|
||||||
|
int countDraft = draftsApi.checkDraft(issueNumber, repositoryId);
|
||||||
|
|
||||||
|
if(countDraft == 0) {
|
||||||
|
draftId = draftsApi.insertDraft(repositoryId, currentActiveAccountId, issueNumber, draftText, StaticGlobalVariables.draftTypeComment);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DraftsApi.updateDraftByIssueIdAsyncTask(draftText, issueNumber, repositoryId);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public void loadCollaboratorsList() {
|
public void loadCollaboratorsList() {
|
||||||
|
|
||||||
final TinyDB tinyDb = new TinyDB(appCtx);
|
final TinyDB tinyDb = new TinyDB(appCtx);
|
||||||
@ -149,17 +233,17 @@ public class ReplyToIssueActivity extends BaseActivity {
|
|||||||
|
|
||||||
assert response.body() != null;
|
assert response.body() != null;
|
||||||
String fullName = "";
|
String fullName = "";
|
||||||
for (int i = 0; i < response.body().size(); i++) {
|
for(int i = 0; i < response.body().size(); i++) {
|
||||||
if(!response.body().get(i).getFull_name().equals("")) {
|
if(!response.body().get(i).getFull_name().equals("")) {
|
||||||
fullName = response.body().get(i).getFull_name();
|
fullName = response.body().get(i).getFull_name();
|
||||||
}
|
}
|
||||||
defaultMentionAdapter.add(
|
defaultMentionAdapter.add(new Mention(response.body().get(i).getUsername(), fullName, response.body().get(i).getAvatar_url()));
|
||||||
new Mention(response.body().get(i).getUsername(), fullName, response.body().get(i).getAvatar_url()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
Log.i("onResponse", String.valueOf(response.code()));
|
Log.i(TAG, String.valueOf(response.code()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,26 +251,19 @@ public class ReplyToIssueActivity extends BaseActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(@NonNull Call<List<Collaborators>> call, @NonNull Throwable t) {
|
public void onFailure(@NonNull Call<List<Collaborators>> call, @NonNull Throwable t) {
|
||||||
Log.i("onFailure", t.getMessage());
|
|
||||||
|
Log.e(TAG, t.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initCloseListener() {
|
private void initCloseListener() {
|
||||||
onClickListener = new View.OnClickListener() {
|
|
||||||
@Override
|
onClickListener = view -> finish();
|
||||||
public void onClick(View view) {
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private View.OnClickListener replyToIssue = new View.OnClickListener() {
|
private View.OnClickListener replyToIssue = v -> processNewCommentReply();
|
||||||
public void onClick(View v) {
|
|
||||||
processNewCommentReply();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private void processNewCommentReply() {
|
private void processNewCommentReply() {
|
||||||
|
|
||||||
@ -245,6 +322,18 @@ public class ReplyToIssueActivity extends BaseActivity {
|
|||||||
tinyDb.putBoolean("commentPosted", true);
|
tinyDb.putBoolean("commentPosted", true);
|
||||||
tinyDb.putBoolean("resumeIssues", true);
|
tinyDb.putBoolean("resumeIssues", true);
|
||||||
tinyDb.putBoolean("resumePullRequests", true);
|
tinyDb.putBoolean("resumePullRequests", true);
|
||||||
|
|
||||||
|
// delete draft comment
|
||||||
|
if(tinyDb.getBoolean("draftsCommentsDeletionEnabled")) {
|
||||||
|
|
||||||
|
int repositoryId = (int) tinyDb.getLong("repositoryId", 0);
|
||||||
|
int issueNumber = Integer.parseInt(tinyDb.getString("issueNumber"));
|
||||||
|
|
||||||
|
DraftsApi draftsApi = new DraftsApi(appCtx);
|
||||||
|
draftId = draftsApi.getDraftIdAsync(issueNumber, repositoryId);
|
||||||
|
draftsApi.deleteSingleDraft((int) draftId);
|
||||||
|
}
|
||||||
|
|
||||||
finish();
|
finish();
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -268,18 +357,48 @@ public class ReplyToIssueActivity extends BaseActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(@NonNull Call<Issues> call, @NonNull Throwable t) {
|
public void onFailure(@NonNull Call<Issues> call, @NonNull Throwable t) {
|
||||||
Log.e("onFailure", t.toString());
|
|
||||||
|
Log.e(TAG, t.toString());
|
||||||
enableProcessButton();
|
enableProcessButton();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
|
||||||
|
MenuInflater inflater = getMenuInflater();
|
||||||
|
inflater.inflate(R.menu.reply_to_issue, menu);
|
||||||
|
|
||||||
|
return super.onCreateOptionsMenu(menu);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
|
||||||
|
switch(item.getItemId()) {
|
||||||
|
|
||||||
|
case R.id.replyToIssueMenu:
|
||||||
|
Intent fragmentIntent = new Intent(ReplyToIssueActivity.this, MainActivity.class);
|
||||||
|
fragmentIntent.putExtra("launchFragment", "drafts");
|
||||||
|
ReplyToIssueActivity.this.startActivity(fragmentIntent);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private void disableProcessButton() {
|
private void disableProcessButton() {
|
||||||
|
|
||||||
replyButton.setEnabled(false);
|
replyButton.setEnabled(false);
|
||||||
GradientDrawable shape = new GradientDrawable();
|
GradientDrawable shape = new GradientDrawable();
|
||||||
shape.setCornerRadius( 8 );
|
shape.setCornerRadius(8);
|
||||||
shape.setColor(getResources().getColor(R.color.hintColor));
|
shape.setColor(getResources().getColor(R.color.hintColor));
|
||||||
replyButton.setBackground(shape);
|
replyButton.setBackground(shape);
|
||||||
|
|
||||||
@ -289,7 +408,7 @@ public class ReplyToIssueActivity extends BaseActivity {
|
|||||||
|
|
||||||
replyButton.setEnabled(true);
|
replyButton.setEnabled(true);
|
||||||
GradientDrawable shape = new GradientDrawable();
|
GradientDrawable shape = new GradientDrawable();
|
||||||
shape.setCornerRadius( 8 );
|
shape.setCornerRadius(8);
|
||||||
shape.setColor(getResources().getColor(R.color.btnBackground));
|
shape.setColor(getResources().getColor(R.color.btnBackground));
|
||||||
replyButton.setBackground(shape);
|
replyButton.setBackground(shape);
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ package org.mian.gitnex.activities;
|
|||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.ColorStateList;
|
import android.content.res.ColorStateList;
|
||||||
import android.graphics.Typeface;
|
import android.graphics.Typeface;
|
||||||
@ -16,6 +17,7 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
@ -39,13 +41,17 @@ import org.mian.gitnex.fragments.PullRequestsFragment;
|
|||||||
import org.mian.gitnex.fragments.ReleasesFragment;
|
import org.mian.gitnex.fragments.ReleasesFragment;
|
||||||
import org.mian.gitnex.fragments.RepoInfoFragment;
|
import org.mian.gitnex.fragments.RepoInfoFragment;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Version;
|
import org.mian.gitnex.helpers.Version;
|
||||||
|
import org.mian.gitnex.models.Branches;
|
||||||
import org.mian.gitnex.models.UserRepositories;
|
import org.mian.gitnex.models.UserRepositories;
|
||||||
import org.mian.gitnex.models.WatchInfo;
|
import org.mian.gitnex.models.WatchInfo;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
|
import retrofit2.Response;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
@ -61,6 +67,7 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF
|
|||||||
private FragmentRefreshListener fragmentRefreshListener;
|
private FragmentRefreshListener fragmentRefreshListener;
|
||||||
private FragmentRefreshListenerPr fragmentRefreshListenerPr;
|
private FragmentRefreshListenerPr fragmentRefreshListenerPr;
|
||||||
private FragmentRefreshListenerMilestone fragmentRefreshListenerMilestone;
|
private FragmentRefreshListenerMilestone fragmentRefreshListenerMilestone;
|
||||||
|
private FragmentRefreshListenerFiles fragmentRefreshListenerFiles;
|
||||||
|
|
||||||
private final Context ctx = this;
|
private final Context ctx = this;
|
||||||
private Context appCtx;
|
private Context appCtx;
|
||||||
@ -285,6 +292,10 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF
|
|||||||
filterMilestoneBottomSheet.show(getSupportFragmentManager(), "repoFilterMenuMilestoneBottomSheet");
|
filterMilestoneBottomSheet.show(getSupportFragmentManager(), "repoFilterMenuMilestoneBottomSheet");
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
case R.id.switchBranches:
|
||||||
|
chooseBranch();
|
||||||
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
|
|
||||||
@ -313,6 +324,10 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF
|
|||||||
startActivity(new Intent(RepoDetailActivity.this, AddCollaboratorToRepositoryActivity.class));
|
startActivity(new Intent(RepoDetailActivity.this, AddCollaboratorToRepositoryActivity.class));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "chooseBranch":
|
||||||
|
chooseBranch();
|
||||||
|
break;
|
||||||
|
|
||||||
case "createRelease":
|
case "createRelease":
|
||||||
startActivity(new Intent(RepoDetailActivity.this, CreateReleaseActivity.class));
|
startActivity(new Intent(RepoDetailActivity.this, CreateReleaseActivity.class));
|
||||||
break;
|
break;
|
||||||
@ -374,6 +389,65 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void chooseBranch() {
|
||||||
|
|
||||||
|
Call<List<Branches>> call = RetrofitClient.getInstance(instanceUrl, ctx)
|
||||||
|
.getApiInterface()
|
||||||
|
.getBranches(instanceToken, repositoryOwner, repositoryName);
|
||||||
|
|
||||||
|
call.enqueue(new Callback<List<Branches>>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResponse(@NonNull Call<List<Branches>> call, @NonNull Response<List<Branches>> response) {
|
||||||
|
|
||||||
|
if(response.code() == 200) {
|
||||||
|
|
||||||
|
List<String> branchesList = new ArrayList<>();
|
||||||
|
int selectedBranch = 0;
|
||||||
|
assert response.body() != null;
|
||||||
|
|
||||||
|
for(int i = 0; i < response.body().size(); i++) {
|
||||||
|
|
||||||
|
Branches branches = response.body().get(i);
|
||||||
|
branchesList.add(branches.getName());
|
||||||
|
|
||||||
|
if(tinyDB.getString("repoBranch").equals(branches.getName())) {
|
||||||
|
|
||||||
|
selectedBranch = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AlertDialog.Builder pBuilder = new AlertDialog.Builder(ctx);
|
||||||
|
pBuilder.setTitle(R.string.pageTitleChooseBranch);
|
||||||
|
|
||||||
|
pBuilder.setSingleChoiceItems(branchesList.toArray(new String[0]), selectedBranch, new DialogInterface.OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialogInterface, int i) {
|
||||||
|
|
||||||
|
tinyDB.putString("repoBranch", branchesList.get(i));
|
||||||
|
if(getFragmentRefreshListenerFiles() != null) {
|
||||||
|
getFragmentRefreshListenerFiles().onRefresh(branchesList.get(i));
|
||||||
|
}
|
||||||
|
dialogInterface.dismiss();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
pBuilder.create().show();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(@NonNull Call<List<Branches>> call, @NonNull Throwable t) {
|
||||||
|
|
||||||
|
Log.e("onFailure", t.toString());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
|
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
|
||||||
|
|
||||||
SectionsPagerAdapter(FragmentManager fm) {
|
SectionsPagerAdapter(FragmentManager fm) {
|
||||||
@ -393,7 +467,7 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF
|
|||||||
return RepoInfoFragment.newInstance(repositoryOwner, repositoryName);
|
return RepoInfoFragment.newInstance(repositoryOwner, repositoryName);
|
||||||
|
|
||||||
case 1: // Files
|
case 1: // Files
|
||||||
return FilesFragment.newInstance(repositoryOwner, repositoryName);
|
return FilesFragment.newInstance(repositoryOwner, repositoryName, tinyDB.getString("repoBranch"));
|
||||||
|
|
||||||
case 2: // Issues
|
case 2: // Issues
|
||||||
fragment = new IssuesFragment();
|
fragment = new IssuesFragment();
|
||||||
@ -444,8 +518,6 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF
|
|||||||
|
|
||||||
UserRepositories repoInfo = response.body();
|
UserRepositories repoInfo = response.body();
|
||||||
|
|
||||||
if(response.isSuccessful()) {
|
|
||||||
|
|
||||||
if(response.code() == 200) {
|
if(response.code() == 200) {
|
||||||
|
|
||||||
if(tinyDB.getBoolean("enableCounterBadges")) {
|
if(tinyDB.getBoolean("enableCounterBadges")) {
|
||||||
@ -471,8 +543,6 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
|
|
||||||
Log.e("onFailure", String.valueOf(response.code()));
|
Log.e("onFailure", String.valueOf(response.code()));
|
||||||
@ -567,4 +637,11 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF
|
|||||||
|
|
||||||
public interface FragmentRefreshListenerMilestone { void onRefresh(String text); }
|
public interface FragmentRefreshListenerMilestone { void onRefresh(String text); }
|
||||||
|
|
||||||
|
// Files interface
|
||||||
|
public FragmentRefreshListenerFiles getFragmentRefreshListenerFiles() { return fragmentRefreshListenerFiles; }
|
||||||
|
|
||||||
|
public void setFragmentRefreshListenerFiles(FragmentRefreshListenerFiles fragmentRefreshListenerFiles) { this.fragmentRefreshListenerFiles = fragmentRefreshListenerFiles; }
|
||||||
|
|
||||||
|
public interface FragmentRefreshListenerFiles { void onRefresh(String text); }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,19 +2,19 @@ package org.mian.gitnex.activities;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.lifecycle.Observer;
|
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
|
||||||
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.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.lifecycle.Observer;
|
||||||
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.adapters.RepoStargazersAdapter;
|
import org.mian.gitnex.adapters.RepoStargazersAdapter;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.models.UserInfo;
|
import org.mian.gitnex.models.UserInfo;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import org.mian.gitnex.viewmodels.RepoStargazersViewModel;
|
import org.mian.gitnex.viewmodels.RepoStargazersViewModel;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -2,19 +2,19 @@ package org.mian.gitnex.activities;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.lifecycle.Observer;
|
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
|
||||||
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.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.lifecycle.Observer;
|
||||||
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.adapters.RepoWatchersAdapter;
|
import org.mian.gitnex.adapters.RepoWatchersAdapter;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.models.UserInfo;
|
import org.mian.gitnex.models.UserInfo;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import org.mian.gitnex.viewmodels.RepoWatchersViewModel;
|
import org.mian.gitnex.viewmodels.RepoWatchersViewModel;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -9,8 +9,8 @@ import android.widget.Switch;
|
|||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import androidx.appcompat.app.AlertDialog;
|
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.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
@ -27,7 +27,7 @@ public class SettingsAppearanceActivity extends BaseActivity {
|
|||||||
private static String[] codeBlockList = {"Green - Black", "White - Black", "Grey - Black", "White - Grey", "Dark - White"};
|
private static String[] codeBlockList = {"Green - Black", "White - Black", "Grey - Black", "White - Grey", "Dark - White"};
|
||||||
private static int codeBlockSelectedChoice = 0;
|
private static int codeBlockSelectedChoice = 0;
|
||||||
|
|
||||||
private static String[] homeScreenList = {"My Repositories", "Starred Repositories", "Organizations", "Repositories", "Profile"};
|
private static String[] homeScreenList = {"My Repositories", "Starred Repositories", "Organizations", "Repositories", "Profile", "Explore", "Drafts"};
|
||||||
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"};
|
||||||
|
@ -0,0 +1,67 @@
|
|||||||
|
package org.mian.gitnex.activities;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
import android.widget.Switch;
|
||||||
|
import org.mian.gitnex.R;
|
||||||
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author M M Arif
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class SettingsDraftsActivity extends BaseActivity {
|
||||||
|
|
||||||
|
private Context appCtx;
|
||||||
|
private View.OnClickListener onClickListener;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getLayoutResourceId() {
|
||||||
|
|
||||||
|
return R.layout.activity_settings_drafts;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
appCtx = getApplicationContext();
|
||||||
|
|
||||||
|
TinyDB tinyDb = new TinyDB(appCtx);
|
||||||
|
|
||||||
|
ImageView closeActivity = findViewById(R.id.close);
|
||||||
|
|
||||||
|
initCloseListener();
|
||||||
|
closeActivity.setOnClickListener(onClickListener);
|
||||||
|
|
||||||
|
Switch commentsDeletionSwitch = findViewById(R.id.commentsDeletionSwitch);
|
||||||
|
|
||||||
|
if(tinyDb.getBoolean("draftsCommentsDeletionEnabled")) {
|
||||||
|
commentsDeletionSwitch.setChecked(true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
commentsDeletionSwitch.setChecked(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete comments on submit switcher
|
||||||
|
commentsDeletionSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
||||||
|
|
||||||
|
if(isChecked) {
|
||||||
|
tinyDb.putBoolean("draftsCommentsDeletionEnabled", true);
|
||||||
|
Toasty.info(appCtx, getResources().getString(R.string.settingsSave));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tinyDb.putBoolean("draftsCommentsDeletionEnabled", false);
|
||||||
|
Toasty.info(appCtx, getResources().getString(R.string.settingsSave));
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initCloseListener() { onClickListener = view -> finish(); }
|
||||||
|
|
||||||
|
}
|
@ -9,8 +9,8 @@ import android.widget.Switch;
|
|||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import androidx.appcompat.app.AlertDialog;
|
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.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
|
@ -6,8 +6,8 @@ import android.view.View;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.Switch;
|
import android.widget.Switch;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
|
@ -7,15 +7,18 @@ import android.util.Log;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.NumberPicker;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.FilesData;
|
import org.mian.gitnex.helpers.FilesData;
|
||||||
|
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.ssl.MemorizingTrustManager;
|
import org.mian.gitnex.helpers.ssl.MemorizingTrustManager;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
import org.mian.gitnex.notifications.NotificationsMaster;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@ -27,6 +30,8 @@ import java.util.HashSet;
|
|||||||
public class SettingsSecurityActivity extends BaseActivity {
|
public class SettingsSecurityActivity extends BaseActivity {
|
||||||
|
|
||||||
private Context appCtx;
|
private Context appCtx;
|
||||||
|
private Context ctx = this;
|
||||||
|
|
||||||
private View.OnClickListener onClickListener;
|
private View.OnClickListener onClickListener;
|
||||||
|
|
||||||
private static String[] cacheSizeDataList = {"50 MB", "100 MB", "250 MB", "500 MB", "1 GB"};
|
private static String[] cacheSizeDataList = {"50 MB", "100 MB", "250 MB", "500 MB", "1 GB"};
|
||||||
@ -35,6 +40,10 @@ public class SettingsSecurityActivity extends BaseActivity {
|
|||||||
private static String[] cacheSizeImagesList = {"50 MB", "100 MB", "250 MB", "500 MB", "1 GB"};
|
private static String[] cacheSizeImagesList = {"50 MB", "100 MB", "250 MB", "500 MB", "1 GB"};
|
||||||
private static int cacheSizeImagesSelectedChoice = 0;
|
private static int cacheSizeImagesSelectedChoice = 0;
|
||||||
|
|
||||||
|
private static int MINIMUM_POLLING_DELAY = 1;
|
||||||
|
private static int DEFAULT_POLLING_DELAY = 20;
|
||||||
|
private static int MAXIMUM_POLLING_DELAY = 720;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getLayoutResourceId() {
|
protected int getLayoutResourceId() {
|
||||||
|
|
||||||
@ -48,6 +57,7 @@ public class SettingsSecurityActivity extends BaseActivity {
|
|||||||
appCtx = getApplicationContext();
|
appCtx = getApplicationContext();
|
||||||
|
|
||||||
TinyDB tinyDb = new TinyDB(appCtx);
|
TinyDB tinyDb = new TinyDB(appCtx);
|
||||||
|
String currentVersion = tinyDb.getString("giteaVersion");
|
||||||
|
|
||||||
ImageView closeActivity = findViewById(R.id.close);
|
ImageView closeActivity = findViewById(R.id.close);
|
||||||
|
|
||||||
@ -57,8 +67,10 @@ public class SettingsSecurityActivity extends BaseActivity {
|
|||||||
TextView cacheSizeDataSelected = findViewById(R.id.cacheSizeDataSelected); // setter for data cache size
|
TextView cacheSizeDataSelected = findViewById(R.id.cacheSizeDataSelected); // setter for data cache size
|
||||||
TextView cacheSizeImagesSelected = findViewById(R.id.cacheSizeImagesSelected); // setter for images cache size
|
TextView cacheSizeImagesSelected = findViewById(R.id.cacheSizeImagesSelected); // setter for images cache size
|
||||||
TextView clearCacheSelected = findViewById(R.id.clearCacheSelected); // setter for clear cache
|
TextView clearCacheSelected = findViewById(R.id.clearCacheSelected); // setter for clear cache
|
||||||
|
TextView pollingDelaySelected = findViewById(R.id.pollingDelaySelected);
|
||||||
|
|
||||||
LinearLayout certsFrame = findViewById(R.id.certsFrame);
|
LinearLayout certsFrame = findViewById(R.id.certsFrame);
|
||||||
|
LinearLayout pollingDelayFrame = findViewById(R.id.pollingDelayFrame);
|
||||||
LinearLayout cacheSizeDataFrame = findViewById(R.id.cacheSizeDataSelectionFrame);
|
LinearLayout cacheSizeDataFrame = findViewById(R.id.cacheSizeDataSelectionFrame);
|
||||||
LinearLayout cacheSizeImagesFrame = findViewById(R.id.cacheSizeImagesSelectionFrame);
|
LinearLayout cacheSizeImagesFrame = findViewById(R.id.cacheSizeImagesSelectionFrame);
|
||||||
LinearLayout clearCacheFrame = findViewById(R.id.clearCacheSelectionFrame);
|
LinearLayout clearCacheFrame = findViewById(R.id.clearCacheSelectionFrame);
|
||||||
@ -79,6 +91,12 @@ public class SettingsSecurityActivity extends BaseActivity {
|
|||||||
cacheSizeImagesSelectedChoice = tinyDb.getInt("cacheSizeImagesId");
|
cacheSizeImagesSelectedChoice = tinyDb.getInt("cacheSizeImagesId");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(new Version(currentVersion).less("1.12.3")) {
|
||||||
|
pollingDelayFrame.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
pollingDelaySelected.setText(String.format(getString(R.string.pollingDelaySelectedText), tinyDb.getInt("pollingDelayMinutes", DEFAULT_POLLING_DELAY)));
|
||||||
|
|
||||||
// clear cache setter
|
// clear cache setter
|
||||||
File cacheDir = appCtx.getCacheDir();
|
File cacheDir = appCtx.getCacheDir();
|
||||||
long size__ = FilesData.getFileSizeRecursively(new HashSet<>(), cacheDir);
|
long size__ = FilesData.getFileSizeRecursively(new HashSet<>(), cacheDir);
|
||||||
@ -190,7 +208,6 @@ public class SettingsSecurityActivity extends BaseActivity {
|
|||||||
tinyDb.putBoolean("loggedInMode", false);
|
tinyDb.putBoolean("loggedInMode", false);
|
||||||
tinyDb.remove("basicAuthPassword");
|
tinyDb.remove("basicAuthPassword");
|
||||||
tinyDb.putBoolean("basicAuthFlag", false);
|
tinyDb.putBoolean("basicAuthFlag", false);
|
||||||
//tinyDb.clear();
|
|
||||||
|
|
||||||
Intent loginActivityIntent = new Intent().setClass(appCtx, LoginActivity.class);
|
Intent loginActivityIntent = new Intent().setClass(appCtx, LoginActivity.class);
|
||||||
loginActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
loginActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
@ -203,12 +220,42 @@ public class SettingsSecurityActivity extends BaseActivity {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// polling delay
|
||||||
|
pollingDelayFrame.setOnClickListener(v -> {
|
||||||
|
|
||||||
|
NumberPicker numberPicker = new NumberPicker(ctx);
|
||||||
|
numberPicker.setMinValue(MINIMUM_POLLING_DELAY);
|
||||||
|
numberPicker.setMaxValue(MAXIMUM_POLLING_DELAY);
|
||||||
|
numberPicker.setValue(tinyDb.getInt("pollingDelayMinutes", DEFAULT_POLLING_DELAY));
|
||||||
|
numberPicker.setWrapSelectorWheel(true);
|
||||||
|
|
||||||
|
AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
|
||||||
|
builder.setTitle(getString(R.string.pollingDelayDialogHeaderText));
|
||||||
|
builder.setMessage(getString(R.string.pollingDelayDialogDescriptionText));
|
||||||
|
|
||||||
|
builder.setCancelable(true);
|
||||||
|
builder.setPositiveButton(getString(R.string.okButton), (dialog, which) -> {
|
||||||
|
|
||||||
|
tinyDb.putInt("pollingDelayMinutes", numberPicker.getValue());
|
||||||
|
|
||||||
|
NotificationsMaster.fireWorker(ctx);
|
||||||
|
NotificationsMaster.hireWorker(ctx);
|
||||||
|
|
||||||
|
pollingDelaySelected.setText(String.format(getString(R.string.pollingDelaySelectedText), numberPicker.getValue()));
|
||||||
|
Toasty.info(appCtx, getResources().getString(R.string.settingsSave));
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
builder.setNegativeButton(R.string.cancelButton, (dialog, which) -> dialog.dismiss());
|
||||||
|
builder.setView(numberPicker);
|
||||||
|
builder.create().show();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initCloseListener() {
|
private void initCloseListener() {
|
||||||
onClickListener = view -> {
|
|
||||||
finish();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
onClickListener = view -> finish();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,8 @@ import android.widget.LinearLayout;
|
|||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import androidx.appcompat.app.AlertDialog;
|
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.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
|
@ -7,14 +7,14 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import org.mian.gitnex.R;
|
|
||||||
import org.mian.gitnex.activities.CommitsActivity;
|
|
||||||
import org.mian.gitnex.models.Branches;
|
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
import org.mian.gitnex.R;
|
||||||
|
import org.mian.gitnex.activities.CommitsActivity;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
|
import org.mian.gitnex.models.Branches;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
|
@ -14,8 +14,8 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.helpers.ClickListener;
|
import org.mian.gitnex.helpers.ClickListener;
|
||||||
import org.mian.gitnex.helpers.TimeHelper;
|
import org.mian.gitnex.helpers.TimeHelper;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.models.Commits;
|
import org.mian.gitnex.models.Commits;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
138
app/src/main/java/org/mian/gitnex/adapters/DraftsAdapter.java
Normal file
138
app/src/main/java/org/mian/gitnex/adapters/DraftsAdapter.java
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
package org.mian.gitnex.adapters;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.text.Html;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
import org.mian.gitnex.R;
|
||||||
|
import org.mian.gitnex.activities.ReplyToIssueActivity;
|
||||||
|
import org.mian.gitnex.database.api.DraftsApi;
|
||||||
|
import org.mian.gitnex.database.models.DraftWithRepository;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author M M Arif
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class DraftsAdapter extends RecyclerView.Adapter<DraftsAdapter.DraftsViewHolder> {
|
||||||
|
|
||||||
|
private List<DraftWithRepository> draftsList;
|
||||||
|
private Context mCtx;
|
||||||
|
|
||||||
|
class DraftsViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
|
private TextView draftText;
|
||||||
|
private TextView repoInfo;
|
||||||
|
private TextView repoId;
|
||||||
|
private TextView draftId;
|
||||||
|
private TextView issueNumber;
|
||||||
|
private TextView issueType;
|
||||||
|
private TextView repoOwner;
|
||||||
|
private TextView repoName;
|
||||||
|
|
||||||
|
private DraftsViewHolder(View itemView) {
|
||||||
|
|
||||||
|
super(itemView);
|
||||||
|
|
||||||
|
draftText = itemView.findViewById(R.id.draftText);
|
||||||
|
repoInfo = itemView.findViewById(R.id.repoInfo);
|
||||||
|
repoId = itemView.findViewById(R.id.repoId);
|
||||||
|
draftId = itemView.findViewById(R.id.draftId);
|
||||||
|
issueNumber = itemView.findViewById(R.id.issueNumber);
|
||||||
|
issueType = itemView.findViewById(R.id.issueType);
|
||||||
|
repoOwner = itemView.findViewById(R.id.repoOwner);
|
||||||
|
repoName = itemView.findViewById(R.id.repoName);
|
||||||
|
ImageView deleteDraft = itemView.findViewById(R.id.deleteDraft);
|
||||||
|
|
||||||
|
deleteDraft.setOnClickListener(itemDelete -> {
|
||||||
|
|
||||||
|
int getDraftId = Integer.parseInt(draftId.getText().toString());
|
||||||
|
deleteDraft(getAdapterPosition());
|
||||||
|
DraftsApi draftsApi = new DraftsApi(mCtx);
|
||||||
|
draftsApi.deleteSingleDraft(getDraftId);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
itemView.setOnClickListener(itemEdit -> {
|
||||||
|
|
||||||
|
Intent intent = new Intent(mCtx, ReplyToIssueActivity.class);
|
||||||
|
intent.putExtra("commentBody", draftText.getText().toString());
|
||||||
|
intent.putExtra("issueNumber", issueNumber.getText().toString());
|
||||||
|
intent.putExtra("repositoryId", repoId.getText().toString());
|
||||||
|
intent.putExtra("draftTitle", repoInfo.getText().toString());
|
||||||
|
|
||||||
|
TinyDB tinyDb = new TinyDB(mCtx);
|
||||||
|
tinyDb.putString("issueNumber", issueNumber.getText().toString());
|
||||||
|
tinyDb.putLong("repositoryId", Long.parseLong(repoId.getText().toString()));
|
||||||
|
//tinyDb.putString("issueType", issueType.getText().toString());
|
||||||
|
|
||||||
|
mCtx.startActivity(intent);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public DraftsAdapter(Context mCtx, List<DraftWithRepository> draftsListMain) {
|
||||||
|
this.mCtx = mCtx;
|
||||||
|
this.draftsList = draftsListMain;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void deleteDraft(int position) {
|
||||||
|
|
||||||
|
draftsList.remove(position);
|
||||||
|
notifyItemRemoved(position);
|
||||||
|
notifyItemRangeChanged(position, draftsList.size());
|
||||||
|
Toasty.info(mCtx, mCtx.getResources().getString(R.string.draftsSingleDeleteSuccess));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public DraftsAdapter.DraftsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
|
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_drafts, parent, false);
|
||||||
|
return new DraftsViewHolder(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("DefaultLocale")
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(@NonNull DraftsAdapter.DraftsViewHolder holder, int position) {
|
||||||
|
|
||||||
|
DraftWithRepository currentItem = draftsList.get(position);
|
||||||
|
|
||||||
|
holder.repoId.setText(String.valueOf(currentItem.getRepositoryId()));
|
||||||
|
holder.draftId.setText(String.valueOf(currentItem.getDraftId()));
|
||||||
|
holder.issueNumber.setText(String.valueOf(currentItem.getIssueId()));
|
||||||
|
holder.issueType.setText(currentItem.getDraftType());
|
||||||
|
holder.repoOwner.setText(currentItem.getRepositoryOwner());
|
||||||
|
holder.repoName.setText(currentItem.getRepositoryName());
|
||||||
|
holder.draftText.setText(currentItem.getDraftText());
|
||||||
|
|
||||||
|
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()));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return draftsList.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateList(List<DraftWithRepository> list) {
|
||||||
|
|
||||||
|
draftsList = list;
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -23,11 +23,13 @@ import org.mian.gitnex.activities.RepoStargazersActivity;
|
|||||||
import org.mian.gitnex.activities.RepoWatchersActivity;
|
import org.mian.gitnex.activities.RepoWatchersActivity;
|
||||||
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.RepositoriesApi;
|
||||||
|
import org.mian.gitnex.database.models.Repository;
|
||||||
import org.mian.gitnex.helpers.RoundedTransformation;
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.models.UserRepositories;
|
import org.mian.gitnex.models.UserRepositories;
|
||||||
import org.mian.gitnex.models.WatchInfo;
|
import org.mian.gitnex.models.WatchInfo;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
@ -61,6 +63,7 @@ public class ExploreRepositoriesAdapter extends RecyclerView.Adapter<ExploreRepo
|
|||||||
private TextView repoOpenIssuesCount;
|
private TextView repoOpenIssuesCount;
|
||||||
private TextView repoType;
|
private TextView repoType;
|
||||||
private LinearLayout archiveRepo;
|
private LinearLayout archiveRepo;
|
||||||
|
private TextView repoBranch;
|
||||||
|
|
||||||
private ReposSearchViewHolder(View itemView) {
|
private ReposSearchViewHolder(View itemView) {
|
||||||
|
|
||||||
@ -78,6 +81,7 @@ public class ExploreRepositoriesAdapter extends RecyclerView.Adapter<ExploreRepo
|
|||||||
ImageView reposDropdownMenu = itemView.findViewById(R.id.reposDropdownMenu);
|
ImageView reposDropdownMenu = itemView.findViewById(R.id.reposDropdownMenu);
|
||||||
repoType = itemView.findViewById(R.id.repoType);
|
repoType = itemView.findViewById(R.id.repoType);
|
||||||
archiveRepo = itemView.findViewById(R.id.archiveRepoFrame);
|
archiveRepo = itemView.findViewById(R.id.archiveRepoFrame);
|
||||||
|
repoBranch = itemView.findViewById(R.id.repoBranch);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> {
|
itemView.setOnClickListener(v -> {
|
||||||
|
|
||||||
@ -91,13 +95,35 @@ public class ExploreRepositoriesAdapter extends RecyclerView.Adapter<ExploreRepo
|
|||||||
tinyDb.putString("repoFullName", repoFullName.getText().toString());
|
tinyDb.putString("repoFullName", repoFullName.getText().toString());
|
||||||
tinyDb.putBoolean("resumeIssues", true);
|
tinyDb.putBoolean("resumeIssues", true);
|
||||||
tinyDb.putBoolean("isRepoAdmin", isRepoAdmin.isChecked());
|
tinyDb.putBoolean("isRepoAdmin", isRepoAdmin.isChecked());
|
||||||
|
tinyDb.putString("repoBranch", repoBranch.getText().toString());
|
||||||
|
|
||||||
|
String[] parts = fullName.getText().toString().split("/");
|
||||||
|
final String repoOwner = parts[0];
|
||||||
|
final String repoName = parts[1];
|
||||||
|
|
||||||
|
int currentActiveAccountId = tinyDb.getInt("currentActiveAccountId");
|
||||||
|
RepositoriesApi repositoryData = new RepositoriesApi(context);
|
||||||
|
|
||||||
|
//RepositoriesRepository.deleteRepositoriesByAccount(currentActiveAccountId);
|
||||||
|
Integer count = repositoryData.checkRepository(currentActiveAccountId, repoOwner, repoName);
|
||||||
|
|
||||||
|
if(count == 0) {
|
||||||
|
|
||||||
|
long id = repositoryData.insertRepository(currentActiveAccountId, repoOwner, repoName);
|
||||||
|
tinyDb.putLong("repositoryId", id);
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
Repository data = repositoryData.getRepository(currentActiveAccountId, repoOwner, repoName);
|
||||||
|
tinyDb.putLong("repositoryId", data.getRepositoryId());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//store if user is watching this repo
|
//store if user is watching this repo
|
||||||
{
|
{
|
||||||
|
|
||||||
final String instanceUrl = tinyDb.getString("instanceUrl");
|
final String instanceUrl = tinyDb.getString("instanceUrl");
|
||||||
String[] parts = repoFullName.getText().toString().split("/");
|
|
||||||
final String repoOwner = parts[0];
|
|
||||||
final String repoName = parts[1];
|
|
||||||
final String token = "token " + tinyDb.getString(tinyDb.getString("loginUid") + "-token");
|
final String token = "token " + tinyDb.getString(tinyDb.getString("loginUid") + "-token");
|
||||||
|
|
||||||
WatchInfo watch = new WatchInfo();
|
WatchInfo watch = new WatchInfo();
|
||||||
@ -138,6 +164,7 @@ public class ExploreRepositoriesAdapter extends RecyclerView.Adapter<ExploreRepo
|
|||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
context.startActivity(intent);
|
context.startActivity(intent);
|
||||||
@ -204,10 +231,9 @@ public class ExploreRepositoriesAdapter extends RecyclerView.Adapter<ExploreRepo
|
|||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(@NonNull final ExploreRepositoriesAdapter.ReposSearchViewHolder holder, int position) {
|
public void onBindViewHolder(@NonNull final ExploreRepositoriesAdapter.ReposSearchViewHolder holder, int position) {
|
||||||
|
|
||||||
final UserRepositories currentItem = searchedReposList.get(position);
|
UserRepositories currentItem = searchedReposList.get(position);
|
||||||
|
|
||||||
|
|
||||||
holder.repoDescription.setVisibility(View.GONE);
|
holder.repoDescription.setVisibility(View.GONE);
|
||||||
|
holder.repoBranch.setText(currentItem.getDefault_branch());
|
||||||
|
|
||||||
ColorGenerator generator = ColorGenerator.MATERIAL;
|
ColorGenerator generator = ColorGenerator.MATERIAL;
|
||||||
int color = generator.getColor(currentItem.getName());
|
int color = generator.getColor(currentItem.getName());
|
||||||
@ -234,11 +260,11 @@ public class ExploreRepositoriesAdapter extends RecyclerView.Adapter<ExploreRepo
|
|||||||
}
|
}
|
||||||
holder.fullName.setText(currentItem.getFullname());
|
holder.fullName.setText(currentItem.getFullname());
|
||||||
if(currentItem.getPrivateFlag()) {
|
if(currentItem.getPrivateFlag()) {
|
||||||
holder.repoPrivatePublic.setImageResource(R.drawable.ic_lock_bold);
|
holder.repoPrivatePublic.setImageResource(R.drawable.ic_lock);
|
||||||
holder.repoType.setText(R.string.strPrivate);
|
holder.repoType.setText(R.string.strPrivate);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
holder.repoPrivatePublic.setImageResource(R.drawable.ic_public);
|
holder.repoPrivatePublic.setImageResource(R.drawable.ic_unlock);
|
||||||
holder.repoType.setText(R.string.strPublic);
|
holder.repoType.setText(R.string.strPublic);
|
||||||
}
|
}
|
||||||
holder.repoStars.setText(currentItem.getStars_count());
|
holder.repoStars.setText(currentItem.getStars_count());
|
||||||
|
@ -11,9 +11,9 @@ import android.widget.TextView;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.models.Files;
|
import org.mian.gitnex.models.Files;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -51,9 +51,7 @@ public class FilesAdapter extends RecyclerView.Adapter<FilesAdapter.FilesViewHol
|
|||||||
|
|
||||||
//ImageView filesDropdownMenu = itemView.findViewById(R.id.filesDropdownMenu);
|
//ImageView filesDropdownMenu = itemView.findViewById(R.id.filesDropdownMenu);
|
||||||
|
|
||||||
fileName.setOnClickListener(new View.OnClickListener() {
|
fileName.setOnClickListener(v -> {
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
|
|
||||||
Context context = v.getContext();
|
Context context = v.getContext();
|
||||||
|
|
||||||
@ -67,7 +65,6 @@ public class FilesAdapter extends RecyclerView.Adapter<FilesAdapter.FilesViewHol
|
|||||||
Toasty.info(context, context.getString(R.string.filesGenericError));
|
Toasty.info(context, context.getString(R.string.filesGenericError));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@ -160,16 +157,16 @@ 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_new));
|
holder.fileTypeImage.setImageDrawable(mCtx.getResources().getDrawable(R.drawable.ic_file));
|
||||||
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.fileInfo.setVisibility(View.GONE);
|
holder.fileInfo.setVisibility(View.GONE);
|
||||||
holder.fileTypeImage.setImageDrawable(mCtx.getResources().getDrawable(R.drawable.ic_folder_24));
|
holder.fileTypeImage.setImageDrawable(mCtx.getResources().getDrawable(R.drawable.ic_directory));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
holder.fileTypeImage.setImageDrawable(mCtx.getResources().getDrawable(R.drawable.ic_question_mark_24));
|
holder.fileTypeImage.setImageDrawable(mCtx.getResources().getDrawable(R.drawable.ic_question));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -26,10 +26,10 @@ import org.mian.gitnex.helpers.AlertDialogs;
|
|||||||
import org.mian.gitnex.helpers.ClickListener;
|
import org.mian.gitnex.helpers.ClickListener;
|
||||||
import org.mian.gitnex.helpers.RoundedTransformation;
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
||||||
import org.mian.gitnex.helpers.TimeHelper;
|
import org.mian.gitnex.helpers.TimeHelper;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.helpers.UserMentions;
|
import org.mian.gitnex.helpers.UserMentions;
|
||||||
import org.mian.gitnex.models.IssueComments;
|
import org.mian.gitnex.models.IssueComments;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -18,8 +18,8 @@ import org.mian.gitnex.clients.PicassoService;
|
|||||||
import org.mian.gitnex.helpers.ClickListener;
|
import org.mian.gitnex.helpers.ClickListener;
|
||||||
import org.mian.gitnex.helpers.RoundedTransformation;
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
||||||
import org.mian.gitnex.helpers.TimeHelper;
|
import org.mian.gitnex.helpers.TimeHelper;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.models.Issues;
|
import org.mian.gitnex.models.Issues;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import org.ocpsoft.prettytime.PrettyTime;
|
import org.ocpsoft.prettytime.PrettyTime;
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
@ -125,7 +125,7 @@ public class IssuesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
|||||||
|
|
||||||
TinyDB tinyDb = new TinyDB(context);
|
TinyDB tinyDb = new TinyDB(context);
|
||||||
tinyDb.putString("issueNumber", issueNumber.getText().toString());
|
tinyDb.putString("issueNumber", issueNumber.getText().toString());
|
||||||
tinyDb.putString("issueType", "issue");
|
tinyDb.putString("issueType", "Issue");
|
||||||
context.startActivity(intent);
|
context.startActivity(intent);
|
||||||
|
|
||||||
});
|
});
|
||||||
@ -138,7 +138,7 @@ public class IssuesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
|||||||
|
|
||||||
TinyDB tinyDb = new TinyDB(context);
|
TinyDB tinyDb = new TinyDB(context);
|
||||||
tinyDb.putString("issueNumber", issueNumber.getText().toString());
|
tinyDb.putString("issueNumber", issueNumber.getText().toString());
|
||||||
tinyDb.putString("issueType", "issue");
|
tinyDb.putString("issueType", "Issue");
|
||||||
context.startActivity(intent);
|
context.startActivity(intent);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -21,8 +21,8 @@ import org.mian.gitnex.actions.MilestoneActions;
|
|||||||
import org.mian.gitnex.helpers.ClickListener;
|
import org.mian.gitnex.helpers.ClickListener;
|
||||||
import org.mian.gitnex.helpers.StaticGlobalVariables;
|
import org.mian.gitnex.helpers.StaticGlobalVariables;
|
||||||
import org.mian.gitnex.helpers.TimeHelper;
|
import org.mian.gitnex.helpers.TimeHelper;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.models.Milestones;
|
import org.mian.gitnex.models.Milestones;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
@ -11,14 +11,14 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import org.mian.gitnex.R;
|
|
||||||
import org.mian.gitnex.helpers.MultiSelectDialog;
|
|
||||||
import org.mian.gitnex.models.MultiSelectModel;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.appcompat.widget.AppCompatCheckBox;
|
import androidx.appcompat.widget.AppCompatCheckBox;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
import org.mian.gitnex.R;
|
||||||
|
import org.mian.gitnex.helpers.MultiSelectDialog;
|
||||||
|
import org.mian.gitnex.models.MultiSelectModel;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author com.github.abumoallim, modified by M M Arif
|
* Author com.github.abumoallim, modified by M M Arif
|
||||||
@ -26,11 +26,11 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||||||
|
|
||||||
public class MutliSelectAdapter extends RecyclerView.Adapter<MutliSelectAdapter.MultiSelectDialogViewHolder> {
|
public class MutliSelectAdapter extends RecyclerView.Adapter<MutliSelectAdapter.MultiSelectDialogViewHolder> {
|
||||||
|
|
||||||
private ArrayList<MultiSelectModel> mDataSet;
|
private List<MultiSelectModel> mDataSet;
|
||||||
private String mSearchQuery = "";
|
private String mSearchQuery = "";
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
|
||||||
public MutliSelectAdapter(ArrayList<MultiSelectModel> dataSet, Context context) {
|
public MutliSelectAdapter(List<MultiSelectModel> dataSet, Context context) {
|
||||||
this.mDataSet = dataSet;
|
this.mDataSet = dataSet;
|
||||||
this.mContext = context;
|
this.mContext = context;
|
||||||
}
|
}
|
||||||
@ -163,7 +163,7 @@ public class MutliSelectAdapter extends RecyclerView.Adapter<MutliSelectAdapter.
|
|||||||
return mDataSet.size();
|
return mDataSet.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setData(ArrayList<MultiSelectModel> data, String query, MutliSelectAdapter mutliSelectAdapter) {
|
public void setData(List<MultiSelectModel> data, String query, MutliSelectAdapter mutliSelectAdapter) {
|
||||||
|
|
||||||
this.mDataSet = data;
|
this.mDataSet = data;
|
||||||
this.mSearchQuery = query;
|
this.mSearchQuery = query;
|
||||||
|
@ -13,6 +13,8 @@ import android.widget.Filterable;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import com.amulyakhare.textdrawable.TextDrawable;
|
import com.amulyakhare.textdrawable.TextDrawable;
|
||||||
import com.amulyakhare.textdrawable.util.ColorGenerator;
|
import com.amulyakhare.textdrawable.util.ColorGenerator;
|
||||||
import com.google.android.material.bottomsheet.BottomSheetDialog;
|
import com.google.android.material.bottomsheet.BottomSheetDialog;
|
||||||
@ -23,15 +25,15 @@ import org.mian.gitnex.activities.RepoStargazersActivity;
|
|||||||
import org.mian.gitnex.activities.RepoWatchersActivity;
|
import org.mian.gitnex.activities.RepoWatchersActivity;
|
||||||
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.RepositoriesApi;
|
||||||
|
import org.mian.gitnex.database.models.Repository;
|
||||||
import org.mian.gitnex.helpers.RoundedTransformation;
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.models.UserRepositories;
|
import org.mian.gitnex.models.UserRepositories;
|
||||||
import org.mian.gitnex.models.WatchInfo;
|
import org.mian.gitnex.models.WatchInfo;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
|
|
||||||
@ -58,8 +60,10 @@ public class MyReposListAdapter extends RecyclerView.Adapter<MyReposListAdapter.
|
|||||||
private TextView repoType;
|
private TextView repoType;
|
||||||
private CheckBox isRepoAdmin;
|
private CheckBox isRepoAdmin;
|
||||||
private LinearLayout archiveRepo;
|
private LinearLayout archiveRepo;
|
||||||
|
private TextView repoBranch;
|
||||||
|
|
||||||
private MyReposViewHolder(View itemView) {
|
private MyReposViewHolder(View itemView) {
|
||||||
|
|
||||||
super(itemView);
|
super(itemView);
|
||||||
repoName = itemView.findViewById(R.id.repoName);
|
repoName = itemView.findViewById(R.id.repoName);
|
||||||
repoDescription = itemView.findViewById(R.id.repoDescription);
|
repoDescription = itemView.findViewById(R.id.repoDescription);
|
||||||
@ -73,6 +77,7 @@ public class MyReposListAdapter extends RecyclerView.Adapter<MyReposListAdapter.
|
|||||||
repoType = itemView.findViewById(R.id.repoType);
|
repoType = itemView.findViewById(R.id.repoType);
|
||||||
isRepoAdmin = itemView.findViewById(R.id.repoIsAdmin);
|
isRepoAdmin = itemView.findViewById(R.id.repoIsAdmin);
|
||||||
archiveRepo = itemView.findViewById(R.id.archiveRepoFrame);
|
archiveRepo = itemView.findViewById(R.id.archiveRepoFrame);
|
||||||
|
repoBranch = itemView.findViewById(R.id.repoBranch);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> {
|
itemView.setOnClickListener(v -> {
|
||||||
|
|
||||||
@ -86,13 +91,35 @@ public class MyReposListAdapter extends RecyclerView.Adapter<MyReposListAdapter.
|
|||||||
tinyDb.putString("repoType", repoType.getText().toString());
|
tinyDb.putString("repoType", repoType.getText().toString());
|
||||||
//tinyDb.putBoolean("resumeIssues", true);
|
//tinyDb.putBoolean("resumeIssues", true);
|
||||||
tinyDb.putBoolean("isRepoAdmin", isRepoAdmin.isChecked());
|
tinyDb.putBoolean("isRepoAdmin", isRepoAdmin.isChecked());
|
||||||
|
tinyDb.putString("repoBranch", repoBranch.getText().toString());
|
||||||
|
|
||||||
//store if user is watching this repo
|
|
||||||
{
|
|
||||||
final String instanceUrl = tinyDb.getString("instanceUrl");
|
|
||||||
String[] parts = repoFullName.getText().toString().split("/");
|
String[] parts = repoFullName.getText().toString().split("/");
|
||||||
final String repoOwner = parts[0];
|
final String repoOwner = parts[0];
|
||||||
final String repoName = parts[1];
|
final String repoName = parts[1];
|
||||||
|
|
||||||
|
int currentActiveAccountId = tinyDb.getInt("currentActiveAccountId");
|
||||||
|
RepositoriesApi repositoryData = new RepositoriesApi(context);
|
||||||
|
|
||||||
|
//RepositoriesRepository.deleteRepositoriesByAccount(currentActiveAccountId);
|
||||||
|
Integer count = repositoryData.checkRepository(currentActiveAccountId, repoOwner, repoName);
|
||||||
|
|
||||||
|
if(count == 0) {
|
||||||
|
|
||||||
|
long id = repositoryData.insertRepository(currentActiveAccountId, repoOwner, repoName);
|
||||||
|
tinyDb.putLong("repositoryId", id);
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
Repository data = repositoryData.getRepository(currentActiveAccountId, repoOwner, repoName);
|
||||||
|
tinyDb.putLong("repositoryId", data.getRepositoryId());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//store if user is watching this repo
|
||||||
|
{
|
||||||
|
|
||||||
|
final String instanceUrl = tinyDb.getString("instanceUrl");
|
||||||
final String token = "token " + tinyDb.getString(tinyDb.getString("loginUid") + "-token");
|
final String token = "token " + tinyDb.getString(tinyDb.getString("loginUid") + "-token");
|
||||||
|
|
||||||
WatchInfo watch = new WatchInfo();
|
WatchInfo watch = new WatchInfo();
|
||||||
@ -111,7 +138,8 @@ public class MyReposListAdapter extends RecyclerView.Adapter<MyReposListAdapter.
|
|||||||
assert response.body() != null;
|
assert response.body() != null;
|
||||||
tinyDb.putBoolean("repoWatch", response.body().getSubscribed());
|
tinyDb.putBoolean("repoWatch", response.body().getSubscribed());
|
||||||
|
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
tinyDb.putBoolean("repoWatch", false);
|
tinyDb.putBoolean("repoWatch", false);
|
||||||
|
|
||||||
@ -133,6 +161,7 @@ public class MyReposListAdapter extends RecyclerView.Adapter<MyReposListAdapter.
|
|||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
context.startActivity(intent);
|
context.startActivity(intent);
|
||||||
@ -143,8 +172,7 @@ public class MyReposListAdapter extends RecyclerView.Adapter<MyReposListAdapter.
|
|||||||
|
|
||||||
final Context context = v.getContext();
|
final Context context = v.getContext();
|
||||||
|
|
||||||
@SuppressLint("InflateParams")
|
@SuppressLint("InflateParams") View view = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_repository_in_list, null);
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_repository_in_list, null);
|
|
||||||
|
|
||||||
TextView repoOpenInBrowser = view.findViewById(R.id.repoOpenInBrowser);
|
TextView repoOpenInBrowser = view.findViewById(R.id.repoOpenInBrowser);
|
||||||
TextView repoStargazers = view.findViewById(R.id.repoStargazers);
|
TextView repoStargazers = view.findViewById(R.id.repoStargazers);
|
||||||
@ -186,9 +214,11 @@ public class MyReposListAdapter extends RecyclerView.Adapter<MyReposListAdapter.
|
|||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public MyReposListAdapter(Context mCtx, List<UserRepositories> reposListMain) {
|
public MyReposListAdapter(Context mCtx, List<UserRepositories> reposListMain) {
|
||||||
|
|
||||||
this.mCtx = mCtx;
|
this.mCtx = mCtx;
|
||||||
this.reposList = reposListMain;
|
this.reposList = reposListMain;
|
||||||
reposListFull = new ArrayList<>(reposList);
|
reposListFull = new ArrayList<>(reposList);
|
||||||
@ -197,6 +227,7 @@ public class MyReposListAdapter extends RecyclerView.Adapter<MyReposListAdapter.
|
|||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public MyReposListAdapter.MyReposViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public MyReposListAdapter.MyReposViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
|
|
||||||
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_repositories, parent, false);
|
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_repositories, parent, false);
|
||||||
return new MyReposListAdapter.MyReposViewHolder(v);
|
return new MyReposListAdapter.MyReposViewHolder(v);
|
||||||
}
|
}
|
||||||
@ -206,25 +237,19 @@ public class MyReposListAdapter extends RecyclerView.Adapter<MyReposListAdapter.
|
|||||||
|
|
||||||
UserRepositories currentItem = reposList.get(position);
|
UserRepositories currentItem = reposList.get(position);
|
||||||
holder.repoDescription.setVisibility(View.GONE);
|
holder.repoDescription.setVisibility(View.GONE);
|
||||||
|
holder.repoBranch.setText(currentItem.getDefault_branch());
|
||||||
|
|
||||||
ColorGenerator generator = ColorGenerator.MATERIAL;
|
ColorGenerator generator = ColorGenerator.MATERIAL;
|
||||||
int color = generator.getColor(currentItem.getName());
|
int color = generator.getColor(currentItem.getName());
|
||||||
String firstCharacter = String.valueOf(currentItem.getName().charAt(0));
|
String firstCharacter = String.valueOf(currentItem.getName().charAt(0));
|
||||||
|
|
||||||
TextDrawable drawable = TextDrawable.builder()
|
TextDrawable drawable = TextDrawable.builder().beginConfig().useFont(Typeface.DEFAULT).fontSize(18).toUpperCase().width(28).height(28).endConfig().buildRoundRect(firstCharacter, color, 3);
|
||||||
.beginConfig()
|
|
||||||
.useFont(Typeface.DEFAULT)
|
|
||||||
.fontSize(18)
|
|
||||||
.toUpperCase()
|
|
||||||
.width(28)
|
|
||||||
.height(28)
|
|
||||||
.endConfig()
|
|
||||||
.buildRoundRect(firstCharacter, color, 3);
|
|
||||||
|
|
||||||
if (currentItem.getAvatar_url() != null) {
|
if(currentItem.getAvatar_url() != null) {
|
||||||
if (!currentItem.getAvatar_url().equals("")) {
|
if(!currentItem.getAvatar_url().equals("")) {
|
||||||
PicassoService.getInstance(mCtx).get().load(currentItem.getAvatar_url()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(holder.imageAvatar);
|
PicassoService.getInstance(mCtx).get().load(currentItem.getAvatar_url()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(holder.imageAvatar);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
holder.imageAvatar.setImageDrawable(drawable);
|
holder.imageAvatar.setImageDrawable(drawable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -233,17 +258,17 @@ public class MyReposListAdapter extends RecyclerView.Adapter<MyReposListAdapter.
|
|||||||
}
|
}
|
||||||
|
|
||||||
holder.repoName.setText(currentItem.getName());
|
holder.repoName.setText(currentItem.getName());
|
||||||
if (!currentItem.getDescription().equals("")) {
|
if(!currentItem.getDescription().equals("")) {
|
||||||
holder.repoDescription.setVisibility(View.VISIBLE);
|
holder.repoDescription.setVisibility(View.VISIBLE);
|
||||||
holder.repoDescription.setText(currentItem.getDescription());
|
holder.repoDescription.setText(currentItem.getDescription());
|
||||||
}
|
}
|
||||||
holder.repoFullName.setText(currentItem.getFullname());
|
holder.repoFullName.setText(currentItem.getFullname());
|
||||||
if(currentItem.getPrivateFlag()) {
|
if(currentItem.getPrivateFlag()) {
|
||||||
holder.repoPrivatePublic.setImageResource(R.drawable.ic_lock_bold);
|
holder.repoPrivatePublic.setImageResource(R.drawable.ic_lock);
|
||||||
holder.repoType.setText(R.string.strPrivate);
|
holder.repoType.setText(R.string.strPrivate);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
holder.repoPrivatePublic.setImageResource(R.drawable.ic_public);
|
holder.repoPrivatePublic.setImageResource(R.drawable.ic_unlock);
|
||||||
holder.repoType.setText(R.string.strPublic);
|
holder.repoType.setText(R.string.strPublic);
|
||||||
}
|
}
|
||||||
holder.repoStars.setText(currentItem.getStars_count());
|
holder.repoStars.setText(currentItem.getStars_count());
|
||||||
@ -266,26 +291,31 @@ public class MyReposListAdapter extends RecyclerView.Adapter<MyReposListAdapter.
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
|
|
||||||
return reposList.size();
|
return reposList.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Filter getFilter() {
|
public Filter getFilter() {
|
||||||
|
|
||||||
return myReposFilter;
|
return myReposFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Filter myReposFilter = new Filter() {
|
private Filter myReposFilter = new Filter() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected FilterResults performFiltering(CharSequence constraint) {
|
protected FilterResults performFiltering(CharSequence constraint) {
|
||||||
|
|
||||||
List<UserRepositories> filteredList = new ArrayList<>();
|
List<UserRepositories> filteredList = new ArrayList<>();
|
||||||
|
|
||||||
if (constraint == null || constraint.length() == 0) {
|
if(constraint == null || constraint.length() == 0) {
|
||||||
filteredList.addAll(reposListFull);
|
filteredList.addAll(reposListFull);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
String filterPattern = constraint.toString().toLowerCase().trim();
|
String filterPattern = constraint.toString().toLowerCase().trim();
|
||||||
|
|
||||||
for (UserRepositories item : reposListFull) {
|
for(UserRepositories item : reposListFull) {
|
||||||
if (item.getFullname().toLowerCase().contains(filterPattern) || item.getDescription().toLowerCase().contains(filterPattern)) {
|
if(item.getFullname().toLowerCase().contains(filterPattern) || item.getDescription().toLowerCase().contains(filterPattern)) {
|
||||||
filteredList.add(item);
|
filteredList.add(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -299,9 +329,11 @@ public class MyReposListAdapter extends RecyclerView.Adapter<MyReposListAdapter.
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void publishResults(CharSequence constraint, FilterResults results) {
|
protected void publishResults(CharSequence constraint, FilterResults results) {
|
||||||
|
|
||||||
reposList.clear();
|
reposList.clear();
|
||||||
reposList.addAll((List) results.values);
|
reposList.addAll((List) results.values);
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,156 @@
|
|||||||
|
package org.mian.gitnex.adapters;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.text.Html;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
import org.mian.gitnex.R;
|
||||||
|
import org.mian.gitnex.database.api.RepositoriesApi;
|
||||||
|
import org.mian.gitnex.database.models.Repository;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
|
import org.mian.gitnex.models.NotificationThread;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author opyale
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class NotificationsAdapter extends RecyclerView.Adapter<NotificationsAdapter.NotificationsViewHolder> {
|
||||||
|
|
||||||
|
private Context context;
|
||||||
|
private List<NotificationThread> notificationThreads;
|
||||||
|
private OnMoreClickedListener onMoreClickedListener;
|
||||||
|
private OnNotificationClickedListener onNotificationClickedListener;
|
||||||
|
private TinyDB tinyDb;
|
||||||
|
|
||||||
|
public NotificationsAdapter(Context context, List<NotificationThread> notificationThreads, OnMoreClickedListener onMoreClickedListener, OnNotificationClickedListener onNotificationClickedListener) {
|
||||||
|
|
||||||
|
this.tinyDb = new TinyDB(context);
|
||||||
|
this.context = context;
|
||||||
|
this.notificationThreads = notificationThreads;
|
||||||
|
this.onMoreClickedListener = onMoreClickedListener;
|
||||||
|
this.onNotificationClickedListener = onNotificationClickedListener;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static class NotificationsViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
|
private LinearLayout frame;
|
||||||
|
private TextView subject;
|
||||||
|
private TextView repository;
|
||||||
|
private ImageView type;
|
||||||
|
private ImageView pinned;
|
||||||
|
private ImageView more;
|
||||||
|
|
||||||
|
public NotificationsViewHolder(@NonNull View itemView) {
|
||||||
|
|
||||||
|
super(itemView);
|
||||||
|
|
||||||
|
frame = itemView.findViewById(R.id.frame);
|
||||||
|
subject = itemView.findViewById(R.id.subject);
|
||||||
|
repository = itemView.findViewById(R.id.repository);
|
||||||
|
type = itemView.findViewById(R.id.type);
|
||||||
|
pinned = itemView.findViewById(R.id.pinned);
|
||||||
|
more = itemView.findViewById(R.id.more);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public NotificationsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
|
|
||||||
|
View v = LayoutInflater.from(context).inflate(R.layout.list_notifications, parent, false);
|
||||||
|
return new NotificationsAdapter.NotificationsViewHolder(v);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(@NonNull NotificationsViewHolder holder, int position) {
|
||||||
|
|
||||||
|
NotificationThread notificationThread = notificationThreads.get(position);
|
||||||
|
|
||||||
|
String url = notificationThread.getSubject().getUrl();
|
||||||
|
String subjectId = "<font color='" + context.getResources().getColor(R.color.lightGray) + "'>" + context.getResources()
|
||||||
|
.getString(R.string.hash) + url.substring(url.lastIndexOf("/") + 1) + "</font>";
|
||||||
|
|
||||||
|
holder.subject.setText(Html.fromHtml(subjectId + " " + notificationThread.getSubject().getTitle()));
|
||||||
|
holder.repository.setText(notificationThread.getRepository().getFullname());
|
||||||
|
|
||||||
|
if(notificationThread.isPinned()) {
|
||||||
|
holder.pinned.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
holder.pinned.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(notificationThread.getSubject().getType()) {
|
||||||
|
|
||||||
|
case "Pull":
|
||||||
|
holder.type.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_pull_request, null));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "Issue":
|
||||||
|
holder.type.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_issue, null));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
holder.type.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_question, null));
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
holder.frame.setOnClickListener(v -> {
|
||||||
|
|
||||||
|
onNotificationClickedListener.onNotificationClicked(notificationThread);
|
||||||
|
|
||||||
|
String[] parts = notificationThread.getRepository().getFullname().split("/");
|
||||||
|
final String repoOwner = parts[0];
|
||||||
|
final String repoName = parts[1];
|
||||||
|
|
||||||
|
int currentActiveAccountId = tinyDb.getInt("currentActiveAccountId");
|
||||||
|
RepositoriesApi repositoryData = new RepositoriesApi(context);
|
||||||
|
|
||||||
|
Integer count = repositoryData.checkRepository(currentActiveAccountId, repoOwner, repoName);
|
||||||
|
|
||||||
|
if(count == 0) {
|
||||||
|
|
||||||
|
long id = repositoryData.insertRepository(currentActiveAccountId, repoOwner, repoName);
|
||||||
|
tinyDb.putLong("repositoryId", id);
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
Repository data = repositoryData.getRepository(currentActiveAccountId, repoOwner, repoName);
|
||||||
|
tinyDb.putLong("repositoryId", data.getRepositoryId());
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
holder.more.setOnClickListener(v -> onMoreClickedListener.onMoreClicked(notificationThread));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
|
||||||
|
return notificationThreads.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface OnNotificationClickedListener {
|
||||||
|
|
||||||
|
void onNotificationClicked(NotificationThread notificationThread);
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface OnMoreClickedListener {
|
||||||
|
|
||||||
|
void onMoreClicked(NotificationThread notificationThread);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,7 +1,5 @@
|
|||||||
package org.mian.gitnex.adapters;
|
package org.mian.gitnex.adapters;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@ -12,12 +10,14 @@ import android.widget.Filter;
|
|||||||
import android.widget.Filterable;
|
import android.widget.Filterable;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.activities.OrganizationDetailActivity;
|
import org.mian.gitnex.activities.OrganizationDetailActivity;
|
||||||
import org.mian.gitnex.clients.PicassoService;
|
import org.mian.gitnex.clients.PicassoService;
|
||||||
import org.mian.gitnex.models.UserOrganizations;
|
|
||||||
import org.mian.gitnex.helpers.RoundedTransformation;
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
|
import org.mian.gitnex.models.UserOrganizations;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -18,8 +18,8 @@ import org.mian.gitnex.clients.PicassoService;
|
|||||||
import org.mian.gitnex.helpers.ClickListener;
|
import org.mian.gitnex.helpers.ClickListener;
|
||||||
import org.mian.gitnex.helpers.RoundedTransformation;
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
||||||
import org.mian.gitnex.helpers.TimeHelper;
|
import org.mian.gitnex.helpers.TimeHelper;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.models.PullRequests;
|
import org.mian.gitnex.models.PullRequests;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
@ -136,7 +136,7 @@ public class PullRequestsAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
|
|||||||
tinyDb.putString("prHeadBranch", prHeadBranch.getText().toString());
|
tinyDb.putString("prHeadBranch", prHeadBranch.getText().toString());
|
||||||
tinyDb.putString("prIsFork", prIsFork.getText().toString());
|
tinyDb.putString("prIsFork", prIsFork.getText().toString());
|
||||||
tinyDb.putString("prForkFullName", prForkFullName.getText().toString());
|
tinyDb.putString("prForkFullName", prForkFullName.getText().toString());
|
||||||
tinyDb.putString("issueType", "pr");
|
tinyDb.putString("issueType", "Pull");
|
||||||
context.startActivity(intent);
|
context.startActivity(intent);
|
||||||
|
|
||||||
});
|
});
|
||||||
@ -155,7 +155,7 @@ public class PullRequestsAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
|
|||||||
tinyDb.putString("prHeadBranch", prHeadBranch.getText().toString());
|
tinyDb.putString("prHeadBranch", prHeadBranch.getText().toString());
|
||||||
tinyDb.putString("prIsFork", prIsFork.getText().toString());
|
tinyDb.putString("prIsFork", prIsFork.getText().toString());
|
||||||
tinyDb.putString("prForkFullName", prForkFullName.getText().toString());
|
tinyDb.putString("prForkFullName", prForkFullName.getText().toString());
|
||||||
tinyDb.putString("issueType", "pr");
|
tinyDb.putString("issueType", "Pull");
|
||||||
context.startActivity(intent);
|
context.startActivity(intent);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -22,8 +22,8 @@ import org.mian.gitnex.clients.PicassoService;
|
|||||||
import org.mian.gitnex.helpers.ClickListener;
|
import org.mian.gitnex.helpers.ClickListener;
|
||||||
import org.mian.gitnex.helpers.RoundedTransformation;
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
||||||
import org.mian.gitnex.helpers.TimeHelper;
|
import org.mian.gitnex.helpers.TimeHelper;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.models.Releases;
|
import org.mian.gitnex.models.Releases;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -210,13 +210,13 @@ public class ReleasesAdapter extends RecyclerView.Adapter<ReleasesAdapter.Releas
|
|||||||
|
|
||||||
if(holder.downloads.getVisibility() == View.GONE) {
|
if(holder.downloads.getVisibility() == View.GONE) {
|
||||||
|
|
||||||
holder.downloadDropdownIcon.setImageResource(R.drawable.ic_arrow_down);
|
holder.downloadDropdownIcon.setImageResource(R.drawable.ic_chevron_down);
|
||||||
holder.downloads.setVisibility(View.VISIBLE);
|
holder.downloads.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
holder.downloadDropdownIcon.setImageResource(R.drawable.ic_arrow_right);
|
holder.downloadDropdownIcon.setImageResource(R.drawable.ic_chevron_right);
|
||||||
holder.downloads.setVisibility(View.GONE);
|
holder.downloads.setVisibility(View.GONE);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -12,8 +12,8 @@ import android.widget.TextView;
|
|||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.clients.PicassoService;
|
import org.mian.gitnex.clients.PicassoService;
|
||||||
import org.mian.gitnex.helpers.RoundedTransformation;
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.models.UserInfo;
|
import org.mian.gitnex.models.UserInfo;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -12,8 +12,8 @@ import android.widget.TextView;
|
|||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.clients.PicassoService;
|
import org.mian.gitnex.clients.PicassoService;
|
||||||
import org.mian.gitnex.helpers.RoundedTransformation;
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.models.UserInfo;
|
import org.mian.gitnex.models.UserInfo;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -25,11 +25,13 @@ import org.mian.gitnex.activities.RepoStargazersActivity;
|
|||||||
import org.mian.gitnex.activities.RepoWatchersActivity;
|
import org.mian.gitnex.activities.RepoWatchersActivity;
|
||||||
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.RepositoriesApi;
|
||||||
|
import org.mian.gitnex.database.models.Repository;
|
||||||
import org.mian.gitnex.helpers.RoundedTransformation;
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.models.UserRepositories;
|
import org.mian.gitnex.models.UserRepositories;
|
||||||
import org.mian.gitnex.models.WatchInfo;
|
import org.mian.gitnex.models.WatchInfo;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
@ -58,6 +60,7 @@ public class ReposListAdapter extends RecyclerView.Adapter<ReposListAdapter.Repo
|
|||||||
private TextView repoOpenIssuesCount;
|
private TextView repoOpenIssuesCount;
|
||||||
private TextView repoType;
|
private TextView repoType;
|
||||||
private LinearLayout archiveRepo;
|
private LinearLayout archiveRepo;
|
||||||
|
private TextView repoBranch;
|
||||||
|
|
||||||
private ReposViewHolder(View itemView) {
|
private ReposViewHolder(View itemView) {
|
||||||
|
|
||||||
@ -74,6 +77,7 @@ public class ReposListAdapter extends RecyclerView.Adapter<ReposListAdapter.Repo
|
|||||||
ImageView reposDropdownMenu = itemView.findViewById(R.id.reposDropdownMenu);
|
ImageView reposDropdownMenu = itemView.findViewById(R.id.reposDropdownMenu);
|
||||||
repoType = itemView.findViewById(R.id.repoType);
|
repoType = itemView.findViewById(R.id.repoType);
|
||||||
archiveRepo = itemView.findViewById(R.id.archiveRepoFrame);
|
archiveRepo = itemView.findViewById(R.id.archiveRepoFrame);
|
||||||
|
repoBranch = itemView.findViewById(R.id.repoBranch);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> {
|
itemView.setOnClickListener(v -> {
|
||||||
|
|
||||||
@ -89,13 +93,35 @@ public class ReposListAdapter extends RecyclerView.Adapter<ReposListAdapter.Repo
|
|||||||
tinyDb.putString("repoType", repoType_.getText().toString());
|
tinyDb.putString("repoType", repoType_.getText().toString());
|
||||||
//tinyDb.putBoolean("resumeIssues", true);
|
//tinyDb.putBoolean("resumeIssues", true);
|
||||||
tinyDb.putBoolean("isRepoAdmin", isRepoAdmin.isChecked());
|
tinyDb.putBoolean("isRepoAdmin", isRepoAdmin.isChecked());
|
||||||
|
tinyDb.putString("repoBranch", repoBranch.getText().toString());
|
||||||
|
|
||||||
//store if user is watching this repo
|
|
||||||
{
|
|
||||||
final String instanceUrl = tinyDb.getString("instanceUrl");
|
|
||||||
String[] parts = repoFullName.getText().toString().split("/");
|
String[] parts = repoFullName.getText().toString().split("/");
|
||||||
final String repoOwner = parts[0];
|
final String repoOwner = parts[0];
|
||||||
final String repoName = parts[1];
|
final String repoName = parts[1];
|
||||||
|
|
||||||
|
int currentActiveAccountId = tinyDb.getInt("currentActiveAccountId");
|
||||||
|
RepositoriesApi repositoryData = new RepositoriesApi(context);
|
||||||
|
|
||||||
|
//RepositoriesRepository.deleteRepositoriesByAccount(currentActiveAccountId);
|
||||||
|
Integer count = repositoryData.checkRepository(currentActiveAccountId, repoOwner, repoName);
|
||||||
|
|
||||||
|
if(count == 0) {
|
||||||
|
|
||||||
|
long id = repositoryData.insertRepository(currentActiveAccountId, repoOwner, repoName);
|
||||||
|
tinyDb.putLong("repositoryId", id);
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
Repository data = repositoryData.getRepository(currentActiveAccountId, repoOwner, repoName);
|
||||||
|
tinyDb.putLong("repositoryId", data.getRepositoryId());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//store if user is watching this repo
|
||||||
|
{
|
||||||
|
|
||||||
|
final String instanceUrl = tinyDb.getString("instanceUrl");
|
||||||
final String token = "token " + tinyDb.getString(tinyDb.getString("loginUid") + "-token");
|
final String token = "token " + tinyDb.getString(tinyDb.getString("loginUid") + "-token");
|
||||||
|
|
||||||
WatchInfo watch = new WatchInfo();
|
WatchInfo watch = new WatchInfo();
|
||||||
@ -136,6 +162,7 @@ public class ReposListAdapter extends RecyclerView.Adapter<ReposListAdapter.Repo
|
|||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
context.startActivity(intent);
|
context.startActivity(intent);
|
||||||
@ -211,6 +238,7 @@ public class ReposListAdapter extends RecyclerView.Adapter<ReposListAdapter.Repo
|
|||||||
|
|
||||||
UserRepositories currentItem = reposList.get(position);
|
UserRepositories currentItem = reposList.get(position);
|
||||||
holder.repoDescription.setVisibility(View.GONE);
|
holder.repoDescription.setVisibility(View.GONE);
|
||||||
|
holder.repoBranch.setText(currentItem.getDefault_branch());
|
||||||
|
|
||||||
ColorGenerator generator = ColorGenerator.MATERIAL;
|
ColorGenerator generator = ColorGenerator.MATERIAL;
|
||||||
int color = generator.getColor(currentItem.getName());
|
int color = generator.getColor(currentItem.getName());
|
||||||
@ -237,11 +265,11 @@ public class ReposListAdapter extends RecyclerView.Adapter<ReposListAdapter.Repo
|
|||||||
}
|
}
|
||||||
holder.fullName.setText(currentItem.getFullname());
|
holder.fullName.setText(currentItem.getFullname());
|
||||||
if(currentItem.getPrivateFlag()) {
|
if(currentItem.getPrivateFlag()) {
|
||||||
holder.repoPrivatePublic.setImageResource(R.drawable.ic_lock_bold);
|
holder.repoPrivatePublic.setImageResource(R.drawable.ic_lock);
|
||||||
holder.repoType.setText(R.string.strPrivate);
|
holder.repoType.setText(R.string.strPrivate);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
holder.repoPrivatePublic.setImageResource(R.drawable.ic_public);
|
holder.repoPrivatePublic.setImageResource(R.drawable.ic_unlock);
|
||||||
holder.repoType.setText(R.string.strPublic);
|
holder.repoType.setText(R.string.strPublic);
|
||||||
}
|
}
|
||||||
holder.repoStars.setText(currentItem.getStars_count());
|
holder.repoStars.setText(currentItem.getStars_count());
|
||||||
|
@ -13,6 +13,8 @@ import android.widget.Filterable;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import com.amulyakhare.textdrawable.TextDrawable;
|
import com.amulyakhare.textdrawable.TextDrawable;
|
||||||
import com.amulyakhare.textdrawable.util.ColorGenerator;
|
import com.amulyakhare.textdrawable.util.ColorGenerator;
|
||||||
import com.google.android.material.bottomsheet.BottomSheetDialog;
|
import com.google.android.material.bottomsheet.BottomSheetDialog;
|
||||||
@ -23,15 +25,15 @@ import org.mian.gitnex.activities.RepoStargazersActivity;
|
|||||||
import org.mian.gitnex.activities.RepoWatchersActivity;
|
import org.mian.gitnex.activities.RepoWatchersActivity;
|
||||||
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.RepositoriesApi;
|
||||||
|
import org.mian.gitnex.database.models.Repository;
|
||||||
import org.mian.gitnex.helpers.RoundedTransformation;
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.models.UserRepositories;
|
import org.mian.gitnex.models.UserRepositories;
|
||||||
import org.mian.gitnex.models.WatchInfo;
|
import org.mian.gitnex.models.WatchInfo;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
|
|
||||||
@ -58,6 +60,7 @@ public class RepositoriesByOrgAdapter extends RecyclerView.Adapter<RepositoriesB
|
|||||||
private TextView repoOpenIssuesCount;
|
private TextView repoOpenIssuesCount;
|
||||||
private TextView repoType;
|
private TextView repoType;
|
||||||
private LinearLayout archiveRepo;
|
private LinearLayout archiveRepo;
|
||||||
|
private TextView repoBranch;
|
||||||
|
|
||||||
private OrgReposViewHolder(View itemView) {
|
private OrgReposViewHolder(View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
@ -73,6 +76,7 @@ public class RepositoriesByOrgAdapter extends RecyclerView.Adapter<RepositoriesB
|
|||||||
ImageView reposDropdownMenu = itemView.findViewById(R.id.reposDropdownMenu);
|
ImageView reposDropdownMenu = itemView.findViewById(R.id.reposDropdownMenu);
|
||||||
repoType = itemView.findViewById(R.id.repoType);
|
repoType = itemView.findViewById(R.id.repoType);
|
||||||
archiveRepo = itemView.findViewById(R.id.archiveRepoFrame);
|
archiveRepo = itemView.findViewById(R.id.archiveRepoFrame);
|
||||||
|
repoBranch = itemView.findViewById(R.id.repoBranch);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> {
|
itemView.setOnClickListener(v -> {
|
||||||
|
|
||||||
@ -86,16 +90,36 @@ public class RepositoriesByOrgAdapter extends RecyclerView.Adapter<RepositoriesB
|
|||||||
tinyDb.putString("repoType", repoType.getText().toString());
|
tinyDb.putString("repoType", repoType.getText().toString());
|
||||||
//tinyDb.putBoolean("resumeIssues", true);
|
//tinyDb.putBoolean("resumeIssues", true);
|
||||||
tinyDb.putBoolean("isRepoAdmin", isRepoAdmin.isChecked());
|
tinyDb.putBoolean("isRepoAdmin", isRepoAdmin.isChecked());
|
||||||
|
tinyDb.putString("repoBranch", repoBranch.getText().toString());
|
||||||
|
|
||||||
//store if user is watching this repo
|
|
||||||
{
|
|
||||||
final String instanceUrl = tinyDb.getString("instanceUrl");
|
|
||||||
String[] parts = fullName.getText().toString().split("/");
|
String[] parts = fullName.getText().toString().split("/");
|
||||||
final String repoOwner = parts[0];
|
final String repoOwner = parts[0];
|
||||||
final String repoName = parts[1];
|
final String repoName = parts[1];
|
||||||
final String token = "token " + tinyDb.getString(tinyDb.getString("loginUid") + "-token");
|
|
||||||
|
|
||||||
WatchInfo watch = new WatchInfo();
|
int currentActiveAccountId = tinyDb.getInt("currentActiveAccountId");
|
||||||
|
RepositoriesApi repositoryData = new RepositoriesApi(context);
|
||||||
|
|
||||||
|
//RepositoriesRepository.deleteRepositoriesByAccount(currentActiveAccountId);
|
||||||
|
Integer count = repositoryData.checkRepository(currentActiveAccountId, repoOwner, repoName);
|
||||||
|
|
||||||
|
if(count == 0) {
|
||||||
|
|
||||||
|
long id = repositoryData.insertRepository(currentActiveAccountId, repoOwner, repoName);
|
||||||
|
tinyDb.putLong("repositoryId", id);
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
Repository data = repositoryData.getRepository(currentActiveAccountId, repoOwner, repoName);
|
||||||
|
tinyDb.putLong("repositoryId", data.getRepositoryId());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//store if user is watching this repo
|
||||||
|
{
|
||||||
|
|
||||||
|
final String instanceUrl = tinyDb.getString("instanceUrl");
|
||||||
|
final String token = "token " + tinyDb.getString(tinyDb.getString("loginUid") + "-token");
|
||||||
|
|
||||||
Call<WatchInfo> call;
|
Call<WatchInfo> call;
|
||||||
|
|
||||||
@ -133,6 +157,7 @@ public class RepositoriesByOrgAdapter extends RecyclerView.Adapter<RepositoriesB
|
|||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
context.startActivity(intent);
|
context.startActivity(intent);
|
||||||
@ -206,6 +231,7 @@ public class RepositoriesByOrgAdapter extends RecyclerView.Adapter<RepositoriesB
|
|||||||
|
|
||||||
UserRepositories currentItem = reposList.get(position);
|
UserRepositories currentItem = reposList.get(position);
|
||||||
holder.repoDescription.setVisibility(View.GONE);
|
holder.repoDescription.setVisibility(View.GONE);
|
||||||
|
holder.repoBranch.setText(currentItem.getDefault_branch());
|
||||||
|
|
||||||
ColorGenerator generator = ColorGenerator.MATERIAL;
|
ColorGenerator generator = ColorGenerator.MATERIAL;
|
||||||
int color = generator.getColor(currentItem.getName());
|
int color = generator.getColor(currentItem.getName());
|
||||||
@ -239,11 +265,11 @@ public class RepositoriesByOrgAdapter extends RecyclerView.Adapter<RepositoriesB
|
|||||||
}
|
}
|
||||||
holder.fullName.setText(currentItem.getFullname());
|
holder.fullName.setText(currentItem.getFullname());
|
||||||
if(currentItem.getPrivateFlag()) {
|
if(currentItem.getPrivateFlag()) {
|
||||||
holder.repoPrivatePublic.setImageResource(R.drawable.ic_lock_bold);
|
holder.repoPrivatePublic.setImageResource(R.drawable.ic_lock);
|
||||||
holder.repoType.setText(R.string.strPrivate);
|
holder.repoType.setText(R.string.strPrivate);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
holder.repoPrivatePublic.setImageResource(R.drawable.ic_public);
|
holder.repoPrivatePublic.setImageResource(R.drawable.ic_unlock);
|
||||||
holder.repoType.setText(R.string.strPublic);
|
holder.repoType.setText(R.string.strPublic);
|
||||||
}
|
}
|
||||||
holder.repoStars.setText(currentItem.getStars_count());
|
holder.repoStars.setText(currentItem.getStars_count());
|
||||||
|
@ -13,6 +13,8 @@ import android.widget.Filterable;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import com.amulyakhare.textdrawable.TextDrawable;
|
import com.amulyakhare.textdrawable.TextDrawable;
|
||||||
import com.amulyakhare.textdrawable.util.ColorGenerator;
|
import com.amulyakhare.textdrawable.util.ColorGenerator;
|
||||||
import com.google.android.material.bottomsheet.BottomSheetDialog;
|
import com.google.android.material.bottomsheet.BottomSheetDialog;
|
||||||
@ -23,15 +25,15 @@ import org.mian.gitnex.activities.RepoStargazersActivity;
|
|||||||
import org.mian.gitnex.activities.RepoWatchersActivity;
|
import org.mian.gitnex.activities.RepoWatchersActivity;
|
||||||
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.RepositoriesApi;
|
||||||
|
import org.mian.gitnex.database.models.Repository;
|
||||||
import org.mian.gitnex.helpers.RoundedTransformation;
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.models.UserRepositories;
|
import org.mian.gitnex.models.UserRepositories;
|
||||||
import org.mian.gitnex.models.WatchInfo;
|
import org.mian.gitnex.models.WatchInfo;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
|
|
||||||
@ -58,6 +60,7 @@ public class StarredReposListAdapter extends RecyclerView.Adapter<StarredReposLi
|
|||||||
private TextView repoOpenIssuesCount;
|
private TextView repoOpenIssuesCount;
|
||||||
private TextView repoType;
|
private TextView repoType;
|
||||||
private LinearLayout archiveRepo;
|
private LinearLayout archiveRepo;
|
||||||
|
private TextView repoBranch;
|
||||||
|
|
||||||
private StarredReposViewHolder(View itemView) {
|
private StarredReposViewHolder(View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
@ -73,6 +76,7 @@ public class StarredReposListAdapter extends RecyclerView.Adapter<StarredReposLi
|
|||||||
ImageView reposDropdownMenu = itemView.findViewById(R.id.reposDropdownMenu);
|
ImageView reposDropdownMenu = itemView.findViewById(R.id.reposDropdownMenu);
|
||||||
repoType = itemView.findViewById(R.id.repoType);
|
repoType = itemView.findViewById(R.id.repoType);
|
||||||
archiveRepo = itemView.findViewById(R.id.archiveRepoFrame);
|
archiveRepo = itemView.findViewById(R.id.archiveRepoFrame);
|
||||||
|
repoBranch = itemView.findViewById(R.id.repoBranch);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> {
|
itemView.setOnClickListener(v -> {
|
||||||
|
|
||||||
@ -86,13 +90,35 @@ public class StarredReposListAdapter extends RecyclerView.Adapter<StarredReposLi
|
|||||||
tinyDb.putString("repoType", repoType.getText().toString());
|
tinyDb.putString("repoType", repoType.getText().toString());
|
||||||
//tinyDb.putBoolean("resumeIssues", true);
|
//tinyDb.putBoolean("resumeIssues", true);
|
||||||
tinyDb.putBoolean("isRepoAdmin", isRepoAdmin.isChecked());
|
tinyDb.putBoolean("isRepoAdmin", isRepoAdmin.isChecked());
|
||||||
|
tinyDb.putString("repoBranch", repoBranch.getText().toString());
|
||||||
|
|
||||||
//store if user is watching this repo
|
|
||||||
{
|
|
||||||
final String instanceUrl = tinyDb.getString("instanceUrl");
|
|
||||||
String[] parts = fullName.getText().toString().split("/");
|
String[] parts = fullName.getText().toString().split("/");
|
||||||
final String repoOwner = parts[0];
|
final String repoOwner = parts[0];
|
||||||
final String repoName = parts[1];
|
final String repoName = parts[1];
|
||||||
|
|
||||||
|
int currentActiveAccountId = tinyDb.getInt("currentActiveAccountId");
|
||||||
|
RepositoriesApi repositoryData = new RepositoriesApi(context);
|
||||||
|
|
||||||
|
//RepositoriesRepository.deleteRepositoriesByAccount(currentActiveAccountId);
|
||||||
|
Integer count = repositoryData.checkRepository(currentActiveAccountId, repoOwner, repoName);
|
||||||
|
|
||||||
|
if(count == 0) {
|
||||||
|
|
||||||
|
long id = repositoryData.insertRepository(currentActiveAccountId, repoOwner, repoName);
|
||||||
|
tinyDb.putLong("repositoryId", id);
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
Repository data = repositoryData.getRepository(currentActiveAccountId, repoOwner, repoName);
|
||||||
|
tinyDb.putLong("repositoryId", data.getRepositoryId());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//store if user is watching this repo
|
||||||
|
{
|
||||||
|
|
||||||
|
final String instanceUrl = tinyDb.getString("instanceUrl");
|
||||||
final String token = "token " + tinyDb.getString(tinyDb.getString("loginUid") + "-token");
|
final String token = "token " + tinyDb.getString(tinyDb.getString("loginUid") + "-token");
|
||||||
|
|
||||||
WatchInfo watch = new WatchInfo();
|
WatchInfo watch = new WatchInfo();
|
||||||
@ -133,6 +159,7 @@ public class StarredReposListAdapter extends RecyclerView.Adapter<StarredReposLi
|
|||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
context.startActivity(intent);
|
context.startActivity(intent);
|
||||||
@ -207,6 +234,7 @@ public class StarredReposListAdapter extends RecyclerView.Adapter<StarredReposLi
|
|||||||
|
|
||||||
UserRepositories currentItem = reposList.get(position);
|
UserRepositories currentItem = reposList.get(position);
|
||||||
holder.repoDescription.setVisibility(View.GONE);
|
holder.repoDescription.setVisibility(View.GONE);
|
||||||
|
holder.repoBranch.setText(currentItem.getDefault_branch());
|
||||||
|
|
||||||
ColorGenerator generator = ColorGenerator.MATERIAL;
|
ColorGenerator generator = ColorGenerator.MATERIAL;
|
||||||
int color = generator.getColor(currentItem.getName());
|
int color = generator.getColor(currentItem.getName());
|
||||||
@ -240,11 +268,11 @@ public class StarredReposListAdapter extends RecyclerView.Adapter<StarredReposLi
|
|||||||
}
|
}
|
||||||
holder.fullName.setText(currentItem.getFullname());
|
holder.fullName.setText(currentItem.getFullname());
|
||||||
if(currentItem.getPrivateFlag()) {
|
if(currentItem.getPrivateFlag()) {
|
||||||
holder.repoPrivatePublic.setImageResource(R.drawable.ic_lock_bold);
|
holder.repoPrivatePublic.setImageResource(R.drawable.ic_lock);
|
||||||
holder.repoType.setText(R.string.strPrivate);
|
holder.repoType.setText(R.string.strPrivate);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
holder.repoPrivatePublic.setImageResource(R.drawable.ic_public);
|
holder.repoPrivatePublic.setImageResource(R.drawable.ic_unlock);
|
||||||
holder.repoType.setText(R.string.strPublic);
|
holder.repoType.setText(R.string.strPublic);
|
||||||
}
|
}
|
||||||
holder.repoStars.setText(currentItem.getStars_count());
|
holder.repoStars.setText(currentItem.getStars_count());
|
||||||
|
@ -11,10 +11,9 @@ import android.widget.ImageView;
|
|||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.clients.PicassoService;
|
import org.mian.gitnex.clients.PicassoService;
|
||||||
import org.mian.gitnex.helpers.FontsOverride;
|
|
||||||
import org.mian.gitnex.helpers.RoundedTransformation;
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.models.UserInfo;
|
import org.mian.gitnex.models.UserInfo;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -0,0 +1,116 @@
|
|||||||
|
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.ImageView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
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 org.mian.gitnex.helpers.Toasty;
|
||||||
|
import java.util.List;
|
||||||
|
import io.mikael.urlbuilder.UrlBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author M M Arif
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class UserAccountsAdapter extends RecyclerView.Adapter<UserAccountsAdapter.UserAccountsViewHolder> {
|
||||||
|
|
||||||
|
private List<UserAccount> userAccountsList;
|
||||||
|
private Context mCtx;
|
||||||
|
private TinyDB tinyDB;
|
||||||
|
|
||||||
|
static class UserAccountsViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
|
private TextView accountUrl;
|
||||||
|
private TextView userId;
|
||||||
|
private ImageView activeAccount;
|
||||||
|
private ImageView deleteAccount;
|
||||||
|
private ImageView repoAvatar;
|
||||||
|
|
||||||
|
private UserAccountsViewHolder(View itemView) {
|
||||||
|
|
||||||
|
super(itemView);
|
||||||
|
|
||||||
|
accountUrl = itemView.findViewById(R.id.accountUrl);
|
||||||
|
userId = itemView.findViewById(R.id.userId);
|
||||||
|
activeAccount = itemView.findViewById(R.id.activeAccount);
|
||||||
|
deleteAccount = itemView.findViewById(R.id.deleteAccount);
|
||||||
|
repoAvatar = itemView.findViewById(R.id.repoAvatar);
|
||||||
|
|
||||||
|
deleteAccount.setOnClickListener(itemDelete -> {
|
||||||
|
// use later to delete an account
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
itemView.setOnClickListener(itemEdit -> {
|
||||||
|
// use later to switch account
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserAccountsAdapter(Context mCtx, List<UserAccount> userAccountsListMain) {
|
||||||
|
|
||||||
|
this.mCtx = mCtx;
|
||||||
|
this.userAccountsList = userAccountsListMain;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void deleteAccount(int position) {
|
||||||
|
|
||||||
|
userAccountsList.remove(position);
|
||||||
|
notifyItemRemoved(position);
|
||||||
|
notifyItemRangeChanged(position, userAccountsList.size());
|
||||||
|
Toasty.info(mCtx, mCtx.getResources().getString(R.string.accountDeletedMessage));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public UserAccountsAdapter.UserAccountsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
|
|
||||||
|
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_user_accounts, parent, false);
|
||||||
|
return new UserAccountsViewHolder(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("DefaultLocale")
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(@NonNull UserAccountsAdapter.UserAccountsViewHolder holder, int position) {
|
||||||
|
|
||||||
|
UserAccount currentItem = userAccountsList.get(position);
|
||||||
|
tinyDB = new TinyDB(mCtx);
|
||||||
|
|
||||||
|
String url = UrlBuilder.fromString(currentItem.getInstanceUrl())
|
||||||
|
.withPath("/")
|
||||||
|
.toString();
|
||||||
|
|
||||||
|
holder.userId.setText(String.format("@%s", currentItem.getUserName()));
|
||||||
|
holder.accountUrl.setText(url);
|
||||||
|
|
||||||
|
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.repoAvatar);
|
||||||
|
|
||||||
|
if(tinyDB.getInt("currentActiveAccountId") == currentItem.getAccountId()) {
|
||||||
|
holder.activeAccount.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
holder.deleteAccount.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return userAccountsList.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -9,6 +9,9 @@ import android.view.ViewGroup;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.appcompat.app.AlertDialog;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.actions.CollaboratorActions;
|
import org.mian.gitnex.actions.CollaboratorActions;
|
||||||
import org.mian.gitnex.clients.PicassoService;
|
import org.mian.gitnex.clients.PicassoService;
|
||||||
@ -16,13 +19,10 @@ import org.mian.gitnex.clients.RetrofitClient;
|
|||||||
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.RoundedTransformation;
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.models.Collaborators;
|
import org.mian.gitnex.models.Collaborators;
|
||||||
import org.mian.gitnex.models.UserInfo;
|
import org.mian.gitnex.models.UserInfo;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.appcompat.app.AlertDialog;
|
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
|
@ -14,9 +14,9 @@ import org.mian.gitnex.clients.RetrofitClient;
|
|||||||
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.RoundedTransformation;
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.models.UserInfo;
|
import org.mian.gitnex.models.UserInfo;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
|
@ -2,10 +2,10 @@ package org.mian.gitnex.clients;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.FilesData;
|
import org.mian.gitnex.helpers.FilesData;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.ssl.MemorizingTrustManager;
|
import org.mian.gitnex.helpers.ssl.MemorizingTrustManager;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.security.SecureRandom;
|
import java.security.SecureRandom;
|
||||||
import javax.net.ssl.HttpsURLConnection;
|
import javax.net.ssl.HttpsURLConnection;
|
||||||
|
@ -2,12 +2,12 @@ package org.mian.gitnex.clients;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.FilesData;
|
import org.mian.gitnex.helpers.FilesData;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.ssl.MemorizingTrustManager;
|
import org.mian.gitnex.helpers.ssl.MemorizingTrustManager;
|
||||||
import org.mian.gitnex.interfaces.ApiInterface;
|
import org.mian.gitnex.interfaces.ApiInterface;
|
||||||
import org.mian.gitnex.interfaces.WebInterface;
|
import org.mian.gitnex.interfaces.WebInterface;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.security.SecureRandom;
|
import java.security.SecureRandom;
|
||||||
import javax.net.ssl.HttpsURLConnection;
|
import javax.net.ssl.HttpsURLConnection;
|
||||||
|
125
app/src/main/java/org/mian/gitnex/database/api/DraftsApi.java
Normal file
125
app/src/main/java/org/mian/gitnex/database/api/DraftsApi.java
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
package org.mian.gitnex.database.api;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.util.Log;
|
||||||
|
import androidx.lifecycle.LiveData;
|
||||||
|
import org.mian.gitnex.database.dao.DraftsDao;
|
||||||
|
import org.mian.gitnex.database.db.GitnexDatabase;
|
||||||
|
import org.mian.gitnex.database.models.Draft;
|
||||||
|
import org.mian.gitnex.database.models.DraftWithRepository;
|
||||||
|
import org.mian.gitnex.helpers.StaticGlobalVariables;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author M M Arif
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class DraftsApi {
|
||||||
|
|
||||||
|
private static DraftsDao draftsDao;
|
||||||
|
private static long draftId;
|
||||||
|
private static Integer checkDraftFlag;
|
||||||
|
|
||||||
|
public DraftsApi(Context context) {
|
||||||
|
|
||||||
|
GitnexDatabase db;
|
||||||
|
db = GitnexDatabase.getDatabaseInstance(context);
|
||||||
|
draftsDao = db.draftsDao();
|
||||||
|
}
|
||||||
|
|
||||||
|
public long insertDraft(int repositoryId, int draftAccountId, int issueId, String draftText, String draftType) {
|
||||||
|
|
||||||
|
Draft draft = new Draft();
|
||||||
|
draft.setDraftRepositoryId(repositoryId);
|
||||||
|
draft.setDraftAccountId(draftAccountId);
|
||||||
|
draft.setIssueId(issueId);
|
||||||
|
draft.setDraftText(draftText);
|
||||||
|
draft.setDraftType(draftType);
|
||||||
|
|
||||||
|
return insertDraftAsyncTask(draft);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static long insertDraftAsyncTask(final Draft draft) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
Thread thread = new Thread(() -> draftId = draftsDao.insertDraft(draft));
|
||||||
|
thread.start();
|
||||||
|
thread.join();
|
||||||
|
}
|
||||||
|
catch(InterruptedException e) {
|
||||||
|
|
||||||
|
Log.e(StaticGlobalVariables.draftsRepository, e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return draftId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getDraftIdAsync(int issueId, int draftRepositoryId) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
Thread thread = new Thread(() -> draftId = draftsDao.getDraftId(issueId, draftRepositoryId));
|
||||||
|
thread.start();
|
||||||
|
thread.join();
|
||||||
|
}
|
||||||
|
catch(InterruptedException e) {
|
||||||
|
|
||||||
|
Log.e(StaticGlobalVariables.draftsRepository, e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return draftId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer checkDraft(int issueId, int draftRepositoryId) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
Thread thread = new Thread(() -> checkDraftFlag = draftsDao.checkDraftDao(issueId, draftRepositoryId));
|
||||||
|
thread.start();
|
||||||
|
thread.join();
|
||||||
|
}
|
||||||
|
catch(InterruptedException e) {
|
||||||
|
|
||||||
|
Log.e(StaticGlobalVariables.draftsRepository, e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return checkDraftFlag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LiveData<List<DraftWithRepository>> getDrafts(int accountId) {
|
||||||
|
|
||||||
|
return draftsDao.fetchAllDrafts(accountId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public LiveData<Draft> getDraftByIssueId(int issueId) {
|
||||||
|
|
||||||
|
return draftsDao.fetchDraftByIssueId(issueId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteSingleDraft(final int draftId) {
|
||||||
|
|
||||||
|
final LiveData<Draft> draft = draftsDao.fetchDraftById(draftId);
|
||||||
|
|
||||||
|
if(draft != null) {
|
||||||
|
|
||||||
|
new Thread(() -> draftsDao.deleteByDraftId(draftId)).start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void deleteAllDrafts(final int accountId) {
|
||||||
|
|
||||||
|
new Thread(() -> draftsDao.deleteAllDrafts(accountId)).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void updateDraft(final String draftText, final int draftId) {
|
||||||
|
|
||||||
|
new Thread(() -> draftsDao.updateDraft(draftText, draftId)).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void updateDraftByIssueIdAsyncTask(final String draftText, final int issueId, final int draftRepositoryId) {
|
||||||
|
|
||||||
|
new Thread(() -> draftsDao.updateDraftByIssueId(draftText, issueId, draftRepositoryId)).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,140 @@
|
|||||||
|
package org.mian.gitnex.database.api;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.util.Log;
|
||||||
|
import androidx.lifecycle.LiveData;
|
||||||
|
import org.mian.gitnex.database.dao.RepositoriesDao;
|
||||||
|
import org.mian.gitnex.database.db.GitnexDatabase;
|
||||||
|
import org.mian.gitnex.database.models.Repository;
|
||||||
|
import org.mian.gitnex.helpers.StaticGlobalVariables;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author M M Arif
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class RepositoriesApi {
|
||||||
|
|
||||||
|
private static RepositoriesDao repositoriesDao;
|
||||||
|
private static long repositoryId;
|
||||||
|
private static Repository repository;
|
||||||
|
private static Integer checkRepository;
|
||||||
|
|
||||||
|
public RepositoriesApi(Context context) {
|
||||||
|
|
||||||
|
GitnexDatabase db;
|
||||||
|
db = GitnexDatabase.getDatabaseInstance(context);
|
||||||
|
repositoriesDao = db.repositoriesDao();
|
||||||
|
}
|
||||||
|
|
||||||
|
public long insertRepository(int repoAccountId, String repositoryOwner, String repositoryName) {
|
||||||
|
|
||||||
|
Repository repository = new Repository();
|
||||||
|
repository.setRepoAccountId(repoAccountId);
|
||||||
|
repository.setRepositoryOwner(repositoryOwner);
|
||||||
|
repository.setRepositoryName(repositoryName);
|
||||||
|
|
||||||
|
return insertRepositoryAsyncTask(repository);
|
||||||
|
}
|
||||||
|
|
||||||
|
public long insertRepositoryAsyncTask(Repository repository) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
Thread thread = new Thread(() -> repositoryId = repositoriesDao.newRepository(repository));
|
||||||
|
thread.start();
|
||||||
|
thread.join();
|
||||||
|
}
|
||||||
|
catch(InterruptedException e) {
|
||||||
|
|
||||||
|
Log.e(StaticGlobalVariables.repositoriesRepository, e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return repositoryId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Repository getRepository(int repoAccountId, String repositoryOwner, String repositoryName) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
Thread thread = new Thread(() -> repository = repositoriesDao.getSingleRepositoryDao(repoAccountId, repositoryOwner, repositoryName));
|
||||||
|
thread.start();
|
||||||
|
thread.join();
|
||||||
|
}
|
||||||
|
catch(InterruptedException e) {
|
||||||
|
|
||||||
|
Log.e(StaticGlobalVariables.repositoriesRepository, e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return repository;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LiveData<List<Repository>> getAllRepositories() {
|
||||||
|
|
||||||
|
return repositoriesDao.fetchAllRepositories();
|
||||||
|
}
|
||||||
|
|
||||||
|
public LiveData<List<Repository>> getAllRepositoriesByAccount(int repoAccountId) {
|
||||||
|
|
||||||
|
return repositoriesDao.getAllRepositoriesByAccountDao(repoAccountId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer checkRepository(int repoAccountId, String repositoryOwner, String repositoryName) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
Thread thread = new Thread(() -> checkRepository = repositoriesDao.checkRepositoryDao(repoAccountId, repositoryOwner, repositoryName));
|
||||||
|
thread.start();
|
||||||
|
thread.join();
|
||||||
|
}
|
||||||
|
catch(InterruptedException e) {
|
||||||
|
|
||||||
|
Log.e(StaticGlobalVariables.repositoriesRepository, e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return checkRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Repository fetchRepositoryById(int repositoryId) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
Thread thread = new Thread(() -> repository = repositoriesDao.fetchRepositoryByIdDao(repositoryId));
|
||||||
|
thread.start();
|
||||||
|
thread.join();
|
||||||
|
}
|
||||||
|
catch(InterruptedException e) {
|
||||||
|
|
||||||
|
Log.e(StaticGlobalVariables.repositoriesRepository, e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return repository;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Repository fetchRepositoryByAccountIdByRepositoryId(int repositoryId, int repoAccountId) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
Thread thread = new Thread(() -> repository = repositoriesDao.fetchRepositoryByAccountIdByRepositoryIdDao(repositoryId, repoAccountId));
|
||||||
|
thread.start();
|
||||||
|
thread.join();
|
||||||
|
}
|
||||||
|
catch(InterruptedException e) {
|
||||||
|
|
||||||
|
Log.e(StaticGlobalVariables.repositoriesRepository, e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return repository;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void deleteRepositoriesByAccount(final int repoAccountId) {
|
||||||
|
|
||||||
|
new Thread(() -> repositoriesDao.deleteRepositoriesByAccount(repoAccountId)).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void deleteRepository(final int repositoryId) {
|
||||||
|
|
||||||
|
new Thread(() -> repositoriesDao.deleteRepository(repositoryId)).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,98 @@
|
|||||||
|
package org.mian.gitnex.database.api;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.util.Log;
|
||||||
|
import androidx.lifecycle.LiveData;
|
||||||
|
import org.mian.gitnex.database.dao.UserAccountsDao;
|
||||||
|
import org.mian.gitnex.database.db.GitnexDatabase;
|
||||||
|
import org.mian.gitnex.database.models.UserAccount;
|
||||||
|
import org.mian.gitnex.helpers.StaticGlobalVariables;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author M M Arif
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class UserAccountsApi {
|
||||||
|
|
||||||
|
private static UserAccountsDao userAccountsDao;
|
||||||
|
private static UserAccount userAccount;
|
||||||
|
private static Integer checkAccount;
|
||||||
|
|
||||||
|
public UserAccountsApi(Context context) {
|
||||||
|
|
||||||
|
GitnexDatabase db;
|
||||||
|
db = GitnexDatabase.getDatabaseInstance(context);
|
||||||
|
userAccountsDao = db.userAccountsDao();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void insertNewAccount(String accountName, String instanceUrl, String userName, String token, String serverVersion) {
|
||||||
|
|
||||||
|
UserAccount userAccount = new UserAccount();
|
||||||
|
userAccount.setAccountName(accountName);
|
||||||
|
userAccount.setInstanceUrl(instanceUrl);
|
||||||
|
userAccount.setUserName(userName);
|
||||||
|
userAccount.setToken(token);
|
||||||
|
userAccount.setServerVersion(serverVersion);
|
||||||
|
|
||||||
|
insertNewAccountAsync(userAccount);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void insertNewAccountAsync(final UserAccount userAccount) {
|
||||||
|
|
||||||
|
new Thread(() -> userAccountsDao.newAccount(userAccount)).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void updateServerVersion(final String serverVersion, final int accountId) {
|
||||||
|
|
||||||
|
new Thread(() -> userAccountsDao.updateServerVersion(serverVersion, accountId)).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void updateToken(final int accountId, final String token) {
|
||||||
|
|
||||||
|
new Thread(() -> userAccountsDao.updateAccountToken(accountId, token)).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserAccount getAccountData(String accountName) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
Thread thread = new Thread(() -> userAccount = userAccountsDao.fetchRowByAccount_(accountName));
|
||||||
|
thread.start();
|
||||||
|
thread.join();
|
||||||
|
}
|
||||||
|
catch(InterruptedException e) {
|
||||||
|
|
||||||
|
Log.e(StaticGlobalVariables.userAccountsRepository, e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return userAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getCount(String accountName) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
Thread thread = new Thread(() -> checkAccount = userAccountsDao.getCount(accountName));
|
||||||
|
thread.start();
|
||||||
|
thread.join();
|
||||||
|
}
|
||||||
|
catch(InterruptedException e) {
|
||||||
|
|
||||||
|
Log.e(StaticGlobalVariables.userAccountsRepository, e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return checkAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LiveData<List<UserAccount>> getAllAccounts() {
|
||||||
|
|
||||||
|
return userAccountsDao.fetchAllAccounts();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void deleteAccount(final int accountId) {
|
||||||
|
|
||||||
|
new Thread(() -> userAccountsDao.deleteAccount(accountId)).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
package org.mian.gitnex.database.dao;
|
||||||
|
|
||||||
|
import androidx.lifecycle.LiveData;
|
||||||
|
import androidx.room.Dao;
|
||||||
|
import androidx.room.Insert;
|
||||||
|
import androidx.room.Query;
|
||||||
|
import org.mian.gitnex.database.models.Draft;
|
||||||
|
import org.mian.gitnex.database.models.DraftWithRepository;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author M M Arif
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Dao
|
||||||
|
public interface DraftsDao {
|
||||||
|
|
||||||
|
@Insert
|
||||||
|
long insertDraft(Draft drafts);
|
||||||
|
|
||||||
|
@Query("SELECT * FROM Drafts JOIN Repositories ON Repositories.repositoryId = Drafts.draftRepositoryId WHERE draftAccountId = :accountId" +
|
||||||
|
" ORDER BY " +
|
||||||
|
"draftId DESC")
|
||||||
|
LiveData<List<DraftWithRepository>> fetchAllDrafts(int accountId);
|
||||||
|
|
||||||
|
@Query("SELECT * FROM Drafts WHERE draftAccountId = :accountId ORDER BY draftId DESC")
|
||||||
|
LiveData<List<Draft>> fetchDrafts(int accountId);
|
||||||
|
|
||||||
|
@Query("SELECT * FROM Drafts WHERE draftAccountId = :accountId and draftRepositoryId = :repositoryId")
|
||||||
|
LiveData<Draft> fetchSingleDraftByAccountIdAndRepositoryId(int accountId, int repositoryId);
|
||||||
|
|
||||||
|
@Query("SELECT * FROM Drafts WHERE draftId = :draftId")
|
||||||
|
LiveData<Draft> fetchDraftById(int draftId);
|
||||||
|
|
||||||
|
@Query("SELECT * FROM Drafts WHERE issueId = :issueId")
|
||||||
|
LiveData<Draft> fetchDraftByIssueId(int issueId);
|
||||||
|
|
||||||
|
@Query("SELECT count(draftId) FROM Drafts WHERE issueId = :issueId AND draftRepositoryId = :draftRepositoryId")
|
||||||
|
Integer checkDraftDao(int issueId, int draftRepositoryId);
|
||||||
|
|
||||||
|
@Query("UPDATE Drafts SET draftText= :draftText WHERE draftId = :draftId")
|
||||||
|
void updateDraft(String draftText, int draftId);
|
||||||
|
|
||||||
|
@Query("UPDATE Drafts SET draftText= :draftText WHERE issueId = :issueId AND draftRepositoryId = :draftRepositoryId")
|
||||||
|
void updateDraftByIssueId(String draftText, int issueId, int draftRepositoryId);
|
||||||
|
|
||||||
|
@Query("SELECT draftId FROM Drafts WHERE issueId = :issueId AND draftRepositoryId = :draftRepositoryId")
|
||||||
|
Integer getDraftId(int issueId, int draftRepositoryId);
|
||||||
|
|
||||||
|
@Query("DELETE FROM Drafts WHERE draftId = :draftId")
|
||||||
|
void deleteByDraftId(int draftId);
|
||||||
|
|
||||||
|
@Query("DELETE FROM Drafts WHERE draftAccountId = :accountId")
|
||||||
|
void deleteAllDrafts(int accountId);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
package org.mian.gitnex.database.dao;
|
||||||
|
|
||||||
|
import androidx.lifecycle.LiveData;
|
||||||
|
import androidx.room.Dao;
|
||||||
|
import androidx.room.Insert;
|
||||||
|
import androidx.room.Query;
|
||||||
|
import org.mian.gitnex.database.models.Repository;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author M M Arif
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Dao
|
||||||
|
public interface RepositoriesDao {
|
||||||
|
|
||||||
|
@Insert
|
||||||
|
long newRepository(Repository repositories);
|
||||||
|
|
||||||
|
@Query("SELECT * FROM Repositories ORDER BY repositoryId ASC")
|
||||||
|
LiveData<List<Repository>> fetchAllRepositories();
|
||||||
|
|
||||||
|
@Query("SELECT * FROM Repositories WHERE repoAccountId = :repoAccountId")
|
||||||
|
LiveData<List<Repository>> getAllRepositoriesByAccountDao(int repoAccountId);
|
||||||
|
|
||||||
|
@Query("SELECT count(repositoryId) FROM Repositories WHERE repoAccountId = :repoAccountId AND repositoryOwner = :repositoryOwner AND repositoryName = :repositoryName")
|
||||||
|
Integer checkRepositoryDao(int repoAccountId, String repositoryOwner, String repositoryName);
|
||||||
|
|
||||||
|
@Query("SELECT * FROM Repositories WHERE repoAccountId = :repoAccountId AND repositoryOwner = :repositoryOwner AND repositoryName = :repositoryName")
|
||||||
|
Repository getSingleRepositoryDao(int repoAccountId, String repositoryOwner, String repositoryName);
|
||||||
|
|
||||||
|
@Query("SELECT * FROM Repositories WHERE repositoryId = :repositoryId")
|
||||||
|
Repository fetchRepositoryByIdDao(int repositoryId);
|
||||||
|
|
||||||
|
@Query("SELECT * FROM Repositories WHERE repositoryId = :repositoryId AND repoAccountId = :repoAccountId")
|
||||||
|
Repository fetchRepositoryByAccountIdByRepositoryIdDao(int repositoryId, int repoAccountId);
|
||||||
|
|
||||||
|
@Query("UPDATE Repositories SET repositoryOwner = :repositoryOwner, repositoryName = :repositoryName WHERE repositoryId = :repositoryId")
|
||||||
|
void updateRepositoryOwnerAndName(String repositoryOwner, String repositoryName, int repositoryId);
|
||||||
|
|
||||||
|
@Query("DELETE FROM Repositories WHERE repositoryId = :repositoryId")
|
||||||
|
void deleteRepository(int repositoryId);
|
||||||
|
|
||||||
|
@Query("DELETE FROM Repositories WHERE repoAccountId = :repoAccountId")
|
||||||
|
void deleteRepositoriesByAccount(int repoAccountId);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
package org.mian.gitnex.database.dao;
|
||||||
|
|
||||||
|
import androidx.lifecycle.LiveData;
|
||||||
|
import androidx.room.Dao;
|
||||||
|
import androidx.room.Insert;
|
||||||
|
import androidx.room.Query;
|
||||||
|
import org.mian.gitnex.database.models.UserAccount;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author M M Arif
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Dao
|
||||||
|
public interface UserAccountsDao {
|
||||||
|
|
||||||
|
@Insert
|
||||||
|
void newAccount(UserAccount userAccounts);
|
||||||
|
|
||||||
|
@Query("SELECT * FROM UserAccounts ORDER BY accountId ASC")
|
||||||
|
LiveData<List<UserAccount>> fetchAllAccounts();
|
||||||
|
|
||||||
|
@Query("SELECT COUNT(accountId) FROM UserAccounts WHERE accountName = :accountName")
|
||||||
|
Integer getCount(String accountName);
|
||||||
|
|
||||||
|
@Query("SELECT * FROM UserAccounts WHERE accountName = :accountName")
|
||||||
|
UserAccount fetchRowByAccount_(String accountName);
|
||||||
|
|
||||||
|
@Query("SELECT * FROM UserAccounts WHERE accountId = :accountId")
|
||||||
|
UserAccount fetchRowByAccountId(int accountId);
|
||||||
|
|
||||||
|
@Query("UPDATE UserAccounts SET serverVersion = :serverVersion WHERE accountId = :accountId")
|
||||||
|
void updateServerVersion(String serverVersion, int accountId);
|
||||||
|
|
||||||
|
@Query("UPDATE UserAccounts SET accountName = :accountName WHERE accountId = :accountId")
|
||||||
|
void updateAccountName(String accountName, int accountId);
|
||||||
|
|
||||||
|
@Query("UPDATE UserAccounts SET token = :token WHERE accountId = :accountId")
|
||||||
|
void updateAccountToken(int accountId, String token);
|
||||||
|
|
||||||
|
@Query("UPDATE UserAccounts SET instanceUrl = :instanceUrl, token = :token WHERE accountId = :accountId")
|
||||||
|
void updateHostInfo(String instanceUrl, String token, int accountId);
|
||||||
|
|
||||||
|
@Query("UPDATE UserAccounts SET userName = :userName WHERE accountId = :accountId")
|
||||||
|
void updateUserName(String userName, int accountId);
|
||||||
|
|
||||||
|
@Query("UPDATE UserAccounts SET instanceUrl = :instanceUrl, token = :token, userName = :userName, serverVersion = :serverVersion WHERE accountId = :accountId")
|
||||||
|
void updateAll(String instanceUrl, String token, String userName, String serverVersion, int accountId);
|
||||||
|
|
||||||
|
@Query("DELETE FROM UserAccounts WHERE accountId = :accountId")
|
||||||
|
void deleteAccount(int accountId);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,55 @@
|
|||||||
|
package org.mian.gitnex.database.db;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.room.Database;
|
||||||
|
import androidx.room.Room;
|
||||||
|
import androidx.room.RoomDatabase;
|
||||||
|
import androidx.room.migration.Migration;
|
||||||
|
import androidx.sqlite.db.SupportSQLiteDatabase;
|
||||||
|
import org.mian.gitnex.database.dao.DraftsDao;
|
||||||
|
import org.mian.gitnex.database.dao.RepositoriesDao;
|
||||||
|
import org.mian.gitnex.database.dao.UserAccountsDao;
|
||||||
|
import org.mian.gitnex.database.models.Draft;
|
||||||
|
import org.mian.gitnex.database.models.Repository;
|
||||||
|
import org.mian.gitnex.database.models.UserAccount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author M M Arif
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Database(entities = {Draft.class, Repository.class, UserAccount.class},
|
||||||
|
version = 1, exportSchema = false)
|
||||||
|
public abstract class GitnexDatabase extends RoomDatabase {
|
||||||
|
|
||||||
|
private static GitnexDatabase gitnexDatabase;
|
||||||
|
|
||||||
|
public static GitnexDatabase getDatabaseInstance(Context context) {
|
||||||
|
|
||||||
|
if (gitnexDatabase == null) {
|
||||||
|
String DB_NAME = "gitnex";
|
||||||
|
gitnexDatabase = Room.databaseBuilder(context, GitnexDatabase.class, DB_NAME)
|
||||||
|
//.fallbackToDestructiveMigration()
|
||||||
|
//.addMigrations(MIGRATION_1_2)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
return gitnexDatabase;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract DraftsDao draftsDao();
|
||||||
|
|
||||||
|
public abstract RepositoriesDao repositoriesDao();
|
||||||
|
|
||||||
|
public abstract UserAccountsDao userAccountsDao();
|
||||||
|
|
||||||
|
private static final Migration MIGRATION_1_2 = new Migration(1, 2) {
|
||||||
|
@Override
|
||||||
|
public void migrate(@NonNull SupportSQLiteDatabase database) {
|
||||||
|
|
||||||
|
//database.execSQL("DROP TABLE Drafts");
|
||||||
|
//database.execSQL("ALTER TABLE 'Drafts' ADD COLUMN 'draftType' TEXT");
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
89
app/src/main/java/org/mian/gitnex/database/models/Draft.java
Normal file
89
app/src/main/java/org/mian/gitnex/database/models/Draft.java
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
package org.mian.gitnex.database.models;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.ForeignKey;
|
||||||
|
import androidx.room.Index;
|
||||||
|
import androidx.room.PrimaryKey;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import static androidx.room.ForeignKey.CASCADE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author M M Arif
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Entity(tableName = "Drafts", foreignKeys = @ForeignKey(entity = Repository.class, parentColumns = "repositoryId", childColumns = "draftRepositoryId", onDelete = CASCADE), indices = {@Index("draftRepositoryId")})
|
||||||
|
public class Draft implements Serializable {
|
||||||
|
|
||||||
|
@PrimaryKey(autoGenerate = true)
|
||||||
|
private int draftId;
|
||||||
|
|
||||||
|
private int draftRepositoryId;
|
||||||
|
private int draftAccountId;
|
||||||
|
private int issueId;
|
||||||
|
private String draftText;
|
||||||
|
@Nullable
|
||||||
|
private String draftType;
|
||||||
|
|
||||||
|
public int getDraftId() {
|
||||||
|
|
||||||
|
return draftId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDraftId(int draftId) {
|
||||||
|
|
||||||
|
this.draftId = draftId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDraftRepositoryId() {
|
||||||
|
|
||||||
|
return draftRepositoryId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDraftRepositoryId(int draftRepositoryId) {
|
||||||
|
|
||||||
|
this.draftRepositoryId = draftRepositoryId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDraftAccountId() {
|
||||||
|
|
||||||
|
return draftAccountId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDraftAccountId(int draftAccountId) {
|
||||||
|
|
||||||
|
this.draftAccountId = draftAccountId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getIssueId() {
|
||||||
|
|
||||||
|
return issueId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIssueId(int issueId) {
|
||||||
|
|
||||||
|
this.issueId = issueId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDraftText() {
|
||||||
|
|
||||||
|
return draftText;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDraftText(String draftText) {
|
||||||
|
|
||||||
|
this.draftText = draftText;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public String getDraftType() {
|
||||||
|
|
||||||
|
return draftType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDraftType(@Nullable String draftType) {
|
||||||
|
|
||||||
|
this.draftType = draftType;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,122 @@
|
|||||||
|
package org.mian.gitnex.database.models;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author M M Arif
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class DraftWithRepository {
|
||||||
|
|
||||||
|
private int repositoryId;
|
||||||
|
private int draftId;
|
||||||
|
|
||||||
|
private int repoAccountId;
|
||||||
|
private String repositoryOwner;
|
||||||
|
private String repositoryName;
|
||||||
|
|
||||||
|
private int draftRepositoryId;
|
||||||
|
private int draftAccountId;
|
||||||
|
private int issueId;
|
||||||
|
private String draftText;
|
||||||
|
private String draftType;
|
||||||
|
|
||||||
|
public int getRepositoryId() {
|
||||||
|
|
||||||
|
return repositoryId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRepositoryId(int repositoryId) {
|
||||||
|
|
||||||
|
this.repositoryId = repositoryId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDraftId() {
|
||||||
|
|
||||||
|
return draftId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDraftId(int draftId) {
|
||||||
|
|
||||||
|
this.draftId = draftId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRepoAccountId() {
|
||||||
|
|
||||||
|
return repoAccountId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRepoAccountId(int repoAccountId) {
|
||||||
|
|
||||||
|
this.repoAccountId = repoAccountId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRepositoryOwner() {
|
||||||
|
|
||||||
|
return repositoryOwner;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRepositoryOwner(String repositoryOwner) {
|
||||||
|
|
||||||
|
this.repositoryOwner = repositoryOwner;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRepositoryName() {
|
||||||
|
|
||||||
|
return repositoryName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRepositoryName(String repositoryName) {
|
||||||
|
|
||||||
|
this.repositoryName = repositoryName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDraftRepositoryId() {
|
||||||
|
|
||||||
|
return draftRepositoryId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDraftRepositoryId(int draftRepositoryId) {
|
||||||
|
|
||||||
|
this.draftRepositoryId = draftRepositoryId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDraftAccountId() {
|
||||||
|
|
||||||
|
return draftAccountId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDraftAccountId(int draftAccountId) {
|
||||||
|
|
||||||
|
this.draftAccountId = draftAccountId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getIssueId() {
|
||||||
|
|
||||||
|
return issueId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIssueId(int issueId) {
|
||||||
|
|
||||||
|
this.issueId = issueId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDraftText() {
|
||||||
|
|
||||||
|
return draftText;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDraftText(String draftText) {
|
||||||
|
|
||||||
|
this.draftText = draftText;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDraftType() {
|
||||||
|
|
||||||
|
return draftType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDraftType(String draftType) {
|
||||||
|
|
||||||
|
this.draftType = draftType;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,59 @@
|
|||||||
|
package org.mian.gitnex.database.models;
|
||||||
|
|
||||||
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.ForeignKey;
|
||||||
|
import androidx.room.Index;
|
||||||
|
import androidx.room.PrimaryKey;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import static androidx.room.ForeignKey.CASCADE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author M M Arif
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Entity(tableName = "Repositories", foreignKeys = @ForeignKey(entity = UserAccount.class,
|
||||||
|
parentColumns = "accountId",
|
||||||
|
childColumns = "repoAccountId",
|
||||||
|
onDelete = CASCADE),
|
||||||
|
indices = {@Index("repoAccountId")})
|
||||||
|
public class Repository implements Serializable {
|
||||||
|
|
||||||
|
@PrimaryKey(autoGenerate = true)
|
||||||
|
private int repositoryId;
|
||||||
|
|
||||||
|
private int repoAccountId;
|
||||||
|
private String repositoryOwner;
|
||||||
|
private String repositoryName;
|
||||||
|
|
||||||
|
public int getRepositoryId() {
|
||||||
|
return repositoryId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRepositoryId(int repositoryId) {
|
||||||
|
this.repositoryId = repositoryId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRepoAccountId() {
|
||||||
|
return repoAccountId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRepoAccountId(int repoAccountId) {
|
||||||
|
this.repoAccountId = repoAccountId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRepositoryOwner() {
|
||||||
|
return repositoryOwner;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRepositoryOwner(String repositoryOwner) {
|
||||||
|
this.repositoryOwner = repositoryOwner;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRepositoryName() {
|
||||||
|
return repositoryName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRepositoryName(String repositoryName) {
|
||||||
|
this.repositoryName = repositoryName;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,75 @@
|
|||||||
|
package org.mian.gitnex.database.models;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.PrimaryKey;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author M M Arif
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Entity(tableName = "userAccounts")
|
||||||
|
public class UserAccount implements Serializable {
|
||||||
|
|
||||||
|
@PrimaryKey(autoGenerate = true)
|
||||||
|
private int accountId;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private String accountName;
|
||||||
|
private String instanceUrl;
|
||||||
|
private String userName;
|
||||||
|
private String token;
|
||||||
|
@Nullable
|
||||||
|
private String serverVersion;
|
||||||
|
|
||||||
|
public int getAccountId() {
|
||||||
|
return accountId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAccountId(int accountId) {
|
||||||
|
this.accountId = accountId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public String getAccountName() {
|
||||||
|
return accountName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAccountName(@Nullable String accountName) {
|
||||||
|
this.accountName = accountName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getInstanceUrl() {
|
||||||
|
return instanceUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInstanceUrl(String instanceUrl) {
|
||||||
|
this.instanceUrl = instanceUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUserName() {
|
||||||
|
return userName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserName(String userName) {
|
||||||
|
this.userName = userName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getToken() {
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setToken(String token) {
|
||||||
|
this.token = token;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public String getServerVersion() {
|
||||||
|
return serverVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setServerVersion(@Nullable String serverVersion) {
|
||||||
|
this.serverVersion = serverVersion;
|
||||||
|
}
|
||||||
|
}
|
@ -3,19 +3,18 @@ package org.mian.gitnex.fragments;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.fragment.app.Fragment;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
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.CreditsActivity;
|
||||||
import org.mian.gitnex.activities.MainActivity;
|
|
||||||
import org.mian.gitnex.activities.SponsorsActivity;
|
import org.mian.gitnex.activities.SponsorsActivity;
|
||||||
import org.mian.gitnex.util.AppUtil;
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -11,7 +11,7 @@ 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.AdminGetUsersActivity;
|
import org.mian.gitnex.activities.AdminGetUsersActivity;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
|
@ -0,0 +1,58 @@
|
|||||||
|
package org.mian.gitnex.fragments;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
|
||||||
|
import org.mian.gitnex.R;
|
||||||
|
import org.mian.gitnex.helpers.StaticGlobalVariables;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author M M Arif
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class BottomSheetDraftsFragment extends BottomSheetDialogFragment {
|
||||||
|
|
||||||
|
private String TAG = StaticGlobalVariables.tagDraftsBottomSheet;
|
||||||
|
private BottomSheetDraftsFragment.BottomSheetListener bmListener;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||||
|
View v = inflater.inflate(R.layout.bottom_sheet_drafts, container, false);
|
||||||
|
|
||||||
|
TextView deleteAllDrafts = v.findViewById(R.id.deleteAllDrafts);
|
||||||
|
|
||||||
|
deleteAllDrafts.setOnClickListener(v1 -> {
|
||||||
|
|
||||||
|
dismiss();
|
||||||
|
bmListener.onButtonClicked("deleteDrafts");
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface BottomSheetListener {
|
||||||
|
void onButtonClicked(String text);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAttach(@NonNull Context context) {
|
||||||
|
super.onAttach(context);
|
||||||
|
|
||||||
|
try {
|
||||||
|
bmListener = (BottomSheetDraftsFragment.BottomSheetListener) context;
|
||||||
|
}
|
||||||
|
catch (ClassCastException e) {
|
||||||
|
Log.e(TAG, e.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,81 @@
|
|||||||
|
package org.mian.gitnex.fragments;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
|
||||||
|
import org.mian.gitnex.R;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author opyale
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class BottomSheetNotificationsFilterFragment extends BottomSheetDialogFragment {
|
||||||
|
|
||||||
|
private TinyDB tinyDB;
|
||||||
|
private OnDismissedListener onDismissedListener;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAttach(@NonNull Context context) {
|
||||||
|
|
||||||
|
this.tinyDB = new TinyDB(context);
|
||||||
|
super.onAttach(context);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||||
|
|
||||||
|
View view = inflater.inflate(R.layout.bottom_sheet_notifications_filter, container, false);
|
||||||
|
|
||||||
|
TextView readNotifications = view.findViewById(R.id.readNotifications);
|
||||||
|
TextView unreadNotifications = view.findViewById(R.id.unreadNotifications);
|
||||||
|
|
||||||
|
readNotifications.setOnClickListener(v1 -> {
|
||||||
|
|
||||||
|
tinyDB.putString("notificationsFilterState", "read");
|
||||||
|
dismiss();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
unreadNotifications.setOnClickListener(v12 -> {
|
||||||
|
|
||||||
|
tinyDB.putString("notificationsFilterState", "unread");
|
||||||
|
dismiss();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
return view;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void dismiss() {
|
||||||
|
|
||||||
|
if(onDismissedListener != null) {
|
||||||
|
|
||||||
|
onDismissedListener.onDismissed();
|
||||||
|
}
|
||||||
|
|
||||||
|
super.dismiss();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOnDismissedListener(OnDismissedListener onDismissedListener) {
|
||||||
|
|
||||||
|
this.onDismissedListener = onDismissedListener;
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface OnDismissedListener {
|
||||||
|
|
||||||
|
void onDismissed();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,147 @@
|
|||||||
|
package org.mian.gitnex.fragments;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
|
||||||
|
import org.mian.gitnex.R;
|
||||||
|
import org.mian.gitnex.actions.NotificationsActions;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
|
import org.mian.gitnex.models.NotificationThread;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author opyale
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class BottomSheetNotificationsFragment extends BottomSheetDialogFragment {
|
||||||
|
|
||||||
|
private Context context;
|
||||||
|
private NotificationThread notificationThread;
|
||||||
|
private OnOptionSelectedListener onOptionSelectedListener;
|
||||||
|
|
||||||
|
public void onAttach(Context context, NotificationThread notificationThread, OnOptionSelectedListener onOptionSelectedListener) {
|
||||||
|
|
||||||
|
this.context = context;
|
||||||
|
this.notificationThread = notificationThread;
|
||||||
|
this.onOptionSelectedListener = onOptionSelectedListener;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||||
|
|
||||||
|
View v = inflater.inflate(R.layout.bottom_sheet_notifications, container, false);
|
||||||
|
|
||||||
|
TextView markRead = v.findViewById(R.id.markRead);
|
||||||
|
TextView markUnread = v.findViewById(R.id.markUnread);
|
||||||
|
TextView markPinned = v.findViewById(R.id.markPinned);
|
||||||
|
|
||||||
|
NotificationsActions notificationsActions = new NotificationsActions(context);
|
||||||
|
Activity activity = Objects.requireNonNull(getActivity());
|
||||||
|
|
||||||
|
if(notificationThread.isPinned()) {
|
||||||
|
|
||||||
|
AppUtil.setMultiVisibility(View.GONE, markUnread, markPinned);
|
||||||
|
} else if(notificationThread.isUnread()) {
|
||||||
|
|
||||||
|
markUnread.setVisibility(View.GONE);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
markRead.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
markPinned.setOnClickListener(v12 -> {
|
||||||
|
|
||||||
|
Thread thread = new Thread(() -> {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
notificationsActions.setNotificationStatus(notificationThread, NotificationsActions.NotificationStatus.PINNED);
|
||||||
|
activity.runOnUiThread(() -> onOptionSelectedListener.onSelected());
|
||||||
|
|
||||||
|
}
|
||||||
|
catch(Exception e) {
|
||||||
|
|
||||||
|
activity.runOnUiThread(() -> Toasty.error(context, getString(R.string.genericError)));
|
||||||
|
Log.e("onError", e.toString());
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
thread.start();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
markRead.setOnClickListener(v1 -> {
|
||||||
|
|
||||||
|
Thread thread = new Thread(() -> {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
notificationsActions.setNotificationStatus(notificationThread, NotificationsActions.NotificationStatus.READ);
|
||||||
|
activity.runOnUiThread(() -> onOptionSelectedListener.onSelected());
|
||||||
|
|
||||||
|
}
|
||||||
|
catch(Exception e) {
|
||||||
|
|
||||||
|
activity.runOnUiThread(() -> Toasty.error(context, getString(R.string.genericError)));
|
||||||
|
Log.e("onError", e.toString());
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
thread.start();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
markUnread.setOnClickListener(v13 -> {
|
||||||
|
|
||||||
|
Thread thread = new Thread(() -> {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
notificationsActions.setNotificationStatus(notificationThread, NotificationsActions.NotificationStatus.UNREAD);
|
||||||
|
activity.runOnUiThread(() -> onOptionSelectedListener.onSelected());
|
||||||
|
|
||||||
|
}
|
||||||
|
catch(Exception e) {
|
||||||
|
|
||||||
|
activity.runOnUiThread(() -> Toasty.error(context, getString(R.string.genericError)));
|
||||||
|
Log.e("onError", e.toString());
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
thread.start();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
return v;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface OnOptionSelectedListener {
|
||||||
|
|
||||||
|
void onSelected();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -22,43 +22,42 @@ public class BottomSheetOrganizationFragment extends BottomSheetDialogFragment {
|
|||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||||
|
|
||||||
View v = inflater.inflate(R.layout.bottom_sheet_organization, container, false);
|
View v = inflater.inflate(R.layout.bottom_sheet_organization, container, false);
|
||||||
|
|
||||||
TextView createTeam = v.findViewById(R.id.createTeam);
|
TextView createTeam = v.findViewById(R.id.createTeam);
|
||||||
TextView createRepository = v.findViewById(R.id.createRepository);
|
TextView createRepository = v.findViewById(R.id.createRepository);
|
||||||
|
|
||||||
createTeam.setOnClickListener(new View.OnClickListener() {
|
createTeam.setOnClickListener(v1 -> {
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
bmListener.onButtonClicked("team");
|
bmListener.onButtonClicked("team");
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
createRepository.setOnClickListener(new View.OnClickListener() {
|
createRepository.setOnClickListener(v12 -> {
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
bmListener.onButtonClicked("repository");
|
bmListener.onButtonClicked("repository");
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface BottomSheetListener {
|
public interface BottomSheetListener {
|
||||||
|
|
||||||
void onButtonClicked(String text);
|
void onButtonClicked(String text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAttach(@NonNull Context context) {
|
public void onAttach(@NonNull Context context) {
|
||||||
|
|
||||||
super.onAttach(context);
|
super.onAttach(context);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
bmListener = (BottomSheetOrganizationFragment.BottomSheetListener) context;
|
bmListener = (BottomSheetOrganizationFragment.BottomSheetListener) context;
|
||||||
} catch (ClassCastException e) {
|
}
|
||||||
throw new ClassCastException(context.toString()
|
catch (ClassCastException e) {
|
||||||
+ " must implement BottomSheetListener");
|
throw new ClassCastException(context.toString() + " must implement BottomSheetListener");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,12 +6,12 @@ import android.view.LayoutInflater;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
|
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.actions.RepositoryActions;
|
import org.mian.gitnex.actions.RepositoryActions;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
@ -41,38 +41,33 @@ public class BottomSheetRepoFragment extends BottomSheetDialogFragment {
|
|||||||
TextView unWatchRepository = v.findViewById(R.id.unWatchRepository);
|
TextView unWatchRepository = v.findViewById(R.id.unWatchRepository);
|
||||||
TextView shareRepository = v.findViewById(R.id.shareRepository);
|
TextView shareRepository = v.findViewById(R.id.shareRepository);
|
||||||
|
|
||||||
createLabel.setOnClickListener(new View.OnClickListener() {
|
createLabel.setOnClickListener(v112 -> {
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
bmListener.onButtonClicked("label");
|
bmListener.onButtonClicked("label");
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if(tinyDb.getBoolean("hasIssues")) {
|
if(tinyDb.getBoolean("hasIssues")) {
|
||||||
createIssue.setVisibility(View.VISIBLE);
|
createIssue.setVisibility(View.VISIBLE);
|
||||||
createIssue.setOnClickListener(new View.OnClickListener() {
|
createIssue.setOnClickListener(v12 -> {
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
bmListener.onButtonClicked("newIssue");
|
bmListener.onButtonClicked("newIssue");
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
createIssue.setVisibility(View.GONE);
|
createIssue.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
createMilestone.setOnClickListener(new View.OnClickListener() {
|
createMilestone.setOnClickListener(v13 -> {
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
bmListener.onButtonClicked("newMilestone");
|
bmListener.onButtonClicked("newMilestone");
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (tinyDb.getBoolean("isRepoAdmin")) {
|
if (tinyDb.getBoolean("isRepoAdmin")) {
|
||||||
addCollaborator.setOnClickListener(v1 -> {
|
addCollaborator.setOnClickListener(v1 -> {
|
||||||
|
|
||||||
bmListener.onButtonClicked("addCollaborator");
|
bmListener.onButtonClicked("addCollaborator");
|
||||||
dismiss();
|
dismiss();
|
||||||
});
|
});
|
||||||
@ -80,67 +75,51 @@ public class BottomSheetRepoFragment extends BottomSheetDialogFragment {
|
|||||||
addCollaborator.setVisibility(View.GONE);
|
addCollaborator.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
createRelease.setOnClickListener(new View.OnClickListener() {
|
createRelease.setOnClickListener(v14 -> {
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
bmListener.onButtonClicked("createRelease");
|
bmListener.onButtonClicked("createRelease");
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shareRepository.setOnClickListener(new View.OnClickListener() {
|
shareRepository.setOnClickListener(v15 -> {
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
bmListener.onButtonClicked("shareRepo");
|
bmListener.onButtonClicked("shareRepo");
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
openWebRepo.setOnClickListener(new View.OnClickListener() {
|
openWebRepo.setOnClickListener(v16 -> {
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
bmListener.onButtonClicked("openWebRepo");
|
bmListener.onButtonClicked("openWebRepo");
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
newFile.setOnClickListener(new View.OnClickListener() {
|
newFile.setOnClickListener(v17 -> {
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
bmListener.onButtonClicked("newFile");
|
bmListener.onButtonClicked("newFile");
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if(tinyDb.getInt("repositoryStarStatus") == 204) { // star a repo
|
if(tinyDb.getInt("repositoryStarStatus") == 204) { // star a repo
|
||||||
|
|
||||||
starRepository.setVisibility(View.GONE);
|
starRepository.setVisibility(View.GONE);
|
||||||
|
unStarRepository.setOnClickListener(v18 -> {
|
||||||
unStarRepository.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
|
|
||||||
RepositoryActions.unStarRepository(getContext());
|
RepositoryActions.unStarRepository(getContext());
|
||||||
tinyDb.putInt("repositoryStarStatus", 404);
|
tinyDb.putInt("repositoryStarStatus", 404);
|
||||||
dismiss();
|
dismiss();
|
||||||
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
else if(tinyDb.getInt("repositoryStarStatus") == 404) {
|
else if(tinyDb.getInt("repositoryStarStatus") == 404) {
|
||||||
|
|
||||||
unStarRepository.setVisibility(View.GONE);
|
unStarRepository.setVisibility(View.GONE);
|
||||||
|
starRepository.setOnClickListener(v19 -> {
|
||||||
starRepository.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
|
|
||||||
RepositoryActions.starRepository(getContext());
|
RepositoryActions.starRepository(getContext());
|
||||||
tinyDb.putInt("repositoryStarStatus", 204);
|
tinyDb.putInt("repositoryStarStatus", 204);
|
||||||
dismiss();
|
dismiss();
|
||||||
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -148,32 +127,24 @@ public class BottomSheetRepoFragment extends BottomSheetDialogFragment {
|
|||||||
if(tinyDb.getBoolean("repositoryWatchStatus")) { // watch a repo
|
if(tinyDb.getBoolean("repositoryWatchStatus")) { // watch a repo
|
||||||
|
|
||||||
watchRepository.setVisibility(View.GONE);
|
watchRepository.setVisibility(View.GONE);
|
||||||
|
unWatchRepository.setOnClickListener(v110 -> {
|
||||||
unWatchRepository.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
|
|
||||||
RepositoryActions.unWatchRepository(getContext());
|
RepositoryActions.unWatchRepository(getContext());
|
||||||
tinyDb.putBoolean("repositoryWatchStatus", false);
|
tinyDb.putBoolean("repositoryWatchStatus", false);
|
||||||
dismiss();
|
dismiss();
|
||||||
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
unWatchRepository.setVisibility(View.GONE);
|
unWatchRepository.setVisibility(View.GONE);
|
||||||
|
watchRepository.setOnClickListener(v111 -> {
|
||||||
watchRepository.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
|
|
||||||
RepositoryActions.watchRepository(getContext());
|
RepositoryActions.watchRepository(getContext());
|
||||||
tinyDb.putBoolean("repositoryWatchStatus", true);
|
tinyDb.putBoolean("repositoryWatchStatus", true);
|
||||||
dismiss();
|
dismiss();
|
||||||
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -20,9 +20,9 @@ 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.PathsHelper;
|
||||||
|
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 org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@ -55,7 +55,7 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment {
|
|||||||
TextView subscribeIssue = v.findViewById(R.id.subscribeIssue);
|
TextView subscribeIssue = v.findViewById(R.id.subscribeIssue);
|
||||||
TextView unsubscribeIssue = v.findViewById(R.id.unsubscribeIssue);
|
TextView unsubscribeIssue = v.findViewById(R.id.unsubscribeIssue);
|
||||||
|
|
||||||
if(tinyDB.getString("issueType").equals("pr")) {
|
if(tinyDB.getString("issueType").equalsIgnoreCase("Pull")) {
|
||||||
|
|
||||||
editIssue.setText(R.string.editPrText);
|
editIssue.setText(R.string.editPrText);
|
||||||
copyIssueUrl.setText(R.string.copyPrUrlText);
|
copyIssueUrl.setText(R.string.copyPrUrlText);
|
||||||
@ -199,7 +199,7 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if(tinyDB.getString("issueType").equals("issue")) {
|
if(tinyDB.getString("issueType").equalsIgnoreCase("Issue")) {
|
||||||
|
|
||||||
if(tinyDB.getString("issueState").equals("open")) { // close issue
|
if(tinyDB.getString("issueState").equals("open")) { // close issue
|
||||||
|
|
||||||
|
@ -2,6 +2,12 @@ package org.mian.gitnex.fragments;
|
|||||||
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ProgressBar;
|
||||||
|
import android.widget.TextView;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
@ -11,17 +17,11 @@ import androidx.recyclerview.widget.DividerItemDecoration;
|
|||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||||
import android.os.Handler;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.ProgressBar;
|
|
||||||
import android.widget.TextView;
|
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.adapters.BranchesAdapter;
|
import org.mian.gitnex.adapters.BranchesAdapter;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.models.Branches;
|
import org.mian.gitnex.models.Branches;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import org.mian.gitnex.viewmodels.BranchesViewModel;
|
import org.mian.gitnex.viewmodels.BranchesViewModel;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -2,22 +2,22 @@ package org.mian.gitnex.fragments;
|
|||||||
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.fragment.app.Fragment;
|
|
||||||
import androidx.lifecycle.Observer;
|
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.GridView;
|
import android.widget.GridView;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.fragment.app.Fragment;
|
||||||
|
import androidx.lifecycle.Observer;
|
||||||
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.adapters.CollaboratorsAdapter;
|
import org.mian.gitnex.adapters.CollaboratorsAdapter;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.models.Collaborators;
|
import org.mian.gitnex.models.Collaborators;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import org.mian.gitnex.viewmodels.CollaboratorsViewModel;
|
import org.mian.gitnex.viewmodels.CollaboratorsViewModel;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
183
app/src/main/java/org/mian/gitnex/fragments/DraftsFragment.java
Normal file
183
app/src/main/java/org/mian/gitnex/fragments/DraftsFragment.java
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
package org.mian.gitnex.fragments;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuInflater;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.view.inputmethod.EditorInfo;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.appcompat.widget.SearchView;
|
||||||
|
import androidx.fragment.app.Fragment;
|
||||||
|
import androidx.recyclerview.widget.DividerItemDecoration;
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||||
|
import org.mian.gitnex.R;
|
||||||
|
import org.mian.gitnex.adapters.DraftsAdapter;
|
||||||
|
import org.mian.gitnex.database.api.DraftsApi;
|
||||||
|
import org.mian.gitnex.database.models.DraftWithRepository;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author M M Arif
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class DraftsFragment extends Fragment {
|
||||||
|
|
||||||
|
private Context ctx;
|
||||||
|
private DraftsAdapter adapter;
|
||||||
|
private RecyclerView mRecyclerView;
|
||||||
|
private DraftsApi draftsApi;
|
||||||
|
private TextView noData;
|
||||||
|
private List<DraftWithRepository> draftsList_;
|
||||||
|
private int currentActiveAccountId;
|
||||||
|
private SwipeRefreshLayout swipeRefresh;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
|
Bundle savedInstanceState) {
|
||||||
|
|
||||||
|
View v = inflater.inflate(R.layout.fragment_drafts, container, false);
|
||||||
|
ctx = getContext();
|
||||||
|
setHasOptionsMenu(true);
|
||||||
|
|
||||||
|
TinyDB tinyDb = new TinyDB(ctx);
|
||||||
|
|
||||||
|
draftsList_ = new ArrayList<>();
|
||||||
|
draftsApi = new DraftsApi(ctx);
|
||||||
|
|
||||||
|
noData = v.findViewById(R.id.noData);
|
||||||
|
mRecyclerView = v.findViewById(R.id.recyclerView);
|
||||||
|
swipeRefresh = v.findViewById(R.id.pullToRefresh);
|
||||||
|
|
||||||
|
mRecyclerView.setHasFixedSize(true);
|
||||||
|
mRecyclerView.setLayoutManager(new LinearLayoutManager(ctx));
|
||||||
|
|
||||||
|
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mRecyclerView.getContext(),
|
||||||
|
DividerItemDecoration.VERTICAL);
|
||||||
|
mRecyclerView.addItemDecoration(dividerItemDecoration);
|
||||||
|
|
||||||
|
adapter = new DraftsAdapter(getContext(), draftsList_);
|
||||||
|
|
||||||
|
currentActiveAccountId = tinyDb.getInt("currentActiveAccountId");
|
||||||
|
|
||||||
|
swipeRefresh.setOnRefreshListener(() -> new Handler().postDelayed(() -> {
|
||||||
|
|
||||||
|
draftsList_.clear();
|
||||||
|
fetchDataAsync(currentActiveAccountId);
|
||||||
|
|
||||||
|
}, 250));
|
||||||
|
|
||||||
|
fetchDataAsync(currentActiveAccountId);
|
||||||
|
|
||||||
|
return v;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fetchDataAsync(int accountId) {
|
||||||
|
|
||||||
|
draftsApi.getDrafts(accountId).observe(getViewLifecycleOwner(), drafts -> {
|
||||||
|
|
||||||
|
swipeRefresh.setRefreshing(false);
|
||||||
|
assert drafts != null;
|
||||||
|
if(drafts.size() > 0) {
|
||||||
|
|
||||||
|
draftsList_.clear();
|
||||||
|
noData.setVisibility(View.GONE);
|
||||||
|
draftsList_.addAll(drafts);
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
mRecyclerView.setAdapter(adapter);
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
noData.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
draftsList_.clear();
|
||||||
|
fetchDataAsync(currentActiveAccountId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteAllDrafts(int accountId) {
|
||||||
|
|
||||||
|
if(draftsList_.size() > 0) {
|
||||||
|
|
||||||
|
DraftsApi.deleteAllDrafts(accountId);
|
||||||
|
draftsList_.clear();
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
Toasty.info(ctx, getResources().getString(R.string.draftsDeleteSuccess));
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Toasty.error(ctx, getResources().getString(R.string.draftsListEmpty));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
|
||||||
|
|
||||||
|
inflater.inflate(R.menu.generic_nav_dotted_menu, menu);
|
||||||
|
inflater.inflate(R.menu.search_menu, menu);
|
||||||
|
super.onCreateOptionsMenu(menu, inflater);
|
||||||
|
|
||||||
|
MenuItem searchItem = menu.findItem(R.id.action_search);
|
||||||
|
SearchView searchView = (SearchView) searchItem.getActionView();
|
||||||
|
searchView.setImeOptions(EditorInfo.IME_ACTION_DONE);
|
||||||
|
|
||||||
|
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onQueryTextSubmit(String query) {
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onQueryTextChange(String newText) {
|
||||||
|
|
||||||
|
filter(newText);
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void filter(String text) {
|
||||||
|
|
||||||
|
List<DraftWithRepository> arr = new ArrayList<>();
|
||||||
|
|
||||||
|
for(DraftWithRepository d : draftsList_) {
|
||||||
|
|
||||||
|
if(d == null || d.getRepositoryOwner() == null || d.getRepositoryName() == null || d.getDraftText() == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(d.getRepositoryOwner().toLowerCase().contains(text) || d.getRepositoryName().toLowerCase().contains(text)
|
||||||
|
|| d.getDraftText().toLowerCase().contains(text) || String.valueOf(d.getIssueId()).contains(text)) {
|
||||||
|
arr.add(d);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
adapter.updateList(arr);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -20,9 +20,9 @@ import org.mian.gitnex.R;
|
|||||||
import org.mian.gitnex.adapters.ExploreRepositoriesAdapter;
|
import org.mian.gitnex.adapters.ExploreRepositoriesAdapter;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.models.ExploreRepositories;
|
import org.mian.gitnex.models.ExploreRepositories;
|
||||||
import org.mian.gitnex.models.UserRepositories;
|
import org.mian.gitnex.models.UserRepositories;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
|
@ -15,23 +15,21 @@ import android.widget.LinearLayout;
|
|||||||
import android.widget.ProgressBar;
|
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.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.lifecycle.Observer;
|
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
import androidx.recyclerview.widget.DividerItemDecoration;
|
import androidx.recyclerview.widget.DividerItemDecoration;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.activities.FileViewActivity;
|
import org.mian.gitnex.activities.FileViewActivity;
|
||||||
|
import org.mian.gitnex.activities.RepoDetailActivity;
|
||||||
import org.mian.gitnex.adapters.FilesAdapter;
|
import org.mian.gitnex.adapters.FilesAdapter;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
import org.mian.gitnex.models.Files;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.util.TinyDB;
|
|
||||||
import org.mian.gitnex.viewmodels.FilesViewModel;
|
import org.mian.gitnex.viewmodels.FilesViewModel;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import moe.feng.common.view.breadcrumbs.BreadcrumbsView;
|
import moe.feng.common.view.breadcrumbs.BreadcrumbsView;
|
||||||
import moe.feng.common.view.breadcrumbs.DefaultBreadcrumbsCallback;
|
import moe.feng.common.view.breadcrumbs.DefaultBreadcrumbsCallback;
|
||||||
@ -51,10 +49,12 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter
|
|||||||
private TextView fileStructure;
|
private TextView fileStructure;
|
||||||
private static String repoNameF = "param2";
|
private static String repoNameF = "param2";
|
||||||
private static String repoOwnerF = "param1";
|
private static String repoOwnerF = "param1";
|
||||||
|
private static String repoRefF = "param3";
|
||||||
private BreadcrumbsView mBreadcrumbsView;
|
private BreadcrumbsView mBreadcrumbsView;
|
||||||
|
|
||||||
private String repoName;
|
private String repoName;
|
||||||
private String repoOwner;
|
private String repoOwner;
|
||||||
|
private String ref;
|
||||||
|
|
||||||
private OnFragmentInteractionListener mListener;
|
private OnFragmentInteractionListener mListener;
|
||||||
|
|
||||||
@ -62,12 +62,13 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static FilesFragment newInstance(String param1, String param2) {
|
public static FilesFragment newInstance(String param1, String param2, String param3) {
|
||||||
|
|
||||||
FilesFragment fragment = new FilesFragment();
|
FilesFragment fragment = new FilesFragment();
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putString(repoOwnerF, param1);
|
args.putString(repoOwnerF, param1);
|
||||||
args.putString(repoNameF, param2);
|
args.putString(repoNameF, param2);
|
||||||
|
args.putString(repoRefF, param3);
|
||||||
fragment.setArguments(args);
|
fragment.setArguments(args);
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
@ -79,6 +80,7 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter
|
|||||||
if(getArguments() != null) {
|
if(getArguments() != null) {
|
||||||
repoName = getArguments().getString(repoNameF);
|
repoName = getArguments().getString(repoNameF);
|
||||||
repoOwner = getArguments().getString(repoOwnerF);
|
repoOwner = getArguments().getString(repoOwnerF);
|
||||||
|
ref = getArguments().getString(repoRefF);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,9 +109,18 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter
|
|||||||
mProgressBar = v.findViewById(R.id.progress_bar);
|
mProgressBar = v.findViewById(R.id.progress_bar);
|
||||||
|
|
||||||
mBreadcrumbsView = v.findViewById(R.id.breadcrumbs_view);
|
mBreadcrumbsView = v.findViewById(R.id.breadcrumbs_view);
|
||||||
mBreadcrumbsView.setItems(new ArrayList<>(Arrays.asList(BreadcrumbItem.createSimpleItem(getResources().getString(R.string.filesBreadcrumbRoot)))));
|
mBreadcrumbsView.setItems(new ArrayList<>(Collections.singletonList(BreadcrumbItem.createSimpleItem(getResources().getString(R.string.filesBreadcrumbRoot) + getResources().getString(R.string.colonDivider) + ref))));
|
||||||
|
|
||||||
fetchDataAsync(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName);
|
((RepoDetailActivity) Objects.requireNonNull(getActivity())).setFragmentRefreshListenerFiles(repoBranch -> {
|
||||||
|
|
||||||
|
fileStructure.setText("");
|
||||||
|
ref = repoBranch;
|
||||||
|
mBreadcrumbsView.setItems(new ArrayList<>(Collections.singletonList(BreadcrumbItem.createSimpleItem(getResources().getString(R.string.filesBreadcrumbRoot) + getResources().getString(R.string.colonDivider) + ref))));
|
||||||
|
fetchDataAsync(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName, repoBranch);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
fetchDataAsync(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName, ref);
|
||||||
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
@ -120,13 +131,6 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter
|
|||||||
super.onResume();
|
super.onResume();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static BreadcrumbItem createItem(String title) {
|
|
||||||
|
|
||||||
List<String> list = new ArrayList<>();
|
|
||||||
list.add(title);
|
|
||||||
return new BreadcrumbItem(list);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClickDir(String dirName) {
|
public void onClickDir(String dirName) {
|
||||||
|
|
||||||
@ -145,7 +149,7 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter
|
|||||||
dirName_ = dirName_.startsWith("/") ? dirName_.substring(1) : dirName_;
|
dirName_ = dirName_.startsWith("/") ? dirName_.substring(1) : dirName_;
|
||||||
final String finalDirName_ = dirName_;
|
final String finalDirName_ = dirName_;
|
||||||
|
|
||||||
mBreadcrumbsView.addItem(createItem(dirName));
|
mBreadcrumbsView.addItem(new BreadcrumbItem(Collections.singletonList(dirName)));
|
||||||
//noinspection unchecked
|
//noinspection unchecked
|
||||||
mBreadcrumbsView.setCallback(new DefaultBreadcrumbsCallback<BreadcrumbItem>() {
|
mBreadcrumbsView.setCallback(new DefaultBreadcrumbsCallback<BreadcrumbItem>() {
|
||||||
|
|
||||||
@ -154,7 +158,8 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter
|
|||||||
public void onNavigateBack(BreadcrumbItem item, int position) {
|
public void onNavigateBack(BreadcrumbItem item, int position) {
|
||||||
|
|
||||||
if(position == 0) {
|
if(position == 0) {
|
||||||
fetchDataAsync(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName);
|
|
||||||
|
fetchDataAsync(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName, ref);
|
||||||
fileStructure.setText("");
|
fileStructure.setText("");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -165,7 +170,7 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter
|
|||||||
|
|
||||||
String currentIndex = (result + item.getSelectedItem()).substring(1);
|
String currentIndex = (result + item.getSelectedItem()).substring(1);
|
||||||
|
|
||||||
fetchDataAsyncSub(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName, currentIndex);
|
fetchDataAsyncSub(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName, currentIndex, ref);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,7 +180,7 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
fetchDataAsyncSub(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName, finalDirName_);
|
fetchDataAsyncSub(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName, finalDirName_, ref);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -196,70 +201,61 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter
|
|||||||
Objects.requireNonNull(getContext()).startActivity(intent);
|
Objects.requireNonNull(getContext()).startActivity(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fetchDataAsync(String instanceUrl, String instanceToken, String owner, String repo) {
|
private void fetchDataAsync(String instanceUrl, String instanceToken, String owner, String repo, String ref) {
|
||||||
|
|
||||||
mRecyclerView.setVisibility(View.GONE);
|
mRecyclerView.setVisibility(View.GONE);
|
||||||
mProgressBar.setVisibility(View.VISIBLE);
|
mProgressBar.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
FilesViewModel filesModel = new ViewModelProvider(this).get(FilesViewModel.class);
|
FilesViewModel filesModel = new ViewModelProvider(this).get(FilesViewModel.class);
|
||||||
|
|
||||||
filesModel.getFilesList(instanceUrl, instanceToken, owner, repo, getContext()).observe(getViewLifecycleOwner(), new Observer<List<Files>>() {
|
filesModel.getFilesList(instanceUrl, instanceToken, owner, repo, ref, getContext()).observe(getViewLifecycleOwner(), filesListMain -> {
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onChanged(@Nullable List<Files> filesListMain) {
|
|
||||||
|
|
||||||
adapter = new FilesAdapter(getContext(), filesListMain, FilesFragment.this);
|
adapter = new FilesAdapter(getContext(), filesListMain, FilesFragment.this);
|
||||||
|
|
||||||
mBreadcrumbsView.removeItemAfter(1);
|
mBreadcrumbsView.removeItemAfter(1);
|
||||||
|
|
||||||
if(adapter.getItemCount() > 0) {
|
if(adapter.getItemCount() > 0) {
|
||||||
mRecyclerView.setVisibility(View.VISIBLE);
|
|
||||||
mRecyclerView.setAdapter(adapter);
|
mRecyclerView.setAdapter(adapter);
|
||||||
filesFrame.setVisibility(View.VISIBLE);
|
AppUtil.setMultiVisibility(View.VISIBLE, mRecyclerView, filesFrame);
|
||||||
noDataFiles.setVisibility(View.GONE);
|
noDataFiles.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
mRecyclerView.setVisibility(View.VISIBLE);
|
|
||||||
adapter.notifyDataSetChanged();
|
adapter.notifyDataSetChanged();
|
||||||
mRecyclerView.setAdapter(adapter);
|
mRecyclerView.setAdapter(adapter);
|
||||||
filesFrame.setVisibility(View.VISIBLE);
|
AppUtil.setMultiVisibility(View.VISIBLE, mRecyclerView, filesFrame, noDataFiles);
|
||||||
noDataFiles.setVisibility(View.VISIBLE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
filesFrame.setVisibility(View.VISIBLE);
|
filesFrame.setVisibility(View.VISIBLE);
|
||||||
mProgressBar.setVisibility(View.GONE);
|
mProgressBar.setVisibility(View.GONE);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fetchDataAsyncSub(String instanceUrl, String instanceToken, String owner, String repo, String filesDir) {
|
private void fetchDataAsyncSub(String instanceUrl, String instanceToken, String owner, String repo, String filesDir, String ref) {
|
||||||
|
|
||||||
mRecyclerView.setVisibility(View.GONE);
|
mRecyclerView.setVisibility(View.GONE);
|
||||||
mProgressBar.setVisibility(View.VISIBLE);
|
mProgressBar.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
FilesViewModel filesModel2 = new ViewModelProvider(this).get(FilesViewModel.class);
|
FilesViewModel filesModel2 = new ViewModelProvider(this).get(FilesViewModel.class);
|
||||||
|
|
||||||
filesModel2.getFilesList2(instanceUrl, instanceToken, owner, repo, filesDir, getContext()).observe(this, new Observer<List<Files>>() {
|
filesModel2.getFilesList2(instanceUrl, instanceToken, owner, repo, filesDir, ref, getContext()).observe(this, filesListMain2 -> {
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onChanged(@Nullable List<Files> filesListMain2) {
|
|
||||||
|
|
||||||
adapter = new FilesAdapter(getContext(), filesListMain2, FilesFragment.this);
|
adapter = new FilesAdapter(getContext(), filesListMain2, FilesFragment.this);
|
||||||
|
|
||||||
if(adapter.getItemCount() > 0) {
|
if(adapter.getItemCount() > 0) {
|
||||||
mRecyclerView.setVisibility(View.VISIBLE);
|
|
||||||
mRecyclerView.setAdapter(adapter);
|
mRecyclerView.setAdapter(adapter);
|
||||||
filesFrame.setVisibility(View.VISIBLE);
|
AppUtil.setMultiVisibility(View.VISIBLE, mRecyclerView, filesFrame);
|
||||||
noDataFiles.setVisibility(View.GONE);
|
noDataFiles.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
mRecyclerView.setVisibility(View.VISIBLE);
|
|
||||||
adapter.notifyDataSetChanged();
|
adapter.notifyDataSetChanged();
|
||||||
mRecyclerView.setAdapter(adapter);
|
mRecyclerView.setAdapter(adapter);
|
||||||
filesFrame.setVisibility(View.VISIBLE);
|
AppUtil.setMultiVisibility(View.VISIBLE, mRecyclerView, filesFrame, noDataFiles);
|
||||||
noDataFiles.setVisibility(View.VISIBLE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
filesFrame.setVisibility(View.VISIBLE);
|
filesFrame.setVisibility(View.VISIBLE);
|
||||||
mProgressBar.setVisibility(View.GONE);
|
mProgressBar.setVisibility(View.GONE);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -268,6 +264,7 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter
|
|||||||
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
|
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
|
||||||
|
|
||||||
inflater.inflate(R.menu.search_menu, menu);
|
inflater.inflate(R.menu.search_menu, menu);
|
||||||
|
inflater.inflate(R.menu.files_switch_branches_menu, menu);
|
||||||
super.onCreateOptionsMenu(menu, inflater);
|
super.onCreateOptionsMenu(menu, inflater);
|
||||||
|
|
||||||
MenuItem searchItem = menu.findItem(R.id.action_search);
|
MenuItem searchItem = menu.findItem(R.id.action_search);
|
||||||
@ -276,20 +273,19 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter
|
|||||||
|
|
||||||
searchView.setOnQueryTextListener(new androidx.appcompat.widget.SearchView.OnQueryTextListener() {
|
searchView.setOnQueryTextListener(new androidx.appcompat.widget.SearchView.OnQueryTextListener() {
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onQueryTextSubmit(String query) {
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onQueryTextChange(String newText) {
|
public boolean onQueryTextChange(String newText) {
|
||||||
|
|
||||||
if(mRecyclerView.getAdapter() != null) {
|
if(mRecyclerView.getAdapter() != null) {
|
||||||
adapter.getFilter().filter(newText);
|
adapter.getFilter().filter(newText);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onQueryTextSubmit(String query) { return false; }
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -308,10 +304,6 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter
|
|||||||
mListener = null;
|
mListener = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface OnFragmentInteractionListener {
|
public interface OnFragmentInteractionListener { void onFragmentInteraction(Uri uri); }
|
||||||
|
|
||||||
void onFragmentInteraction(Uri uri);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user