Skip to content
Snippets Groups Projects
Commit 35eba923 authored by Jawnnypoo's avatar Jawnnypoo
Browse files

Merge remote-tracking branch 'origin/develop'

parents 8675a0f4 8b71a5d0
No related branches found
No related tags found
No related merge requests found
Pipeline #
Showing
with 278 additions and 258 deletions
Loading
Loading
@@ -85,4 +85,8 @@ gradle-app.setting
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
 
*.DS_Store
\ No newline at end of file
*.DS_Store
# Custom
app/gradle.properties
*.jks
Loading
Loading
@@ -3,7 +3,7 @@ image: openjdk:8-jdk
 
variables:
ANDROID_COMPILE_SDK: "25"
ANDROID_BUILD_TOOLS: "25.0.2"
ANDROID_BUILD_TOOLS: "25.0.3"
ANDROID_SDK_TOOLS: "25.2.3"
 
before_script:
Loading
Loading
@@ -12,13 +12,17 @@ before_script:
- 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 "build-tools;$ANDROID_BUILD_TOOLS"
- echo y | $ANDROID_HOME/tools/bin/sdkmanager "extras;android;m2repository"
- chmod +x ./gradlew
 
stages:
- build
- test
 
build:
stage: build
script:
- ./gradlew assembleFdroidDebug
test:
stage: test
script:
- ./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
Loading
@@ -14,6 +14,13 @@ You should be able to build the project from Android Studio without any further
```Gradle
LABCOAT_FABRIC_KEY = FABRIC_KEY_GOES_HERE_BUT_ONLY_REALLY_NEEDED_FOR_RELEASE_BUILDS
```
To build, run the following.
```bash
./gradlew assembleDebug
```
## 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:
 
Loading
Loading
Loading
Loading
@@ -18,15 +18,19 @@ apply plugin: 'io.fabric'
 
def versionMajor = 2
def versionMinor = 4
def versionPatch = 5
def versionPatch = 6
def versionBuild = 0 // bump for dogfood builds, public betas, etc.
 
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
buildToolsVersion "25.0.3"
 
