Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • Commit451/LabCoat
  • Iktwo/GitLabAndroid
  • jonduran3000/GitLabAndroid
  • steffandroid/GitLabAndroid
  • xiaoyanit/GitLabAndroid
  • scottolcott/GitLabAndroid
  • james.mu/GitLabAndroid
  • pushkarpandey27/GitLabAndroid
  • atomfrede/GitLabAndroid
  • burrito82/GitLabAndroid
  • txlong_onz/GitLabAndroid
  • ricardo.longa/GitLabAndroid
  • rubenroy/GitLabAndroid
  • remy_android/GitLabAndroid
  • mzestars/GitLabAndroid
  • theobisproject/LabCoat
  • tarek360/GitLabAndroid
  • TR4Android/LabCoat
  • lvsmart/LabCoat
  • buddybuild/LabCoat
  • tkuah/LabCoat
  • jay3126/LabCoat
  • rmad17/LabCoat
  • galvatron/LabCoat
  • lijianjian13/LabCoat
  • Cody2333/LabCoat
  • ajtfreitas/LabCoat
  • nestor.lobo/LabCoat
  • Microgamer/LabCoat
  • irvinwang/LabCoat
  • avallete/LabCoat
  • digicazter/LabCoat
  • lovexiaov/LabCoat
  • dineshkarpe/LabCoat
  • bak1an/LabCoat
  • loomis/LabCoat
  • sank20/LabCoat
  • Jawnnyfoo/LabCoat
  • scottyab/LabCoat
  • aleksandar-stefanovic/LabCoat
  • tfontana/LabCoat
  • fuzzmz/LabCoat
  • dipaksavaliya/LabCoat
  • adi.bk/LabCoat
  • andreea.voicu/LabCoat
  • H1ghT0p/LabCoat
  • indritqoku/LabCoat
  • armpogart/LabCoat
  • eyedol/LabCoat
  • khairulnizan/LabCoat
  • vadm.perspectiva/LabCoat
  • yiyoss1986/LabCoat
  • BRoy98/LabCoat
  • satyarth.23/LabCoat
  • victorpe76/LabCoat
  • canhnht/LabCoat
  • jinhu/LabCoat
  • weathery/LabCoat
  • gitlabproject_s/LabCoat
  • tfKamran/LabCoat
  • voxadam/LabCoat
  • nprail/LabCoat
  • terrakok/LabCoat
  • jungletian/LabCoat
  • goldins/LabCoat
  • insanum/LabCoat
  • lzrs/LabCoat
  • shankarg/LabCoat
  • rm3l/LabCoat
  • alamo_dev/LabCoat
  • insomniaqc/LabCoat
  • mrasif/LabCoat
  • Babasile/LabCoat
  • eeyoo/LabCoat
  • ditkin/LabCoat
  • unbubot/LabCoat
  • bschuhm/LabCoat
  • fanticker/LabCoat
  • colorwebdesigner/LabCoat
  • milouse/LabCoat
80 results
Show changes
Commits on Source (41)
Showing
with 278 additions and 258 deletions
Loading
@@ -85,4 +85,8 @@ gradle-app.setting
Loading
@@ -85,4 +85,8 @@ gradle-app.setting
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid* hs_err_pid*
   
*.DS_Store *.DS_Store
\ No newline at end of file
# Custom
app/gradle.properties
*.jks
Loading
@@ -3,7 +3,7 @@ image: openjdk:8-jdk
Loading
@@ -3,7 +3,7 @@ image: openjdk:8-jdk
   
variables: variables:
ANDROID_COMPILE_SDK: "25" ANDROID_COMPILE_SDK: "25"
ANDROID_BUILD_TOOLS: "25.0.2" ANDROID_BUILD_TOOLS: "25.0.3"
ANDROID_SDK_TOOLS: "25.2.3" ANDROID_SDK_TOOLS: "25.2.3"
   
before_script: before_script:
Loading
@@ -12,13 +12,17 @@ before_script:
Loading
@@ -12,13 +12,17 @@ before_script:
- export ANDROID_HOME=$PWD/android-sdk - export ANDROID_HOME=$PWD/android-sdk
- echo y | $ANDROID_HOME/tools/bin/sdkmanager "platforms;android-$ANDROID_COMPILE_SDK" - echo y | $ANDROID_HOME/tools/bin/sdkmanager "platforms;android-$ANDROID_COMPILE_SDK"
- echo y | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;$ANDROID_BUILD_TOOLS" - echo y | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;$ANDROID_BUILD_TOOLS"
- echo y | $ANDROID_HOME/tools/bin/sdkmanager "extras;android;m2repository"
- chmod +x ./gradlew
   
stages: stages:
- build - build
- test
   
build: build:
stage: build stage: build
script:
- ./gradlew assembleFdroidDebug
test:
stage: test
script: script:
- ./gradlew testFdroidDebug - ./gradlew testFdroidDebug
\ No newline at end of file
language: android
jdk:
- oraclejdk8
android:
components:
- platform-tools
- tools
- build-tools-25.0.3
- android-25
- extra-android-m2repository
- extra-google-m2repository
script: "./gradlew testFdroidDebug"
Change Log
==========
Version 2.4.6
----------------------------
- Pipelines! Thanks to @nprail
- Full screen image viewer for Markdown images thanks to @adi.bk
- Fix crash when attempting to edit a file
- Make build names make sense
- Fix visibility issues with widgets
- Bump API call timeouts to 30 seconds since they were failing often on GitLab.com
Loading
@@ -14,6 +14,13 @@ You should be able to build the project from Android Studio without any further
Loading
@@ -14,6 +14,13 @@ You should be able to build the project from Android Studio without any further
```Gradle ```Gradle
LABCOAT_FABRIC_KEY = FABRIC_KEY_GOES_HERE_BUT_ONLY_REALLY_NEEDED_FOR_RELEASE_BUILDS LABCOAT_FABRIC_KEY = FABRIC_KEY_GOES_HERE_BUT_ONLY_REALLY_NEEDED_FOR_RELEASE_BUILDS
``` ```
To build, run the following.
```bash
./gradlew assembleDebug
```
## Libraries ## Libraries
The following 3rd party libraries and resources are the reason this app works. Rapid development is easily attainable thanks to these fine folks and the work they do: The following 3rd party libraries and resources are the reason this app works. Rapid development is easily attainable thanks to these fine folks and the work they do:
   
Loading
Loading
Loading
@@ -18,15 +18,19 @@ apply plugin: 'io.fabric'
Loading
@@ -18,15 +18,19 @@ apply plugin: 'io.fabric'
   
def versionMajor = 2 def versionMajor = 2
def versionMinor = 4 def versionMinor = 4
def versionPatch = 5 def versionPatch = 6
def versionBuild = 0 // bump for dogfood builds, public betas, etc. def versionBuild = 0 // bump for dogfood builds, public betas, etc.
   
android { android {
compileSdkVersion 25 compileSdkVersion 25
buildToolsVersion "25.0.2" buildToolsVersion "25.0.3"
   
project.ext { project.ext {
LABCOAT_FABRIC_KEY = project.hasProperty("LABCOAT_FABRIC_KEY") ? project.LABCOAT_FABRIC_KEY : ""; LABCOAT_FABRIC_KEY = project.hasProperty("LABCOAT_FABRIC_KEY") ? project.LABCOAT_FABRIC_KEY : "";
KEYSTORE_PATH = project.hasProperty("KEYSTORE_PATH") ? project.KEYSTORE_PATH : " ";
KEYSTORE_PASSWORD = project.hasProperty("KEYSTORE_PASSWORD") ? project.KEYSTORE_PASSWORD : " ";
KEYSTORE_ALIAS = project.hasProperty("KEYSTORE_ALIAS") ? project.KEYSTORE_ALIAS : " ";
KEY_PASSWORD = project.hasProperty("KEY_PASSWORD") ? project.KEY_PASSWORD : " ";
} }
   
defaultConfig { defaultConfig {
Loading
@@ -51,12 +55,22 @@ android {
Loading
@@ -51,12 +55,22 @@ android {
} }
} }
   
signingConfigs {
release {
storeFile file(project.ext.KEYSTORE_PATH)
storePassword project.ext.KEYSTORE_PASSWORD
keyAlias project.ext.KEYSTORE_ALIAS
keyPassword project.ext.KEY_PASSWORD
}
}
buildTypes { buildTypes {
release { release {
minifyEnabled true minifyEnabled true
shrinkResources true shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
ext.enableCrashlytics = true ext.enableCrashlytics = true
signingConfig signingConfigs.release
} }
debug { debug {
minifyEnabled false minifyEnabled false
Loading
@@ -73,22 +87,22 @@ android {
Loading
@@ -73,22 +87,22 @@ android {
} }
   
ext { ext {
supportLibVersion = '25.3.0' supportLibVersion = '25.3.1'
retrofitVersion = '2.2.0' retrofitVersion = '2.3.0'
okHttpVersion = '3.6.0' okHttpVersion = '3.8.0'
butterknifeVersion = '8.5.1' butterknifeVersion = '8.6.0'
loganSquareVersion = '1.3.7' loganSquareVersion = '1.3.7'
parcelerVersion = '1.1.6' parcelerVersion = '1.1.8'
reptarVersion = '2.4.1' reptarVersion = '2.4.1'
adapterLayout = '1.1.0' adapterLayout = '1.1.0'
materialDialogsVersion = '0.9.4.2' materialDialogsVersion = '0.9.4.5'
leakCanaryVersion = '1.5' leakCanaryVersion = '1.5'
} }
   
dependencies { dependencies {
compile fileTree(dir: 'libs', include: ['*.jar']) compile fileTree(dir: 'libs', include: ['*.jar'])
   
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion" compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlinVersion"
   
compile "com.android.support:appcompat-v7:$supportLibVersion" compile "com.android.support:appcompat-v7:$supportLibVersion"
compile "com.android.support:support-v13:$supportLibVersion" compile "com.android.support:support-v13:$supportLibVersion"
Loading
@@ -99,6 +113,8 @@ dependencies {
Loading
@@ -99,6 +113,8 @@ dependencies {
compile "com.android.support:customtabs:$supportLibVersion" compile "com.android.support:customtabs:$supportLibVersion"
compile 'com.android.support:multidex:1.0.1' compile 'com.android.support:multidex:1.0.1'
   
compile 'com.google.code.findbugs:jsr305:3.0.2'
compile "com.squareup.retrofit2:retrofit:$retrofitVersion" compile "com.squareup.retrofit2:retrofit:$retrofitVersion"
compile("com.squareup.retrofit2:converter-simplexml:$retrofitVersion") { compile("com.squareup.retrofit2:converter-simplexml:$retrofitVersion") {
exclude group: 'xpp3', module: 'xpp3' exclude group: 'xpp3', module: 'xpp3'
Loading
@@ -123,12 +139,12 @@ dependencies {
Loading
@@ -123,12 +139,12 @@ dependencies {
   
compile 'org.greenrobot:eventbus:3.0.0' compile 'org.greenrobot:eventbus:3.0.0'
   
compile 'io.reactivex.rxjava2:rxjava:2.0.7' compile 'io.reactivex.rxjava2:rxjava:2.1.0'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
   
compile 'com.trello.rxlifecycle2:rxlifecycle-components:2.0.1' compile 'com.trello.rxlifecycle2:rxlifecycle-components:2.1.0'
   
compile 'net.danlew:android.joda:2.9.7' compile 'net.danlew:android.joda:2.9.9'
   
compile "org.parceler:parceler-api:$parcelerVersion" compile "org.parceler:parceler-api:$parcelerVersion"
kapt "org.parceler:parceler:$parcelerVersion" kapt "org.parceler:parceler:$parcelerVersion"
Loading
@@ -139,7 +155,13 @@ dependencies {
Loading
@@ -139,7 +155,13 @@ dependencies {
compile 'com.github.Commit451:bypasses:1.1.0' compile 'com.github.Commit451:bypasses:1.1.0'
compile 'com.github.Commit451:ElasticDragDismissLayout:1.0.4' compile 'com.github.Commit451:ElasticDragDismissLayout:1.0.4'
compile "com.github.Commit451.AdapterLayout:adapterlayout:$adapterLayout" compile "com.github.Commit451.AdapterLayout:adapterlayout:$adapterLayout"
compile "com.github.Commit451.AdapterLayout:adapterflowlayout:$adapterLayout" compile ("com.github.Commit451.AdapterLayout:adapterflowlayout:$adapterLayout") {
exclude group: 'com.wefika', module: 'flowlayout'
}
//https://github.com/blazsolar/FlowLayout/issues/31
compile ("com.wefika:flowlayout:0.4.1") {
exclude group: 'com.intellij', module: 'annotations'
}
compile 'com.github.Commit451.Easel:easel:2.1.1' compile 'com.github.Commit451.Easel:easel:2.1.1'
compile 'com.github.Commit451:Gimbal:2.0.2' compile 'com.github.Commit451:Gimbal:2.0.2'
compile 'com.github.Commit451:Teleprinter:1.0.2' compile 'com.github.Commit451:Teleprinter:1.0.2'
Loading
@@ -149,12 +171,14 @@ dependencies {
Loading
@@ -149,12 +171,14 @@ dependencies {
compile 'com.github.Commit451:MorphTransitions:2.0.0' compile 'com.github.Commit451:MorphTransitions:2.0.0'
compile 'com.github.Commit451.Alakazam:alakazam:1.0.1' compile 'com.github.Commit451.Alakazam:alakazam:1.0.1'
compile 'com.github.Commit451:Lift:1.2.0' compile 'com.github.Commit451:Lift:1.2.0'
compile 'com.github.Commit451:okyo:2.0.0'
compile 'com.github.Commit451:OkioProGuardRules:1.11.0.0' compile 'com.github.Commit451:OkioProGuardRules:1.11.0.0'
compile 'com.github.Commit451:RetrofitProguardRules:2.2.0.0' compile 'com.github.Commit451:RetrofitProguardRules:2.2.0.0'
compile 'com.github.Commit451:LoganSquareProGuardRules:1.3.7.0' compile 'com.github.Commit451:LoganSquareProGuardRules:1.3.7.0'
compile 'com.github.Commit451:EventBusProGuardRules:3.0.0.0' compile 'com.github.Commit451:EventBusProGuardRules:3.0.0.0'
compile 'com.github.chrisbanes:PhotoView:2.0.0'
   
compile 'me.zhanghai.android.materialprogressbar:library:1.3.0' compile 'me.zhanghai.android.materialprogressbar:library:1.4.1'
   
compile 'com.github.Jawnnypoo:PhysicsLayout:2.1.0' compile 'com.github.Jawnnypoo:PhysicsLayout:2.1.0'
   
Loading
@@ -166,9 +190,9 @@ dependencies {
Loading
@@ -166,9 +190,9 @@ dependencies {
   
compile 'com.github.alorma:diff-textview:1.3.0' compile 'com.github.alorma:diff-textview:1.3.0'
   
compile 'com.wdullaer:materialdatetimepicker:3.1.3' compile 'com.wdullaer:materialdatetimepicker:3.2.2'
   
compile 'com.github.novoda:simple-chrome-custom-tabs:0.1.4' compile 'com.github.novoda:simple-chrome-custom-tabs:0.1.5'
   
compile "com.afollestad.material-dialogs:core:$materialDialogsVersion" compile "com.afollestad.material-dialogs:core:$materialDialogsVersion"
compile "com.afollestad.material-dialogs:commons:$materialDialogsVersion" compile "com.afollestad.material-dialogs:commons:$materialDialogsVersion"
Loading
@@ -185,7 +209,7 @@ dependencies {
Loading
@@ -185,7 +209,7 @@ dependencies {
transitive = true; transitive = true;
} }
   
normalCompile('com.crashlytics.sdk.android:crashlytics:2.6.7@aar') { normalCompile('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') {
transitive = true; transitive = true;
} }
   
Loading
@@ -194,5 +218,5 @@ dependencies {
Loading
@@ -194,5 +218,5 @@ dependencies {
testCompile "com.squareup.leakcanary:leakcanary-android-no-op:$leakCanaryVersion" testCompile "com.squareup.leakcanary:leakcanary-android-no-op:$leakCanaryVersion"
   
testCompile 'junit:junit:4.12' testCompile 'junit:junit:4.12'
testCompile 'org.robolectric:robolectric:3.3.1' testCompile 'org.robolectric:robolectric:3.3.2'
} }
package com.commit451.gitlab.util;
import android.content.Context;
import android.support.annotation.NonNull;
/**
* Does not enable Fabric
*/
public class FabricUtil {
public static void init(@NonNull Context context) {
//do nothing
}
}
package com.commit451.gitlab.util
import android.content.Context
/**
* Does not enable Fabric
*/
object FabricUtil {
fun init(context: Context) {
//do nothing
}
}
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.commit451.gitlab"> package="com.commit451.gitlab">
   
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
   
<application <application
android:name=".App" android:name=".App"
Loading
@@ -13,150 +13,130 @@
Loading
@@ -13,150 +13,130 @@
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:theme="@style/AppTheme"> android:theme="@style/AppTheme">
<activity <activity
android:name=".activity.LaunchActivity" android:name=".activity.LaunchActivity"
android:theme="@style/Activity.Launch"> android:theme="@style/Activity.Launch">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
   
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity> </activity>
<activity <activity
android:name=".activity.ProjectsActivity" android:name=".activity.ProjectsActivity"
android:launchMode="singleTask" android:launchMode="singleTask"
android:theme="@style/Activity.Projects" /> android:theme="@style/Activity.Projects"/>
<activity <activity
android:name=".activity.GroupsActivity" android:name=".activity.GroupsActivity"
android:launchMode="singleTask" android:launchMode="singleTask"
android:theme="@style/Activity.Groups" /> android:theme="@style/Activity.Groups"/>
<activity <activity
android:name=".activity.ActivityActivity" android:name=".activity.ActivityActivity"
android:launchMode="singleTask" android:launchMode="singleTask"
android:theme="@style/Activity.Activity" /> android:theme="@style/Activity.Activity"/>
<activity <activity
android:name=".activity.TodosActivity" android:name=".activity.TodosActivity"
android:launchMode="singleTask" android:launchMode="singleTask"
android:theme="@style/Activity.Todos" /> android:theme="@style/Activity.Todos"/>
<activity android:name=".activity.ProjectActivity"/>
<activity android:name=".activity.ProjectActivity" />
<activity <activity
android:name=".activity.LoginActivity" android:name=".activity.LoginActivity"
android:theme="@style/Activity.Login" /> android:theme="@style/Activity.Login"/>
<activity android:name=".activity.FileActivity"/>
<activity android:name=".activity.FileActivity" /> <activity android:name=".activity.IssueActivity"/>
<activity android:name=".activity.DiffActivity"/>
<activity android:name=".activity.IssueActivity" /> <activity android:name=".activity.AboutActivity"/>
<activity android:name=".activity.AddUserActivity"/>
<activity android:name=".activity.DiffActivity" />
<activity android:name=".activity.AboutActivity" />
<activity android:name=".activity.AddUserActivity" />
<activity <activity
android:name=".activity.UserActivity" android:name=".activity.UserActivity"
android:theme="@style/Activity.User" /> android:theme="@style/Activity.User"/>
<activity android:name=".activity.SearchActivity" /> <activity android:name=".activity.SearchActivity"/>
<activity <activity
android:name=".activity.GroupActivity" android:name=".activity.GroupActivity"
android:theme="@style/Activity.Group" /> android:theme="@style/Activity.Group"/>
<activity android:name=".activity.MergeRequestActivity"/>
<activity android:name=".activity.MergeRequestActivity" /> <activity android:name=".activity.AddIssueActivity"/>
<activity android:name=".activity.MilestoneActivity"/>
<activity android:name=".activity.AddIssueActivity" /> <activity android:name=".activity.AddMilestoneActivity"/>
<activity android:name=".activity.BuildActivity"/>
<activity android:name=".activity.MilestoneActivity" /> <activity android:name=".activity.PipelineActivity"/>
<activity android:name=".activity.AddMilestoneActivity" />
<activity android:name=".activity.BuildActivity" />
<activity <activity
android:name=".activity.LoadSomeInfoActivity" android:name=".activity.LoadSomeInfoActivity"
android:theme="@style/Activity.Translucent" /> android:theme="@style/Activity.Translucent"/>
<activity android:name=".activity.SettingsActivity"/>
<activity android:name=".activity.SettingsActivity" /> <activity android:name=".activity.AddLabelActivity"/>
<activity android:name=".activity.AddNewLabelActivity"/>
<activity android:name=".activity.AddLabelActivity" />
<activity android:name=".activity.AddNewLabelActivity" />
<activity <activity
android:name=".activity.PickBranchOrTagActivity" android:name=".activity.PickBranchOrTagActivity"
android:theme="@style/Activity.Translucent" /> android:theme="@style/Activity.Translucent"/>
<activity android:name=".activity.WebLoginActivity" /> <activity android:name=".activity.WebLoginActivity"/>
<activity <activity
android:name=".activity.AttachActivity" android:name=".activity.AttachActivity"
android:theme="@style/Activity.Translucent" /> android:theme="@style/Activity.Translucent"/>
<activity android:name=".activity.DebugActivity" />
<activity <activity
android:name=".activity.RoutingActivity" android:name=".activity.RoutingActivity"
android:launchMode="singleTask" android:launchMode="singleTask"
android:noHistory="true" android:noHistory="true"
android:theme="@android:style/Theme.NoDisplay"> android:theme="@android:style/Theme.NoDisplay">
<!-- Standard Url --> <!-- Standard Url -->
<intent-filter android:label="@string/deeplink_text"> <intent-filter android:label="@string/deeplink_text">
<action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.VIEW"/>
   
<category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT"/>
   
<data android:scheme="@string/deeplink_scheme" /> <data android:scheme="@string/deeplink_scheme"/>
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name=".widget.UserFeedWidgetConfigureActivity"> <activity android:name=".widget.UserFeedWidgetConfigureActivity">
<intent-filter> <intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" /> <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name=".widget.ProjectFeedWidgetConfigureActivity"> <activity android:name=".widget.ProjectFeedWidgetConfigureActivity">
<intent-filter> <intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" /> <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name=".widget.ProjectFeedWidgetConfigureProjectActivity"/>
<activity
android:name=".activity.FullscreenImageActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/title_activity_fullscreen_image"
android:theme="@style/FullscreenTheme">
</activity>
   
<activity android:name=".widget.ProjectFeedWidgetConfigureProjectActivity" /> <activity android:name=".activity.DebugActivity"/>
   
<receiver <receiver
android:name=".widget.UserFeedWidgetProvider" android:name=".widget.UserFeedWidgetProvider"
android:label="User Feed"> android:label="User Feed">
<intent-filter> <intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter> </intent-filter>
<meta-data <meta-data
android:name="android.appwidget.provider" android:name="android.appwidget.provider"
android:resource="@xml/widget_user_feed" /> android:resource="@xml/widget_user_feed"/>
</receiver> </receiver>
<receiver <receiver
android:name=".widget.ProjectFeedWidgetProvider" android:name=".widget.ProjectFeedWidgetProvider"
android:label="Project Feed"> android:label="Project Feed">
<intent-filter> <intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter> </intent-filter>
<meta-data <meta-data
android:name="android.appwidget.provider" android:name="android.appwidget.provider"
android:resource="@xml/widget_project_feed" /> android:resource="@xml/widget_project_feed"/>
</receiver> </receiver>
   
<service <service
android:name=".widget.ProjectFeedWidgetService" android:name=".widget.ProjectFeedWidgetService"
android:exported="false" android:exported="false"
android:permission="android.permission.BIND_REMOTEVIEWS" /> android:permission="android.permission.BIND_REMOTEVIEWS"/>
   
</application> </application>
   
</manifest> </manifest>
\ No newline at end of file
Loading
@@ -13,6 +13,7 @@ import com.commit451.lift.Lift
Loading
@@ -13,6 +13,7 @@ import com.commit451.lift.Lift
import com.novoda.simplechromecustomtabs.SimpleChromeCustomTabs import com.novoda.simplechromecustomtabs.SimpleChromeCustomTabs
import com.squareup.leakcanary.LeakCanary import com.squareup.leakcanary.LeakCanary
import com.squareup.picasso.Picasso import com.squareup.picasso.Picasso
import io.reactivex.plugins.RxJavaPlugins
import net.danlew.android.joda.JodaTimeAndroid import net.danlew.android.joda.JodaTimeAndroid
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor import okhttp3.logging.HttpLoggingInterceptor
Loading
@@ -39,9 +40,8 @@ open class App : Application() {
Loading
@@ -39,9 +40,8 @@ open class App : Application() {
} }
} }
   
lateinit var gitLab: GitLab
lateinit var currentAccount: Account lateinit var currentAccount: Account
lateinit var gitLab: GitLabService
lateinit var gitLabRss: GitLabRss
lateinit var picasso: Picasso lateinit var picasso: Picasso
   
override fun onCreate() { override fun onCreate() {
Loading
@@ -53,6 +53,10 @@ open class App : Application() {
Loading
@@ -53,6 +53,10 @@ open class App : Application() {
} }
setupLeakCanary() setupLeakCanary()
instance = this instance = this
RxJavaPlugins.setErrorHandler { error ->
//In case an error cannot be thrown properly anywhere else in the app
Timber.e(error)
}
   
GitLab.init() GitLab.init()
   
Loading
@@ -92,7 +96,6 @@ open class App : Application() {
Loading
@@ -92,7 +96,6 @@ open class App : Application() {
} }
val client = clientBuilder.build() val client = clientBuilder.build()
initGitLab(account, client) initGitLab(account, client)
initGitLabRss(account, client)
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
initPicasso(OkHttpClientFactory.create(account).build()) initPicasso(OkHttpClientFactory.create(account).build())
} else { } else {
Loading
@@ -136,11 +139,9 @@ open class App : Application() {
Loading
@@ -136,11 +139,9 @@ open class App : Application() {
} }
   
private fun initGitLab(account: Account, client: OkHttpClient) { private fun initGitLab(account: Account, client: OkHttpClient) {
gitLab = GitLabFactory.create(account, client) val gitLabService = GitLabFactory.create(account, client)
} val gitLabRss = GitLabRssFactory.create(account, client)
gitLab = GitLab(gitLabService, gitLabRss)
private fun initGitLabRss(account: Account, client: OkHttpClient) {
gitLabRss = GitLabRssFactory.create(account, client)
} }
   
private fun initPicasso(client: OkHttpClient) { private fun initPicasso(client: OkHttpClient) {
Loading
Loading
Loading
@@ -67,6 +67,14 @@ class ActivityActivity : BaseActivity() {
Loading
@@ -67,6 +67,14 @@ class ActivityActivity : BaseActivity() {
return true return true
} }
   
override fun onBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawer(GravityCompat.START)
} else {
super.onBackPressed()
}
}
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
App.bus().unregister(this) App.bus().unregister(this)
Loading
Loading
Loading
@@ -4,16 +4,14 @@ import android.app.Activity
Loading
@@ -4,16 +4,14 @@ import android.app.Activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.os.Parcelable
import android.support.design.widget.Snackbar import android.support.design.widget.Snackbar
import android.support.design.widget.TextInputLayout import android.support.design.widget.TextInputLayout
import android.support.v7.app.AlertDialog import android.support.v7.app.AlertDialog
import android.support.v7.widget.SwitchCompat
import android.support.v7.widget.Toolbar import android.support.v7.widget.Toolbar
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.CheckBox
import android.widget.EditText import android.widget.EditText
import android.widget.FrameLayout
import android.widget.Spinner import android.widget.Spinner
import android.widget.TextView import android.widget.TextView
import butterknife.BindView import butterknife.BindView
Loading
@@ -28,6 +26,8 @@ import com.commit451.gitlab.adapter.MilestoneSpinnerAdapter
Loading
@@ -28,6 +26,8 @@ import com.commit451.gitlab.adapter.MilestoneSpinnerAdapter
import com.commit451.gitlab.event.IssueChangedEvent import com.commit451.gitlab.event.IssueChangedEvent
import com.commit451.gitlab.event.IssueCreatedEvent import com.commit451.gitlab.event.IssueCreatedEvent
import com.commit451.gitlab.extension.checkValid import com.commit451.gitlab.extension.checkValid
import com.commit451.gitlab.extension.getParcelerParcelable
import com.commit451.gitlab.extension.putParcelParcelableExtra
import com.commit451.gitlab.extension.setup import com.commit451.gitlab.extension.setup
import com.commit451.gitlab.model.api.* import com.commit451.gitlab.model.api.*
import com.commit451.gitlab.navigation.Navigator import com.commit451.gitlab.navigation.Navigator
Loading
@@ -37,7 +37,6 @@ import com.commit451.teleprinter.Teleprinter
Loading
@@ -37,7 +37,6 @@ import com.commit451.teleprinter.Teleprinter
import io.reactivex.Single import io.reactivex.Single
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
import org.parceler.Parcels
import retrofit2.Response import retrofit2.Response
import timber.log.Timber import timber.log.Timber
import java.util.* import java.util.*
Loading
@@ -55,15 +54,15 @@ class AddIssueActivity : MorphActivity() {
Loading
@@ -55,15 +54,15 @@ class AddIssueActivity : MorphActivity() {
   
fun newIntent(context: Context, project: Project, issue: Issue?): Intent { fun newIntent(context: Context, project: Project, issue: Issue?): Intent {
val intent = Intent(context, AddIssueActivity::class.java) val intent = Intent(context, AddIssueActivity::class.java)
intent.putExtra(KEY_PROJECT, Parcels.wrap(project)) intent.putParcelParcelableExtra(KEY_PROJECT, project)
if (issue != null) { if (issue != null) {
intent.putExtra(KEY_ISSUE, Parcels.wrap(issue)) intent.putParcelParcelableExtra(KEY_ISSUE, issue)
} }
return intent return intent
} }
} }
   
@BindView(R.id.root) lateinit var root: FrameLayout @BindView(R.id.root) lateinit var root: ViewGroup
@BindView(R.id.toolbar) lateinit var toolbar: Toolbar @BindView(R.id.toolbar) lateinit var toolbar: Toolbar
@BindView(R.id.title_text_input_layout) lateinit var textInputLayoutTitle: TextInputLayout @BindView(R.id.title_text_input_layout) lateinit var textInputLayoutTitle: TextInputLayout
@BindView(R.id.description) lateinit var textDescription: EditText @BindView(R.id.description) lateinit var textDescription: EditText
Loading
@@ -76,7 +75,7 @@ class AddIssueActivity : MorphActivity() {
Loading
@@ -76,7 +75,7 @@ class AddIssueActivity : MorphActivity() {
@BindView(R.id.labels_progress) lateinit var progressLabels: View @BindView(R.id.labels_progress) lateinit var progressLabels: View
@BindView(R.id.root_add_labels) lateinit var rootAddLabels: ViewGroup @BindView(R.id.root_add_labels) lateinit var rootAddLabels: ViewGroup
@BindView(R.id.list_labels) lateinit var listLabels: AdapterFlowLayout @BindView(R.id.list_labels) lateinit var listLabels: AdapterFlowLayout
@BindView(R.id.confidential_switch) lateinit var switchConfidential: SwitchCompat @BindView(R.id.check_confidential) lateinit var checkConfidential: CheckBox
   
lateinit var adapterLabels: AddIssueLabelAdapter lateinit var adapterLabels: AddIssueLabelAdapter
lateinit var teleprinter: Teleprinter lateinit var teleprinter: Teleprinter
Loading
@@ -97,16 +96,16 @@ class AddIssueActivity : MorphActivity() {
Loading
@@ -97,16 +96,16 @@ class AddIssueActivity : MorphActivity() {
morph(root) morph(root)
teleprinter = Teleprinter(this) teleprinter = Teleprinter(this)
   
project = Parcels.unwrap<Project>(intent.getParcelableExtra<Parcelable>(KEY_PROJECT)) project = intent.getParcelerParcelable<Project>(KEY_PROJECT)!!
issue = Parcels.unwrap<Issue>(intent.getParcelableExtra<Parcelable>(KEY_ISSUE)) issue = intent.getParcelerParcelable<Issue>(KEY_ISSUE)
members = HashSet<Member>() members = HashSet<Member>()
adapterLabels = AddIssueLabelAdapter(object : AddIssueLabelAdapter.Listener { adapterLabels = AddIssueLabelAdapter(object : AddIssueLabelAdapter.Listener {
override fun onLabelClicked(label: Label) { override fun onLabelClicked(label: Label) {
AlertDialog.Builder(this@AddIssueActivity) AlertDialog.Builder(this@AddIssueActivity)
.setTitle(R.string.remove) .setTitle(R.string.remove)
.setMessage(R.string.are_you_sure_you_want_to_remove) .setMessage(R.string.are_you_sure_you_want_to_remove)
.setPositiveButton(android.R.string.yes) { dialog, which -> adapterLabels.removeLabel(label) } .setPositiveButton(android.R.string.yes) { _, _ -> adapterLabels.removeLabel(label) }
.setNegativeButton(android.R.string.no) { dialog, which -> dialog.dismiss() } .setNegativeButton(android.R.string.no) { dialog, _ -> dialog.dismiss() }
.show() .show()
} }
}) })
Loading
@@ -224,7 +223,7 @@ class AddIssueActivity : MorphActivity() {
Loading
@@ -224,7 +223,7 @@ class AddIssueActivity : MorphActivity() {
if (!issue?.description.isNullOrEmpty()) { if (!issue?.description.isNullOrEmpty()) {
textDescription.setText(issue!!.description) textDescription.setText(issue!!.description)
} }
switchConfidential.isChecked = issue!!.isConfidential checkConfidential.isChecked = issue!!.isConfidential
} }
   
private fun setAssignees() { private fun setAssignees() {
Loading
@@ -256,15 +255,16 @@ class AddIssueActivity : MorphActivity() {
Loading
@@ -256,15 +255,16 @@ class AddIssueActivity : MorphActivity() {
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data) super.onActivityResult(requestCode, resultCode, data)
when (requestCode) { when (requestCode) {
REQUEST_LABEL -> if (resultCode == Activity.RESULT_OK) { REQUEST_LABEL ->
val label = Parcels.unwrap<Label>(data?.getParcelableExtra<Parcelable>(AddLabelActivity.KEY_LABEL)) if (resultCode == Activity.RESULT_OK) {
if (adapterLabels.containsLabel(label)) { val label = data?.getParcelerParcelable<Label>(AddLabelActivity.KEY_LABEL)!!
Snackbar.make(root, R.string.label_already_added, Snackbar.LENGTH_SHORT) if (adapterLabels.containsLabel(label)) {
.show() Snackbar.make(root, R.string.label_already_added, Snackbar.LENGTH_SHORT)
} else { .show()
adapterLabels.addLabel(label) } else {
adapterLabels.addLabel(label)
}
} }
}
} }
} }
   
Loading
@@ -272,8 +272,8 @@ class AddIssueActivity : MorphActivity() {
Loading
@@ -272,8 +272,8 @@ class AddIssueActivity : MorphActivity() {
AlertDialog.Builder(this) AlertDialog.Builder(this)
.setTitle(R.string.discard) .setTitle(R.string.discard)
.setMessage(R.string.are_you_sure_you_want_to_discard) .setMessage(R.string.are_you_sure_you_want_to_discard)
.setPositiveButton(android.R.string.yes) { dialog, which -> dismiss() } .setPositiveButton(android.R.string.yes) { _, _ -> dismiss() }
.setNegativeButton(android.R.string.no) { dialog, which -> dialog.dismiss() } .setNegativeButton(android.R.string.no) { dialog, _ -> dialog.dismiss() }
.show() .show()
} }
   
Loading
@@ -310,7 +310,7 @@ class AddIssueActivity : MorphActivity() {
Loading
@@ -310,7 +310,7 @@ class AddIssueActivity : MorphActivity() {
assigneeId, assigneeId,
milestoneId, milestoneId,
labelsCommaSeperated, labelsCommaSeperated,
switchConfidential.isChecked) checkConfidential.isChecked)
} }
} }
   
Loading
Loading
Loading
@@ -4,7 +4,6 @@ import android.app.Activity
Loading
@@ -4,7 +4,6 @@ import android.app.Activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.os.Parcelable
import android.support.v4.widget.SwipeRefreshLayout import android.support.v4.widget.SwipeRefreshLayout
import android.support.v7.widget.LinearLayoutManager import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView import android.support.v7.widget.RecyclerView
Loading
@@ -18,12 +17,13 @@ import com.commit451.gitlab.App
Loading
@@ -18,12 +17,13 @@ import com.commit451.gitlab.App
import com.commit451.gitlab.R import com.commit451.gitlab.R
import com.commit451.gitlab.R.string.labels import com.commit451.gitlab.R.string.labels
import com.commit451.gitlab.adapter.LabelAdapter import com.commit451.gitlab.adapter.LabelAdapter
import com.commit451.gitlab.extension.getParcelerParcelable
import com.commit451.gitlab.extension.putParcelParcelableExtra
import com.commit451.gitlab.extension.setup import com.commit451.gitlab.extension.setup
import com.commit451.gitlab.model.api.Label import com.commit451.gitlab.model.api.Label
import com.commit451.gitlab.navigation.Navigator import com.commit451.gitlab.navigation.Navigator
import com.commit451.gitlab.rx.CustomSingleObserver import com.commit451.gitlab.rx.CustomSingleObserver
import com.commit451.gitlab.viewHolder.LabelViewHolder import com.commit451.gitlab.viewHolder.LabelViewHolder
import org.parceler.Parcels
import timber.log.Timber import timber.log.Timber
   
/** /**
Loading
@@ -76,7 +76,7 @@ class AddLabelActivity : BaseActivity() {
Loading
@@ -76,7 +76,7 @@ class AddLabelActivity : BaseActivity() {
adapterLabel = LabelAdapter(object : LabelAdapter.Listener { adapterLabel = LabelAdapter(object : LabelAdapter.Listener {
override fun onLabelClicked(label: Label, viewHolder: LabelViewHolder) { override fun onLabelClicked(label: Label, viewHolder: LabelViewHolder) {
val data = Intent() val data = Intent()
data.putExtra(KEY_LABEL, Parcels.wrap(label)) data.putParcelParcelableExtra(KEY_LABEL, label)
setResult(Activity.RESULT_OK, data) setResult(Activity.RESULT_OK, data)
finish() finish()
} }
Loading
@@ -94,7 +94,7 @@ class AddLabelActivity : BaseActivity() {
Loading
@@ -94,7 +94,7 @@ class AddLabelActivity : BaseActivity() {
super.onActivityResult(requestCode, resultCode, data) super.onActivityResult(requestCode, resultCode, data)
when (requestCode) { when (requestCode) {
REQUEST_NEW_LABEL -> if (resultCode == Activity.RESULT_OK) { REQUEST_NEW_LABEL -> if (resultCode == Activity.RESULT_OK) {
val newLabel = Parcels.unwrap<Label>(data?.getParcelableExtra<Parcelable>(AddNewLabelActivity.KEY_NEW_LABEL)) val newLabel = data?.getParcelerParcelable<Label>(AddNewLabelActivity.KEY_NEW_LABEL)!!
adapterLabel.addLabel(newLabel) adapterLabel.addLabel(newLabel)
} }
} }
Loading
Loading
Loading
@@ -3,7 +3,6 @@ package com.commit451.gitlab.activity
Loading
@@ -3,7 +3,6 @@ package com.commit451.gitlab.activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.os.Parcelable
import android.support.design.widget.Snackbar import android.support.design.widget.Snackbar
import android.support.design.widget.TextInputLayout import android.support.design.widget.TextInputLayout
import android.support.v7.widget.Toolbar import android.support.v7.widget.Toolbar
Loading
@@ -20,13 +19,14 @@ import com.commit451.gitlab.R
Loading
@@ -20,13 +19,14 @@ import com.commit451.gitlab.R
import com.commit451.gitlab.event.MilestoneChangedEvent import com.commit451.gitlab.event.MilestoneChangedEvent
import com.commit451.gitlab.event.MilestoneCreatedEvent import com.commit451.gitlab.event.MilestoneCreatedEvent
import com.commit451.gitlab.extension.checkValid import com.commit451.gitlab.extension.checkValid
import com.commit451.gitlab.extension.getParcelerParcelable
import com.commit451.gitlab.extension.putParcelParcelableExtra
import com.commit451.gitlab.extension.setup import com.commit451.gitlab.extension.setup
import com.commit451.gitlab.model.api.Milestone import com.commit451.gitlab.model.api.Milestone
import com.commit451.gitlab.rx.CustomSingleObserver import com.commit451.gitlab.rx.CustomSingleObserver
import com.commit451.teleprinter.Teleprinter import com.commit451.teleprinter.Teleprinter
import com.wdullaer.materialdatetimepicker.date.DatePickerDialog import com.wdullaer.materialdatetimepicker.date.DatePickerDialog
import io.reactivex.Single import io.reactivex.Single
import org.parceler.Parcels
import timber.log.Timber import timber.log.Timber
import java.util.* import java.util.*
   
Loading
@@ -41,7 +41,7 @@ class AddMilestoneActivity : MorphActivity() {
Loading
@@ -41,7 +41,7 @@ class AddMilestoneActivity : MorphActivity() {
val intent = Intent(context, AddMilestoneActivity::class.java) val intent = Intent(context, AddMilestoneActivity::class.java)
intent.putExtra(KEY_PROJECT_ID, projectId) intent.putExtra(KEY_PROJECT_ID, projectId)
if (milestone != null) { if (milestone != null) {
intent.putExtra(KEY_MILESTONE, Parcels.wrap(milestone)) intent.putParcelParcelableExtra(KEY_MILESTONE, milestone)
} }
return intent return intent
} }
Loading
@@ -61,7 +61,7 @@ class AddMilestoneActivity : MorphActivity() {
Loading
@@ -61,7 +61,7 @@ class AddMilestoneActivity : MorphActivity() {
var milestone: Milestone? = null var milestone: Milestone? = null
var currentDate: Date? = null var currentDate: Date? = null
   
val onDateSetListener = DatePickerDialog.OnDateSetListener { view, year, monthOfYear, dayOfMonth -> val onDateSetListener = DatePickerDialog.OnDateSetListener { _, year, monthOfYear, dayOfMonth ->
val calendar = Calendar.getInstance() val calendar = Calendar.getInstance()
calendar.set(Calendar.YEAR, year) calendar.set(Calendar.YEAR, year)
calendar.set(Calendar.MONTH, monthOfYear) calendar.set(Calendar.MONTH, monthOfYear)
Loading
@@ -93,7 +93,7 @@ class AddMilestoneActivity : MorphActivity() {
Loading
@@ -93,7 +93,7 @@ class AddMilestoneActivity : MorphActivity() {
morph(root) morph(root)
teleprinter = Teleprinter(this) teleprinter = Teleprinter(this)
projectId = intent.getLongExtra(KEY_PROJECT_ID, -1) projectId = intent.getLongExtra(KEY_PROJECT_ID, -1)
milestone = Parcels.unwrap<Milestone>(intent.getParcelableExtra<Parcelable>(KEY_MILESTONE)) milestone = intent.getParcelerParcelable<Milestone>(KEY_MILESTONE)
if (milestone != null) { if (milestone != null) {
bind(milestone!!) bind(milestone!!)
toolbar.inflateMenu(R.menu.edit) toolbar.inflateMenu(R.menu.edit)
Loading
Loading
Loading
@@ -20,6 +20,7 @@ import com.afollestad.materialdialogs.color.ColorChooserDialog
Loading
@@ -20,6 +20,7 @@ import com.afollestad.materialdialogs.color.ColorChooserDialog
import com.commit451.gitlab.App import com.commit451.gitlab.App
import com.commit451.gitlab.R import com.commit451.gitlab.R
import com.commit451.gitlab.extension.checkValid import com.commit451.gitlab.extension.checkValid
import com.commit451.gitlab.extension.putParcelParcelableExtra
import com.commit451.gitlab.extension.text import com.commit451.gitlab.extension.text
import com.commit451.gitlab.model.api.Label import com.commit451.gitlab.model.api.Label
import com.commit451.gitlab.rx.CustomResponseSingleObserver import com.commit451.gitlab.rx.CustomResponseSingleObserver
Loading
@@ -138,7 +139,7 @@ class AddNewLabelActivity : BaseActivity(), ColorChooserDialog.ColorCallback {
Loading
@@ -138,7 +139,7 @@ class AddNewLabelActivity : BaseActivity(), ColorChooserDialog.ColorCallback {
   
override fun responseNonNullSuccess(label: Label) { override fun responseNonNullSuccess(label: Label) {
val data = Intent() val data = Intent()
data.putExtra(KEY_NEW_LABEL, Parcels.wrap(label)) data.putParcelParcelableExtra(KEY_NEW_LABEL, label)
setResult(Activity.RESULT_OK, data) setResult(Activity.RESULT_OK, data)
finish() finish()
} }
Loading
Loading
Loading
@@ -4,7 +4,6 @@ import android.content.Context
Loading
@@ -4,7 +4,6 @@ import android.content.Context
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 android.os.Parcelable
import android.support.design.widget.Snackbar import android.support.design.widget.Snackbar
import android.support.v4.widget.SwipeRefreshLayout import android.support.v4.widget.SwipeRefreshLayout
import android.support.v7.widget.GridLayoutManager import android.support.v7.widget.GridLayoutManager
Loading
@@ -20,6 +19,8 @@ import com.commit451.gitlab.R
Loading
@@ -20,6 +19,8 @@ import com.commit451.gitlab.R
import com.commit451.gitlab.adapter.UserAdapter import com.commit451.gitlab.adapter.UserAdapter
import com.commit451.gitlab.dialog.AccessDialog import com.commit451.gitlab.dialog.AccessDialog
import com.commit451.gitlab.event.MemberAddedEvent import com.commit451.gitlab.event.MemberAddedEvent
import com.commit451.gitlab.extension.getParcelerParcelable
import com.commit451.gitlab.extension.putParcelParcelableExtra
import com.commit451.gitlab.extension.setup import com.commit451.gitlab.extension.setup
import com.commit451.gitlab.model.api.Group import com.commit451.gitlab.model.api.Group
import com.commit451.gitlab.model.api.Member import com.commit451.gitlab.model.api.Member
Loading
@@ -29,7 +30,6 @@ import com.commit451.gitlab.util.LinkHeaderParser
Loading
@@ -29,7 +30,6 @@ import com.commit451.gitlab.util.LinkHeaderParser
import com.commit451.gitlab.viewHolder.UserViewHolder import com.commit451.gitlab.viewHolder.UserViewHolder
import com.commit451.teleprinter.Teleprinter import com.commit451.teleprinter.Teleprinter
import io.reactivex.Single import io.reactivex.Single
import org.parceler.Parcels
import retrofit2.HttpException import retrofit2.HttpException
import retrofit2.Response import retrofit2.Response
import timber.log.Timber import timber.log.Timber
Loading
@@ -52,7 +52,7 @@ class AddUserActivity : MorphActivity() {
Loading
@@ -52,7 +52,7 @@ class AddUserActivity : MorphActivity() {
   
fun newIntent(context: Context, group: Group): Intent { fun newIntent(context: Context, group: Group): Intent {
val intent = Intent(context, AddUserActivity::class.java) val intent = Intent(context, AddUserActivity::class.java)
intent.putExtra(KEY_GROUP, Parcels.wrap(group)) intent.putParcelParcelableExtra(KEY_GROUP, group)
return intent return intent
} }
} }
Loading
@@ -112,7 +112,7 @@ class AddUserActivity : MorphActivity() {
Loading
@@ -112,7 +112,7 @@ class AddUserActivity : MorphActivity() {
ButterKnife.bind(this) ButterKnife.bind(this)
teleprinter = Teleprinter(this) teleprinter = Teleprinter(this)
projectId = intent.getLongExtra(KEY_PROJECT_ID, -1) projectId = intent.getLongExtra(KEY_PROJECT_ID, -1)
group = Parcels.unwrap<Group>(intent.getParcelableExtra<Parcelable>(KEY_GROUP)) group = intent.getParcelerParcelable<Group>(KEY_GROUP)
dialogAccess = AccessDialog(this, object : AccessDialog.Listener { dialogAccess = AccessDialog(this, object : AccessDialog.Listener {
override fun onAccessApplied(accessLevel: Int) { override fun onAccessApplied(accessLevel: Int) {
dialogAccess.showLoading() dialogAccess.showLoading()
Loading
Loading
package com.commit451.gitlab.activity package com.commit451.gitlab.activity
   
   
import android.animation.TimeInterpolator
import android.app.Activity import android.app.Activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.os.Parcelable
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.animation.AccelerateDecelerateInterpolator import android.view.animation.AccelerateDecelerateInterpolator
Loading
@@ -14,13 +14,14 @@ import butterknife.ButterKnife
Loading
@@ -14,13 +14,14 @@ import butterknife.ButterKnife
import butterknife.OnClick import butterknife.OnClick
import com.commit451.gitlab.App import com.commit451.gitlab.App
import com.commit451.gitlab.R import com.commit451.gitlab.R
import com.commit451.gitlab.extension.getParcelerParcelable
import com.commit451.gitlab.extension.putParcelParcelableExtra
import com.commit451.gitlab.extension.setup import com.commit451.gitlab.extension.setup
import com.commit451.gitlab.extension.toPart
import com.commit451.gitlab.model.api.FileUploadResponse import com.commit451.gitlab.model.api.FileUploadResponse
import com.commit451.gitlab.model.api.Project import com.commit451.gitlab.model.api.Project
import com.commit451.gitlab.rx.CustomSingleObserver import com.commit451.gitlab.rx.CustomSingleObserver
import com.commit451.gitlab.rx.FileObservableFactory
import io.codetail.animation.ViewAnimationUtils import io.codetail.animation.ViewAnimationUtils
import org.parceler.Parcels
import pl.aprilapps.easyphotopicker.DefaultCallback import pl.aprilapps.easyphotopicker.DefaultCallback
import pl.aprilapps.easyphotopicker.EasyImage import pl.aprilapps.easyphotopicker.EasyImage
import timber.log.Timber import timber.log.Timber
Loading
@@ -39,7 +40,7 @@ class AttachActivity : BaseActivity() {
Loading
@@ -39,7 +40,7 @@ class AttachActivity : BaseActivity() {
   
fun newIntent(context: Context, project: Project): Intent { fun newIntent(context: Context, project: Project): Intent {
val intent = Intent(context, AttachActivity::class.java) val intent = Intent(context, AttachActivity::class.java)
intent.putExtra(KEY_PROJECT, Parcels.wrap(project)) intent.putParcelParcelableExtra(KEY_PROJECT, project)
return intent return intent
} }
} }
Loading
@@ -84,11 +85,11 @@ class AttachActivity : BaseActivity() {
Loading
@@ -84,11 +85,11 @@ class AttachActivity : BaseActivity() {
val animator = ViewAnimationUtils val animator = ViewAnimationUtils
.createCircularReveal(card, 0, card.height, 0f, finalRadius) .createCircularReveal(card, 0, card.height, 0f, finalRadius)
animator.duration = 500 animator.duration = 500
animator.interpolator = AccelerateDecelerateInterpolator() animator.interpolator = AccelerateDecelerateInterpolator() as TimeInterpolator?
animator.start() animator.start()
} }
   
project = Parcels.unwrap<Project>(intent.getParcelableExtra<Parcelable>(KEY_PROJECT)) project = intent.getParcelerParcelable<Project>(KEY_PROJECT)
} }
   
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
Loading
@@ -120,14 +121,14 @@ class AttachActivity : BaseActivity() {
Loading
@@ -120,14 +121,14 @@ class AttachActivity : BaseActivity() {
fun onPhotoReturned(photo: File) { fun onPhotoReturned(photo: File) {
progress.visibility = View.VISIBLE progress.visibility = View.VISIBLE
rootButtons.visibility = View.INVISIBLE rootButtons.visibility = View.INVISIBLE
FileObservableFactory.toPart(photo) photo.toPart()
.flatMap { part -> App.get().gitLab.uploadFile(project!!.id, part) } .flatMap { part -> App.get().gitLab.uploadFile(project!!.id, part) }
.setup(bindToLifecycle()) .setup(bindToLifecycle())
.subscribe(object : CustomSingleObserver<FileUploadResponse>() { .subscribe(object : CustomSingleObserver<FileUploadResponse>() {
   
override fun success(fileUploadResponse: FileUploadResponse) { override fun success(fileUploadResponse: FileUploadResponse) {
val data = Intent() val data = Intent()
data.putExtra(KEY_FILE_UPLOAD_RESPONSE, Parcels.wrap(fileUploadResponse)) data.putParcelParcelableExtra(KEY_FILE_UPLOAD_RESPONSE, fileUploadResponse)
setResult(Activity.RESULT_OK, data) setResult(Activity.RESULT_OK, data)
finish() finish()
} }
Loading
Loading
package com.commit451.gitlab.activity package com.commit451.gitlab.activity
   
import android.Manifest import android.Manifest
import android.annotation.TargetApi import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.os.Bundle import android.os.Bundle
import android.os.Parcelable
import android.support.design.widget.Snackbar import android.support.design.widget.Snackbar
import android.support.design.widget.TabLayout import android.support.design.widget.TabLayout
import android.support.v4.content.ContextCompat import android.support.v4.content.ContextCompat
Loading
@@ -15,22 +14,19 @@ import android.support.v7.widget.Toolbar
Loading
@@ -15,22 +14,19 @@ import android.support.v7.widget.Toolbar
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import butterknife.BindView
import butterknife.ButterKnife
import com.commit451.gitlab.App import com.commit451.gitlab.App
import com.commit451.gitlab.R import com.commit451.gitlab.R
import com.commit451.gitlab.adapter.BuildSectionsPagerAdapter import com.commit451.gitlab.adapter.BuildSectionsPagerAdapter
import com.commit451.gitlab.event.BuildChangedEvent import com.commit451.gitlab.event.BuildChangedEvent
import com.commit451.gitlab.model.Account import com.commit451.gitlab.extension.getDownloadBuildUrl
import com.commit451.gitlab.extension.getParcelerParcelable
import com.commit451.gitlab.extension.putParcelParcelableExtra
import com.commit451.gitlab.model.api.Build import com.commit451.gitlab.model.api.Build
import com.commit451.gitlab.model.api.Project import com.commit451.gitlab.model.api.Project
import com.commit451.gitlab.rx.CustomSingleObserver import com.commit451.gitlab.rx.CustomSingleObserver
import com.commit451.gitlab.util.DownloadUtil import com.commit451.gitlab.util.DownloadUtil
import org.parceler.Parcels
import butterknife.BindView
import butterknife.ButterKnife
import com.commit451.gitlab.extension.getDownloadBuildUrl
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
import timber.log.Timber import timber.log.Timber
Loading
@@ -49,8 +45,8 @@ class BuildActivity : BaseActivity() {
Loading
@@ -49,8 +45,8 @@ class BuildActivity : BaseActivity() {
   
fun newIntent(context: Context, project: Project, build: Build): Intent { fun newIntent(context: Context, project: Project, build: Build): Intent {
val intent = Intent(context, BuildActivity::class.java) val intent = Intent(context, BuildActivity::class.java)
intent.putExtra(KEY_PROJECT, Parcels.wrap(project)) intent.putParcelParcelableExtra(KEY_PROJECT, project)
intent.putExtra(KEY_BUILD, Parcels.wrap(build)) intent.putParcelParcelableExtra(KEY_BUILD, build)
return intent return intent
} }
} }
Loading
@@ -153,10 +149,10 @@ class BuildActivity : BaseActivity() {
Loading
@@ -153,10 +149,10 @@ class BuildActivity : BaseActivity() {
setContentView(R.layout.activity_build) setContentView(R.layout.activity_build)
ButterKnife.bind(this) ButterKnife.bind(this)
   
project = Parcels.unwrap<Project>(intent.getParcelableExtra<Parcelable>(KEY_PROJECT)) project = intent.getParcelerParcelable<Project>(KEY_PROJECT)!!
build = Parcels.unwrap<Build>(intent.getParcelableExtra<Parcelable>(KEY_BUILD)) build = intent.getParcelerParcelable<Build>(KEY_BUILD)!!
   
toolbar.title = getString(R.string.build_number) + build.id toolbar.title = String.format(getString(R.string.build_number), build.id)
toolbar.setNavigationIcon(R.drawable.ic_back_24dp) toolbar.setNavigationIcon(R.drawable.ic_back_24dp)
toolbar.setNavigationOnClickListener { onBackPressed() } toolbar.setNavigationOnClickListener { onBackPressed() }
toolbar.subtitle = project.nameWithNamespace toolbar.subtitle = project.nameWithNamespace
Loading
@@ -191,7 +187,7 @@ class BuildActivity : BaseActivity() {
Loading
@@ -191,7 +187,7 @@ class BuildActivity : BaseActivity() {
tabLayout.setupWithViewPager(viewPager) tabLayout.setupWithViewPager(viewPager)
} }
   
@TargetApi(23) @SuppressLint("NewApi")
private fun checkDownloadBuild() { private fun checkDownloadBuild() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
downloadBuild() downloadBuild()
Loading
Loading
Loading
@@ -3,7 +3,6 @@ package com.commit451.gitlab.activity
Loading
@@ -3,7 +3,6 @@ package com.commit451.gitlab.activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.os.Parcelable
import android.support.v4.widget.SwipeRefreshLayout import android.support.v4.widget.SwipeRefreshLayout
import android.support.v7.widget.LinearLayoutManager import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView import android.support.v7.widget.RecyclerView
Loading
@@ -16,12 +15,13 @@ import butterknife.ButterKnife
Loading
@@ -16,12 +15,13 @@ import butterknife.ButterKnife
import com.commit451.gitlab.App import com.commit451.gitlab.App
import com.commit451.gitlab.R import com.commit451.gitlab.R
import com.commit451.gitlab.adapter.DiffAdapter import com.commit451.gitlab.adapter.DiffAdapter
import com.commit451.gitlab.extension.getParcelerParcelable
import com.commit451.gitlab.extension.putParcelParcelableExtra
import com.commit451.gitlab.extension.setup import com.commit451.gitlab.extension.setup
import com.commit451.gitlab.model.api.Diff import com.commit451.gitlab.model.api.Diff
import com.commit451.gitlab.model.api.Project import com.commit451.gitlab.model.api.Project
import com.commit451.gitlab.model.api.RepositoryCommit import com.commit451.gitlab.model.api.RepositoryCommit
import com.commit451.gitlab.rx.CustomSingleObserver import com.commit451.gitlab.rx.CustomSingleObserver
import org.parceler.Parcels
import timber.log.Timber import timber.log.Timber
   
/** /**
Loading
@@ -36,8 +36,8 @@ class DiffActivity : BaseActivity() {
Loading
@@ -36,8 +36,8 @@ class DiffActivity : BaseActivity() {
   
fun newIntent(context: Context, project: Project, commit: RepositoryCommit): Intent { fun newIntent(context: Context, project: Project, commit: RepositoryCommit): Intent {
val intent = Intent(context, DiffActivity::class.java) val intent = Intent(context, DiffActivity::class.java)
intent.putExtra(EXTRA_PROJECT, Parcels.wrap(project)) intent.putParcelParcelableExtra(EXTRA_PROJECT, project)
intent.putExtra(EXTRA_COMMIT, Parcels.wrap(commit)) intent.putParcelParcelableExtra(EXTRA_COMMIT, commit)
return intent return intent
} }
} }
Loading
@@ -58,8 +58,8 @@ class DiffActivity : BaseActivity() {
Loading
@@ -58,8 +58,8 @@ class DiffActivity : BaseActivity() {
setContentView(R.layout.activity_diff) setContentView(R.layout.activity_diff)
ButterKnife.bind(this) ButterKnife.bind(this)
   
project = Parcels.unwrap<Project>(intent.getParcelableExtra<Parcelable>(EXTRA_PROJECT)) project = intent.getParcelerParcelable<Project>(EXTRA_PROJECT)!!
commit = Parcels.unwrap<RepositoryCommit>(intent.getParcelableExtra<Parcelable>(EXTRA_COMMIT)) commit = intent.getParcelerParcelable<RepositoryCommit>(EXTRA_COMMIT)!!
   
toolbar.setNavigationIcon(R.drawable.ic_back_24dp) toolbar.setNavigationIcon(R.drawable.ic_back_24dp)
toolbar.setNavigationOnClickListener { onBackPressed() } toolbar.setNavigationOnClickListener { onBackPressed() }
Loading
Loading
package com.commit451.gitlab.activity package com.commit451.gitlab.activity
   
import android.Manifest import android.Manifest
import android.annotation.TargetApi import android.annotation.SuppressLint
import android.content.ActivityNotFoundException
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.os.Environment import android.os.Environment
import android.support.annotation.IntDef
import android.support.design.widget.Snackbar import android.support.design.widget.Snackbar
import android.support.v4.content.ContextCompat import android.support.v4.content.ContextCompat
import android.support.v7.widget.Toolbar import android.support.v7.widget.Toolbar
Loading
@@ -18,25 +15,21 @@ import android.view.View
Loading
@@ -18,25 +15,21 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.webkit.MimeTypeMap import android.webkit.MimeTypeMap
import android.webkit.WebView import android.webkit.WebView
import butterknife.BindView
import butterknife.ButterKnife
import com.commit451.gitlab.App import com.commit451.gitlab.App
import com.commit451.gitlab.R import com.commit451.gitlab.R
import com.commit451.gitlab.extension.base64Decode
import com.commit451.gitlab.extension.setup
import com.commit451.gitlab.model.api.RepositoryFile import com.commit451.gitlab.model.api.RepositoryFile
import com.commit451.gitlab.rx.CustomSingleObserver import com.commit451.gitlab.rx.CustomSingleObserver
import com.commit451.gitlab.rx.DecodeObservableFactory import com.commit451.gitlab.util.FileUtil
import timber.log.Timber
import java.io.File import java.io.File
import java.io.FileOutputStream import java.io.FileOutputStream
import java.io.IOException import java.io.IOException
import java.nio.charset.Charset import java.nio.charset.Charset
   
import butterknife.BindView
import butterknife.ButterKnife
import com.commit451.gitlab.extension.setup
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import timber.log.Timber
class FileActivity : BaseActivity() { class FileActivity : BaseActivity() {
   
companion object { companion object {
Loading
@@ -48,13 +41,6 @@ class FileActivity : BaseActivity() {
Loading
@@ -48,13 +41,6 @@ class FileActivity : BaseActivity() {
private val EXTRA_PATH = "extra_path" private val EXTRA_PATH = "extra_path"
private val EXTRA_REF = "extra_ref" private val EXTRA_REF = "extra_ref"
   
const val OPTION_SAVE = 0
const val OPTION_OPEN = 1
@Retention(AnnotationRetention.SOURCE)
@IntDef(OPTION_SAVE.toLong(), OPTION_OPEN.toLong())
annotation class Option
fun newIntent(context: Context, projectId: Long, path: String, ref: String): Intent { fun newIntent(context: Context, projectId: Long, path: String, ref: String): Intent {
val intent = Intent(context, FileActivity::class.java) val intent = Intent(context, FileActivity::class.java)
intent.putExtra(EXTRA_PROJECT_ID, projectId) intent.putExtra(EXTRA_PROJECT_ID, projectId)
Loading
@@ -63,10 +49,10 @@ class FileActivity : BaseActivity() {
Loading
@@ -63,10 +49,10 @@ class FileActivity : BaseActivity() {
return intent return intent
} }
   
fun fileExtension(filename: String): String? { fun fileExtension(filename: String): String {
val extStart = filename.lastIndexOf(".") + 1 val extStart = filename.lastIndexOf(".") + 1
if (extStart < 1) { if (extStart < 1) {
return null return ""
} }
   
return filename.substring(extStart) return filename.substring(extStart)
Loading
@@ -84,8 +70,6 @@ class FileActivity : BaseActivity() {
Loading
@@ -84,8 +70,6 @@ class FileActivity : BaseActivity() {
var repositoryFile: RepositoryFile? = null var repositoryFile: RepositoryFile? = null
var fileName: String? = null var fileName: String? = null
var blob: ByteArray? = null var blob: ByteArray? = null
@Option
private var option: Int = 0
   
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
Loading
@@ -101,12 +85,10 @@ class FileActivity : BaseActivity() {
Loading
@@ -101,12 +85,10 @@ class FileActivity : BaseActivity() {
toolbar.setOnMenuItemClickListener(Toolbar.OnMenuItemClickListener { item -> toolbar.setOnMenuItemClickListener(Toolbar.OnMenuItemClickListener { item ->
when (item.itemId) { when (item.itemId) {
R.id.action_open -> { R.id.action_open -> {
option = OPTION_OPEN openFile()
checkAccountPermission()
return@OnMenuItemClickListener true return@OnMenuItemClickListener true
} }
R.id.action_save -> { R.id.action_save -> {
option = OPTION_SAVE
checkAccountPermission() checkAccountPermission()
return@OnMenuItemClickListener true return@OnMenuItemClickListener true
} }
Loading
@@ -150,7 +132,7 @@ class FileActivity : BaseActivity() {
Loading
@@ -150,7 +132,7 @@ class FileActivity : BaseActivity() {
} }
   
private fun loadBlob(repositoryFile: RepositoryFile) { private fun loadBlob(repositoryFile: RepositoryFile) {
DecodeObservableFactory.newDecode(repositoryFile.content) repositoryFile.content.base64Decode()
.setup(bindToLifecycle()) .setup(bindToLifecycle())
.subscribe(object : CustomSingleObserver<ByteArray>() { .subscribe(object : CustomSingleObserver<ByteArray>() {
   
Loading
@@ -168,13 +150,11 @@ class FileActivity : BaseActivity() {
Loading
@@ -168,13 +150,11 @@ class FileActivity : BaseActivity() {
private fun bindBlob(blob: ByteArray) { private fun bindBlob(blob: ByteArray) {
this.blob = blob this.blob = blob
val content: String val content: String
var mimeType: String? = null var mimeType: String?
val extension = fileExtension(fileName!!) val extension = fileExtension(fileName!!)
if (extension != null) { mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension)
mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension) if (mimeType != null) {
if (mimeType != null) { mimeType = mimeType.toLowerCase()
mimeType = mimeType.toLowerCase()
}
} }
   
if (mimeType != null && mimeType.startsWith("image/")) { if (mimeType != null && mimeType.startsWith("image/")) {
Loading
@@ -208,14 +188,10 @@ class FileActivity : BaseActivity() {
Loading
@@ -208,14 +188,10 @@ class FileActivity : BaseActivity() {
toolbar.inflateMenu(R.menu.menu_file) toolbar.inflateMenu(R.menu.menu_file)
} }
   
@TargetApi(23) @SuppressLint("NewApi")
private fun checkAccountPermission() { private fun checkAccountPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
if (option == OPTION_SAVE) { saveBlob()
saveBlob()
} else {
openFile()
}
} else { } else {
requestPermissions(arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), REQUEST_PERMISSION_WRITE_STORAGE) requestPermissions(arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), REQUEST_PERMISSION_WRITE_STORAGE)
} }
Loading
@@ -225,11 +201,7 @@ class FileActivity : BaseActivity() {
Loading
@@ -225,11 +201,7 @@ class FileActivity : BaseActivity() {
when (requestCode) { when (requestCode) {
REQUEST_PERMISSION_WRITE_STORAGE -> { REQUEST_PERMISSION_WRITE_STORAGE -> {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (option == OPTION_SAVE) { saveBlob()
saveBlob()
} else {
openFile()
}
} }
} }
} }
Loading
@@ -272,34 +244,30 @@ class FileActivity : BaseActivity() {
Loading
@@ -272,34 +244,30 @@ class FileActivity : BaseActivity() {
return null return null
} }
   
private fun openFile() { fun openFile() {
val file = saveBlob()
if (file == null) {
Snackbar.make(root, getString(R.string.open_error), Snackbar.LENGTH_SHORT)
.show()
return
}
   
val intent = Intent(Intent.ACTION_VIEW) if (blob != null && fileName != null) {
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK val intent = Intent(Intent.ACTION_VIEW)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
   
val extension = fileExtension(file.name) val file = FileUtil.saveBlobToProviderDirectory(this, blob!!, fileName!!)
if (extension != null) { val extension = fileExtension(fileName!!)
intent.setDataAndType(Uri.fromFile(file), MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension)) if (extension.isNotEmpty()) {
} else { intent.type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension)
intent.data = Uri.fromFile(file) }
} intent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
intent.data = FileUtil.uriForFile(this, file)
   
try { try {
startActivity(intent) startActivity(intent)
} catch (e: ActivityNotFoundException) { } catch (e: Exception) {
Timber.e(e) Timber.e(e)
Snackbar.make(root, getString(R.string.open_error), Snackbar.LENGTH_SHORT)
.show()
}
} else {
Snackbar.make(root, getString(R.string.open_error), Snackbar.LENGTH_SHORT) Snackbar.make(root, getString(R.string.open_error), Snackbar.LENGTH_SHORT)
.show() .show()
} catch (e: SecurityException) {
Timber.e(e)
Snackbar.make(root, getString(R.string.open_error), Snackbar.LENGTH_SHORT).show()
} }
} }
} }