project.ext {
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 {
Loading
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 {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
ext.enableCrashlytics = true
signingConfig signingConfigs.release
}
debug {
minifyEnabled false
Loading
Loading
@@ -73,22 +87,22 @@ android {
}
 
ext {
supportLibVersion = '25.3.0'
retrofitVersion = '2.2.0'
okHttpVersion = '3.6.0'
butterknifeVersion = '8.5.1'
supportLibVersion = '25.3.1'
retrofitVersion = '2.3.0'
okHttpVersion = '3.8.0'
butterknifeVersion = '8.6.0'
loganSquareVersion = '1.3.7'
parcelerVersion = '1.1.6'
parcelerVersion = '1.1.8'
reptarVersion = '2.4.1'
adapterLayout = '1.1.0'
materialDialogsVersion = '0.9.4.2'
materialDialogsVersion = '0.9.4.5'
leakCanaryVersion = '1.5'
}
 
dependencies {
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:support-v13:$supportLibVersion"
Loading
Loading
@@ -99,6 +113,8 @@ dependencies {
compile "com.android.support:customtabs:$supportLibVersion"
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:converter-simplexml:$retrofitVersion") {
exclude group: 'xpp3', module: 'xpp3'
Loading
Loading
@@ -123,12 +139,12 @@ dependencies {
 
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 '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"
kapt "org.parceler:parceler:$parcelerVersion"
Loading
Loading
@@ -139,7 +155,13 @@ dependencies {
compile 'com.github.Commit451:bypasses:1.1.0'
compile 'com.github.Commit451:ElasticDragDismissLayout:1.0.4'
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:Gimbal:2.0.2'
compile 'com.github.Commit451:Teleprinter:1.0.2'
Loading
Loading
@@ -149,12 +171,14 @@ dependencies {
compile 'com.github.Commit451:MorphTransitions:2.0.0'
compile 'com.github.Commit451.Alakazam:alakazam:1.0.1'
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:RetrofitProguardRules:2.2.0.0'
compile 'com.github.Commit451:LoganSquareProGuardRules:1.3.7.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'
 
Loading
Loading
@@ -166,9 +190,9 @@ dependencies {
 
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:commons:$materialDialogsVersion"
Loading
Loading
@@ -185,7 +209,7 @@ dependencies {
transitive = true;
}
 
normalCompile('com.crashlytics.sdk.android:crashlytics:2.6.7@aar') {
normalCompile('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') {
transitive = true;
}
 
Loading
Loading
@@ -194,5 +218,5 @@ dependencies {
testCompile "com.squareup.leakcanary:leakcanary-android-no-op:$leakCanaryVersion"
 
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"?>
<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.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 
<application
android:name=".App"
Loading
Loading
@@ -13,150 +13,130 @@
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".activity.LaunchActivity"
android:theme="@style/Activity.Launch">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<action android:name="android.intent.action.MAIN"/>
 
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".activity.ProjectsActivity"
android:launchMode="singleTask"
android:theme="@style/Activity.Projects" />
android:theme="@style/Activity.Projects"/>
<activity
android:name=".activity.GroupsActivity"
android:launchMode="singleTask"
android:theme="@style/Activity.Groups" />
android:theme="@style/Activity.Groups"/>
<activity
android:name=".activity.ActivityActivity"
android:launchMode="singleTask"
android:theme="@style/Activity.Activity" />
android:theme="@style/Activity.Activity"/>
<activity
android:name=".activity.TodosActivity"
android:launchMode="singleTask"
android:theme="@style/Activity.Todos" />
<activity android:name=".activity.ProjectActivity" />
android:theme="@style/Activity.Todos"/>
<activity android:name=".activity.ProjectActivity"/>
<activity
android:name=".activity.LoginActivity"
android:theme="@style/Activity.Login" />
<activity android:name=".activity.FileActivity" />
<activity android:name=".activity.IssueActivity" />
<activity android:name=".activity.DiffActivity" />
<activity android:name=".activity.AboutActivity" />
<activity android:name=".activity.AddUserActivity" />
android:theme="@style/Activity.Login"/>
<activity android:name=".activity.FileActivity"/>
<activity android:name=".activity.IssueActivity"/>
<activity android:name=".activity.DiffActivity"/>
<activity android:name=".activity.AboutActivity"/>
<activity android:name=".activity.AddUserActivity"/>
<activity
android:name=".activity.UserActivity"
android:theme="@style/Activity.User" />
<activity android:name=".activity.SearchActivity" />
android:theme="@style/Activity.User"/>
<activity android:name=".activity.SearchActivity"/>
<activity
android:name=".activity.GroupActivity"
android:theme="@style/Activity.Group" />
<activity android:name=".activity.MergeRequestActivity" />
<activity android:name=".activity.AddIssueActivity" />
<activity android:name=".activity.MilestoneActivity" />
<activity android:name=".activity.AddMilestoneActivity" />
<activity android:name=".activity.BuildActivity" />
android:theme="@style/Activity.Group"/>
<activity android:name=".activity.MergeRequestActivity"/>
<activity android:name=".activity.AddIssueActivity"/>
<activity android:name=".activity.MilestoneActivity"/>
<activity android:name=".activity.AddMilestoneActivity"/>
<activity android:name=".activity.BuildActivity"/>
<activity android:name=".activity.PipelineActivity"/>
<activity
android:name=".activity.LoadSomeInfoActivity"
android:theme="@style/Activity.Translucent" />
<activity android:name=".activity.SettingsActivity" />
<activity android:name=".activity.AddLabelActivity" />
<activity android:name=".activity.AddNewLabelActivity" />
android:theme="@style/Activity.Translucent"/>
<activity android:name=".activity.SettingsActivity"/>
<activity android:name=".activity.AddLabelActivity"/>
<activity android:name=".activity.AddNewLabelActivity"/>
<activity
android:name=".activity.PickBranchOrTagActivity"
android:theme="@style/Activity.Translucent" />
<activity android:name=".activity.WebLoginActivity" />
android:theme="@style/Activity.Translucent"/>
<activity android:name=".activity.WebLoginActivity"/>
<activity
android:name=".activity.AttachActivity"
android:theme="@style/Activity.Translucent" />
<activity android:name=".activity.DebugActivity" />
android:theme="@style/Activity.Translucent"/>
<activity
android:name=".activity.RoutingActivity"
android:launchMode="singleTask"
android:noHistory="true"
android:theme="@android:style/Theme.NoDisplay">
<!-- Standard Url -->
<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.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
 
<data android:scheme="@string/deeplink_scheme" />
<data android:scheme="@string/deeplink_scheme"/>
</intent-filter>
</activity>
<activity android:name=".widget.UserFeedWidgetConfigureActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</activity>
<activity android:name=".widget.ProjectFeedWidgetConfigureActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</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
android:name=".widget.UserFeedWidgetProvider"
android:label="User Feed">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_user_feed" />
android:resource="@xml/widget_user_feed"/>
</receiver>
<receiver
android:name=".widget.ProjectFeedWidgetProvider"
android:label="Project Feed">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_project_feed" />
android:resource="@xml/widget_project_feed"/>
</receiver>
 
<service
android:name=".widget.ProjectFeedWidgetService"
android:exported="false"
android:permission="android.permission.BIND_REMOTEVIEWS" />
android:permission="android.permission.BIND_REMOTEVIEWS"/>
 
</application>
 
</manifest>
\ No newline at end of file
</manifest>
Loading
Loading
@@ -13,6 +13,7 @@ import com.commit451.lift.Lift
import com.novoda.simplechromecustomtabs.SimpleChromeCustomTabs
import com.squareup.leakcanary.LeakCanary
import com.squareup.picasso.Picasso
import io.reactivex.plugins.RxJavaPlugins
import net.danlew.android.joda.JodaTimeAndroid
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
Loading
Loading
@@ -39,9 +40,8 @@ open class App : Application() {
}
}
 
lateinit var gitLab: GitLab
lateinit var currentAccount: Account
lateinit var gitLab: GitLabService
lateinit var gitLabRss: GitLabRss
lateinit var picasso: Picasso
 
override fun onCreate() {
Loading
Loading
@@ -53,6 +53,10 @@ open class App : Application() {
}
setupLeakCanary()
instance = this
RxJavaPlugins.setErrorHandler { error ->
//In case an error cannot be thrown properly anywhere else in the app
Timber.e(error)
}
 
GitLab.init()
 
Loading
Loading
@@ -92,7 +96,6 @@ open class App : Application() {
}
val client = clientBuilder.build()
initGitLab(account, client)
initGitLabRss(account, client)
if (BuildConfig.DEBUG) {
initPicasso(OkHttpClientFactory.create(account).build())
} else {
Loading
Loading
@@ -136,11 +139,9 @@ open class App : Application() {
}
 
private fun initGitLab(account: Account, client: OkHttpClient) {
gitLab = GitLabFactory.create(account, client)
}
private fun initGitLabRss(account: Account, client: OkHttpClient) {
gitLabRss = GitLabRssFactory.create(account, client)
val gitLabService = GitLabFactory.create(account, client)
val gitLabRss = GitLabRssFactory.create(account, client)
gitLab = GitLab(gitLabService, gitLabRss)
}
 
private fun initPicasso(client: OkHttpClient) {
Loading
Loading
Loading
Loading
@@ -67,6 +67,14 @@ class ActivityActivity : BaseActivity() {
return true
}
 
override fun onBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawer(GravityCompat.START)
} else {
super.onBackPressed()
}
}
override fun onDestroy() {
super.onDestroy()
App.bus().unregister(this)
Loading
Loading
Loading
Loading
@@ -4,16 +4,14 @@ import android.app.Activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.os.Parcelable
import android.support.design.widget.Snackbar
import android.support.design.widget.TextInputLayout
import android.support.v7.app.AlertDialog
import android.support.v7.widget.SwitchCompat
import android.support.v7.widget.Toolbar
import android.view.View
import android.view.ViewGroup
import android.widget.CheckBox
import android.widget.EditText
import android.widget.FrameLayout
import android.widget.Spinner
import android.widget.TextView
import butterknife.BindView
Loading
Loading
@@ -28,6 +26,8 @@ import com.commit451.gitlab.adapter.MilestoneSpinnerAdapter
import com.commit451.gitlab.event.IssueChangedEvent
import com.commit451.gitlab.event.IssueCreatedEvent
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.model.api.*
import com.commit451.gitlab.navigation.Navigator
Loading
Loading
@@ -37,7 +37,6 @@ import com.commit451.teleprinter.Teleprinter
import io.reactivex.Single
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import org.parceler.Parcels
import retrofit2.Response
import timber.log.Timber
import java.util.*
Loading
Loading
@@ -55,15 +54,15 @@ class AddIssueActivity : MorphActivity() {
 
fun newIntent(context: Context, project: Project, issue: Issue?): Intent {
val intent = Intent(context, AddIssueActivity::class.java)
intent.putExtra(KEY_PROJECT, Parcels.wrap(project))
intent.putParcelParcelableExtra(KEY_PROJECT, project)
if (issue != null) {
intent.putExtra(KEY_ISSUE, Parcels.wrap(issue))
intent.putParcelParcelableExtra(KEY_ISSUE, issue)
}
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.title_text_input_layout) lateinit var textInputLayoutTitle: TextInputLayout
@BindView(R.id.description) lateinit var textDescription: EditText
Loading
Loading
@@ -76,7 +75,7 @@ class AddIssueActivity : MorphActivity() {
@BindView(R.id.labels_progress) lateinit var progressLabels: View
@BindView(R.id.root_add_labels) lateinit var rootAddLabels: ViewGroup
@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 teleprinter: Teleprinter
Loading
Loading
@@ -97,16 +96,16 @@ class AddIssueActivity : MorphActivity() {
morph(root)
teleprinter = Teleprinter(this)
 
project = Parcels.unwrap<Project>(intent.getParcelableExtra<Parcelable>(KEY_PROJECT))
issue = Parcels.unwrap<Issue>(intent.getParcelableExtra<Parcelable>(KEY_ISSUE))
project = intent.getParcelerParcelable<Project>(KEY_PROJECT)!!
issue = intent.getParcelerParcelable<Issue>(KEY_ISSUE)
members = HashSet<Member>()
adapterLabels = AddIssueLabelAdapter(object : AddIssueLabelAdapter.Listener {
override fun onLabelClicked(label: Label) {
AlertDialog.Builder(this@AddIssueActivity)
.setTitle(R.string.remove)
.setMessage(R.string.are_you_sure_you_want_to_remove)
.setPositiveButton(android.R.string.yes) { dialog, which -> adapterLabels.removeLabel(label) }
.setNegativeButton(android.R.string.no) { dialog, which -> dialog.dismiss() }
.setPositiveButton(android.R.string.yes) { _, _ -> adapterLabels.removeLabel(label) }
.setNegativeButton(android.R.string.no) { dialog, _ -> dialog.dismiss() }
.show()
}
})
Loading
Loading
@@ -224,7 +223,7 @@ class AddIssueActivity : MorphActivity() {
if (!issue?.description.isNullOrEmpty()) {
textDescription.setText(issue!!.description)
}
switchConfidential.isChecked = issue!!.isConfidential
checkConfidential.isChecked = issue!!.isConfidential
}
 
private fun setAssignees() {
Loading
Loading
@@ -256,15 +255,16 @@ class AddIssueActivity : MorphActivity() {
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
REQUEST_LABEL -> if (resultCode == Activity.RESULT_OK) {
val label = Parcels.unwrap<Label>(data?.getParcelableExtra<Parcelable>(AddLabelActivity.KEY_LABEL))
if (adapterLabels.containsLabel(label)) {
Snackbar.make(root, R.string.label_already_added, Snackbar.LENGTH_SHORT)
.show()
} else {
adapterLabels.addLabel(label)
REQUEST_LABEL ->
if (resultCode == Activity.RESULT_OK) {
val label = data?.getParcelerParcelable<Label>(AddLabelActivity.KEY_LABEL)!!
if (adapterLabels.containsLabel(label)) {
Snackbar.make(root, R.string.label_already_added, Snackbar.LENGTH_SHORT)
.show()
} else {
adapterLabels.addLabel(label)
}
}
}
}
}
 
Loading
Loading
@@ -272,8 +272,8 @@ class AddIssueActivity : MorphActivity() {
AlertDialog.Builder(this)
.setTitle(R.string.discard)
.setMessage(R.string.are_you_sure_you_want_to_discard)
.setPositiveButton(android.R.string.yes) { dialog, which -> dismiss() }
.setNegativeButton(android.R.string.no) { dialog, which -> dialog.dismiss() }
.setPositiveButton(android.R.string.yes) { _, _ -> dismiss() }
.setNegativeButton(android.R.string.no) { dialog, _ -> dialog.dismiss() }
.show()
}
 
Loading
Loading
@@ -310,7 +310,7 @@ class AddIssueActivity : MorphActivity() {
assigneeId,
milestoneId,
labelsCommaSeperated,
switchConfidential.isChecked)
checkConfidential.isChecked)
}
}
 
Loading
Loading
Loading
Loading
@@ -4,7 +4,6 @@ import android.app.Activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.os.Parcelable
import android.support.v4.widget.SwipeRefreshLayout
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
Loading
Loading
@@ -18,12 +17,13 @@ import com.commit451.gitlab.App
import com.commit451.gitlab.R
import com.commit451.gitlab.R.string.labels
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.model.api.Label
import com.commit451.gitlab.navigation.Navigator
import com.commit451.gitlab.rx.CustomSingleObserver
import com.commit451.gitlab.viewHolder.LabelViewHolder
import org.parceler.Parcels
import timber.log.Timber
 
/**
Loading
Loading
@@ -76,7 +76,7 @@ class AddLabelActivity : BaseActivity() {
adapterLabel = LabelAdapter(object : LabelAdapter.Listener {
override fun onLabelClicked(label: Label, viewHolder: LabelViewHolder) {
val data = Intent()
data.putExtra(KEY_LABEL, Parcels.wrap(label))
data.putParcelParcelableExtra(KEY_LABEL, label)
setResult(Activity.RESULT_OK, data)
finish()
}
Loading
Loading
@@ -94,7 +94,7 @@ class AddLabelActivity : BaseActivity() {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
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)
}
}
Loading
Loading
Loading
Loading
@@ -3,7 +3,6 @@ package com.commit451.gitlab.activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.os.Parcelable
import android.support.design.widget.Snackbar
import android.support.design.widget.TextInputLayout
import android.support.v7.widget.Toolbar
Loading
Loading
@@ -20,13 +19,14 @@ import com.commit451.gitlab.R
import com.commit451.gitlab.event.MilestoneChangedEvent
import com.commit451.gitlab.event.MilestoneCreatedEvent
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.model.api.Milestone
import com.commit451.gitlab.rx.CustomSingleObserver
import com.commit451.teleprinter.Teleprinter
import com.wdullaer.materialdatetimepicker.date.DatePickerDialog
import io.reactivex.Single
import org.parceler.Parcels
import timber.log.Timber
import java.util.*
 
Loading
Loading
@@ -41,7 +41,7 @@ class AddMilestoneActivity : MorphActivity() {
val intent = Intent(context, AddMilestoneActivity::class.java)
intent.putExtra(KEY_PROJECT_ID, projectId)
if (milestone != null) {
intent.putExtra(KEY_MILESTONE, Parcels.wrap(milestone))
intent.putParcelParcelableExtra(KEY_MILESTONE, milestone)
}
return intent
}
Loading
Loading
@@ -61,7 +61,7 @@ class AddMilestoneActivity : MorphActivity() {
var milestone: Milestone? = null
var currentDate: Date? = null
 
val onDateSetListener = DatePickerDialog.OnDateSetListener { view, year, monthOfYear, dayOfMonth ->
val onDateSetListener = DatePickerDialog.OnDateSetListener { _, year, monthOfYear, dayOfMonth ->
val calendar = Calendar.getInstance()
calendar.set(Calendar.YEAR, year)
calendar.set(Calendar.MONTH, monthOfYear)
Loading
Loading
@@ -93,7 +93,7 @@ class AddMilestoneActivity : MorphActivity() {
morph(root)
teleprinter = Teleprinter(this)
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) {
bind(milestone!!)
toolbar.inflateMenu(R.menu.edit)
Loading
Loading
Loading
Loading
@@ -20,6 +20,7 @@ import com.afollestad.materialdialogs.color.ColorChooserDialog
import com.commit451.gitlab.App
import com.commit451.gitlab.R
import com.commit451.gitlab.extension.checkValid
import com.commit451.gitlab.extension.putParcelParcelableExtra
import com.commit451.gitlab.extension.text
import com.commit451.gitlab.model.api.Label
import com.commit451.gitlab.rx.CustomResponseSingleObserver
Loading
Loading
@@ -138,7 +139,7 @@ class AddNewLabelActivity : BaseActivity(), ColorChooserDialog.ColorCallback {
 
override fun responseNonNullSuccess(label: Label) {
val data = Intent()
data.putExtra(KEY_NEW_LABEL, Parcels.wrap(label))
data.putParcelParcelableExtra(KEY_NEW_LABEL, label)
setResult(Activity.RESULT_OK, data)
finish()
}
Loading
Loading
Loading
Loading
@@ -4,7 +4,6 @@ import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.os.Parcelable
import android.support.design.widget.Snackbar
import android.support.v4.widget.SwipeRefreshLayout
import android.support.v7.widget.GridLayoutManager
Loading
Loading
@@ -20,6 +19,8 @@ import com.commit451.gitlab.R
import com.commit451.gitlab.adapter.UserAdapter
import com.commit451.gitlab.dialog.AccessDialog
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.model.api.Group
import com.commit451.gitlab.model.api.Member
Loading
Loading
@@ -29,7 +30,6 @@ import com.commit451.gitlab.util.LinkHeaderParser
import com.commit451.gitlab.viewHolder.UserViewHolder
import com.commit451.teleprinter.Teleprinter
import io.reactivex.Single
import org.parceler.Parcels
import retrofit2.HttpException
import retrofit2.Response
import timber.log.Timber
Loading
Loading
@@ -52,7 +52,7 @@ class AddUserActivity : MorphActivity() {
 
fun newIntent(context: Context, group: Group): Intent {
val intent = Intent(context, AddUserActivity::class.java)
intent.putExtra(KEY_GROUP, Parcels.wrap(group))
intent.putParcelParcelableExtra(KEY_GROUP, group)
return intent
}
}
Loading
Loading
@@ -112,7 +112,7 @@ class AddUserActivity : MorphActivity() {
ButterKnife.bind(this)
teleprinter = Teleprinter(this)
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 {
override fun onAccessApplied(accessLevel: Int) {
dialogAccess.showLoading()
Loading
Loading
package com.commit451.gitlab.activity
 
 
import android.animation.TimeInterpolator
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.os.Parcelable
import android.view.View
import android.view.ViewGroup
import android.view.animation.AccelerateDecelerateInterpolator
Loading
Loading
@@ -14,13 +14,14 @@ import butterknife.ButterKnife
import butterknife.OnClick
import com.commit451.gitlab.App
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.toPart
import com.commit451.gitlab.model.api.FileUploadResponse
import com.commit451.gitlab.model.api.Project
import com.commit451.gitlab.rx.CustomSingleObserver
import com.commit451.gitlab.rx.FileObservableFactory
import io.codetail.animation.ViewAnimationUtils
import org.parceler.Parcels
import pl.aprilapps.easyphotopicker.DefaultCallback
import pl.aprilapps.easyphotopicker.EasyImage
import timber.log.Timber
Loading
Loading
@@ -39,7 +40,7 @@ class AttachActivity : BaseActivity() {
 
fun newIntent(context: Context, project: Project): Intent {
val intent = Intent(context, AttachActivity::class.java)
intent.putExtra(KEY_PROJECT, Parcels.wrap(project))
intent.putParcelParcelableExtra(KEY_PROJECT, project)
return intent
}
}
Loading
Loading
@@ -84,11 +85,11 @@ class AttachActivity : BaseActivity() {
val animator = ViewAnimationUtils
.createCircularReveal(card, 0, card.height, 0f, finalRadius)
animator.duration = 500
animator.interpolator = AccelerateDecelerateInterpolator()
animator.interpolator = AccelerateDecelerateInterpolator() as TimeInterpolator?
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?) {
Loading
Loading
@@ -120,14 +121,14 @@ class AttachActivity : BaseActivity() {
fun onPhotoReturned(photo: File) {
progress.visibility = View.VISIBLE
rootButtons.visibility = View.INVISIBLE
FileObservableFactory.toPart(photo)
photo.toPart()
.flatMap { part -> App.get().gitLab.uploadFile(project!!.id, part) }
.setup(bindToLifecycle())
.subscribe(object : CustomSingleObserver<FileUploadResponse>() {
 
override fun success(fileUploadResponse: FileUploadResponse) {
val data = Intent()
data.putExtra(KEY_FILE_UPLOAD_RESPONSE, Parcels.wrap(fileUploadResponse))
data.putParcelParcelableExtra(KEY_FILE_UPLOAD_RESPONSE, fileUploadResponse)
setResult(Activity.RESULT_OK, data)
finish()
}
Loading
Loading
package com.commit451.gitlab.activity
 
import android.Manifest
import android.annotation.TargetApi
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Bundle
import android.os.Parcelable
import android.support.design.widget.Snackbar
import android.support.design.widget.TabLayout
import android.support.v4.content.ContextCompat
Loading
Loading
@@ -15,22 +14,19 @@ import android.support.v7.widget.Toolbar
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import butterknife.BindView
import butterknife.ButterKnife
import com.commit451.gitlab.App
import com.commit451.gitlab.R
import com.commit451.gitlab.adapter.BuildSectionsPagerAdapter
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.Project
import com.commit451.gitlab.rx.CustomSingleObserver
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.schedulers.Schedulers
import timber.log.Timber
Loading
Loading
@@ -49,8 +45,8 @@ class BuildActivity : BaseActivity() {
 
fun newIntent(context: Context, project: Project, build: Build): Intent {
val intent = Intent(context, BuildActivity::class.java)
intent.putExtra(KEY_PROJECT, Parcels.wrap(project))
intent.putExtra(KEY_BUILD, Parcels.wrap(build))
intent.putParcelParcelableExtra(KEY_PROJECT, project)
intent.putParcelParcelableExtra(KEY_BUILD, build)
return intent
}
}
Loading
Loading
@@ -153,10 +149,10 @@ class BuildActivity : BaseActivity() {
setContentView(R.layout.activity_build)
ButterKnife.bind(this)
 
project = Parcels.unwrap<Project>(intent.getParcelableExtra<Parcelable>(KEY_PROJECT))
build = Parcels.unwrap<Build>(intent.getParcelableExtra<Parcelable>(KEY_BUILD))
project = intent.getParcelerParcelable<Project>(KEY_PROJECT)!!
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.setNavigationOnClickListener { onBackPressed() }
toolbar.subtitle = project.nameWithNamespace
Loading
Loading
@@ -191,7 +187,7 @@ class BuildActivity : BaseActivity() {
tabLayout.setupWithViewPager(viewPager)
}
 
@TargetApi(23)
@SuppressLint("NewApi")
private fun checkDownloadBuild() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
downloadBuild()
Loading
Loading
Loading
Loading
@@ -3,7 +3,6 @@ package com.commit451.gitlab.activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.os.Parcelable
import android.support.v4.widget.SwipeRefreshLayout
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
Loading
Loading
@@ -16,12 +15,13 @@ import butterknife.ButterKnife
import com.commit451.gitlab.App
import com.commit451.gitlab.R
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.model.api.Diff
import com.commit451.gitlab.model.api.Project
import com.commit451.gitlab.model.api.RepositoryCommit
import com.commit451.gitlab.rx.CustomSingleObserver
import org.parceler.Parcels
import timber.log.Timber
 
/**
Loading
Loading
@@ -36,8 +36,8 @@ class DiffActivity : BaseActivity() {
 
fun newIntent(context: Context, project: Project, commit: RepositoryCommit): Intent {
val intent = Intent(context, DiffActivity::class.java)
intent.putExtra(EXTRA_PROJECT, Parcels.wrap(project))
intent.putExtra(EXTRA_COMMIT, Parcels.wrap(commit))
intent.putParcelParcelableExtra(EXTRA_PROJECT, project)
intent.putParcelParcelableExtra(EXTRA_COMMIT, commit)
return intent
}
}
Loading
Loading
@@ -58,8 +58,8 @@ class DiffActivity : BaseActivity() {
setContentView(R.layout.activity_diff)
ButterKnife.bind(this)
 
project = Parcels.unwrap<Project>(intent.getParcelableExtra<Parcelable>(EXTRA_PROJECT))
commit = Parcels.unwrap<RepositoryCommit>(intent.getParcelableExtra<Parcelable>(EXTRA_COMMIT))
project = intent.getParcelerParcelable<Project>(EXTRA_PROJECT)!!
commit = intent.getParcelerParcelable<RepositoryCommit>(EXTRA_COMMIT)!!
 
toolbar.setNavigationIcon(R.drawable.ic_back_24dp)
toolbar.setNavigationOnClickListener { onBackPressed() }
Loading
Loading
package com.commit451.gitlab.activity
 
import android.Manifest
import android.annotation.TargetApi
import android.content.ActivityNotFoundException
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Bundle
import android.os.Environment
import android.support.annotation.IntDef
import android.support.design.widget.Snackbar
import android.support.v4.content.ContextCompat
import android.support.v7.widget.Toolbar
Loading
Loading
@@ -18,25 +15,21 @@ import android.view.View
import android.view.ViewGroup
import android.webkit.MimeTypeMap
import android.webkit.WebView
import butterknife.BindView
import butterknife.ButterKnife
import com.commit451.gitlab.App
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.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.FileOutputStream
import java.io.IOException
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() {
 
companion object {
Loading
Loading
@@ -48,13 +41,6 @@ class FileActivity : BaseActivity() {
private val EXTRA_PATH = "extra_path"
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 {
val intent = Intent(context, FileActivity::class.java)
intent.putExtra(EXTRA_PROJECT_ID, projectId)
Loading
Loading
@@ -63,10 +49,10 @@ class FileActivity : BaseActivity() {
return intent
}
 
fun fileExtension(filename: String): String? {
fun fileExtension(filename: String): String {
val extStart = filename.lastIndexOf(".") + 1
if (extStart < 1) {
return null
return ""
}
 
return filename.substring(extStart)
Loading
Loading
@@ -84,8 +70,6 @@ class FileActivity : BaseActivity() {
var repositoryFile: RepositoryFile? = null
var fileName: String? = null
var blob: ByteArray? = null
@Option
private var option: Int = 0
 
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Loading
Loading
@@ -101,12 +85,10 @@ class FileActivity : BaseActivity() {
toolbar.setOnMenuItemClickListener(Toolbar.OnMenuItemClickListener { item ->
when (item.itemId) {
R.id.action_open -> {
option = OPTION_OPEN
checkAccountPermission()
openFile()
return@OnMenuItemClickListener true
}
R.id.action_save -> {
option = OPTION_SAVE
checkAccountPermission()
return@OnMenuItemClickListener true
}
Loading
Loading
@@ -150,7 +132,7 @@ class FileActivity : BaseActivity() {
}
 
private fun loadBlob(repositoryFile: RepositoryFile) {
DecodeObservableFactory.newDecode(repositoryFile.content)
repositoryFile.content.base64Decode()
.setup(bindToLifecycle())
.subscribe(object : CustomSingleObserver<ByteArray>() {
 
Loading
Loading
@@ -168,13 +150,11 @@ class FileActivity : BaseActivity() {
private fun bindBlob(blob: ByteArray) {
this.blob = blob
val content: String
var mimeType: String? = null
var mimeType: String?
val extension = fileExtension(fileName!!)
if (extension != null) {
mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension)
if (mimeType != null) {
mimeType = mimeType.toLowerCase()
}
mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension)
if (mimeType != null) {
mimeType = mimeType.toLowerCase()
}
 
if (mimeType != null && mimeType.startsWith("image/")) {
Loading
Loading
@@ -208,14 +188,10 @@ class FileActivity : BaseActivity() {
toolbar.inflateMenu(R.menu.menu_file)
}
 
@TargetApi(23)
@SuppressLint("NewApi")
private fun checkAccountPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
if (option == OPTION_SAVE) {
saveBlob()
} else {
openFile()
}
saveBlob()
} else {
requestPermissions(arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), REQUEST_PERMISSION_WRITE_STORAGE)
}
Loading
Loading
@@ -225,11 +201,7 @@ class FileActivity : BaseActivity() {
when (requestCode) {
REQUEST_PERMISSION_WRITE_STORAGE -> {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (option == OPTION_SAVE) {
saveBlob()
} else {
openFile()
}
saveBlob()
}
}
}
Loading
Loading
@@ -272,34 +244,30 @@ class FileActivity : BaseActivity() {
return null
}
 
private fun openFile() {
val file = saveBlob()
if (file == null) {
Snackbar.make(root, getString(R.string.open_error), Snackbar.LENGTH_SHORT)
.show()
return
}
fun openFile() {
 
val intent = Intent(Intent.ACTION_VIEW)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
if (blob != null && fileName != null) {
val intent = Intent(Intent.ACTION_VIEW)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
 
val extension = fileExtension(file.name)
if (extension != null) {
intent.setDataAndType(Uri.fromFile(file), MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension))
} else {
intent.data = Uri.fromFile(file)
}
val file = FileUtil.saveBlobToProviderDirectory(this, blob!!, fileName!!)
val extension = fileExtension(fileName!!)
if (extension.isNotEmpty()) {
intent.type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension)
}
intent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
intent.data = FileUtil.uriForFile(this, file)
 
try {
startActivity(intent)
} catch (e: ActivityNotFoundException) {
Timber.e(e)
try {
startActivity(intent)
} catch (e: Exception) {
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)
.show()
} catch (e: SecurityException) {
Timber.e(e)
Snackbar.make(root, getString(R.string.open_error), Snackbar.LENGTH_SHORT).show()
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment