Catch filenotfoundexception, add build variant for debug

This commit is contained in:
Matthieu 2021-05-19 11:05:44 +02:00
parent e0ce7284c8
commit ccadaac718
10 changed files with 181 additions and 9 deletions

1
.gitignore vendored
View File

@ -14,5 +14,6 @@
.cxx .cxx
.idea .idea
app/release app/release
app/debug
app/lint app/lint
lint lint

View File

@ -36,6 +36,7 @@ android {
sourceSets { sourceSets {
main.java.srcDirs += 'src/main/java' main.java.srcDirs += 'src/main/java'
test.java.srcDirs += 'src/test/java' test.java.srcDirs += 'src/test/java'
staging.res.srcDirs += 'src/debug/res'
androidTest.java.srcDirs += 'src/androidTest/java' androidTest.java.srcDirs += 'src/androidTest/java'
} }
testBuildType "staging" testBuildType "staging"
@ -44,7 +45,8 @@ android {
buildTypes { buildTypes {
debug { debug {
applicationIdSuffix '.debug'
versionNameSuffix "-debug"
} }
staging { staging {
initWith debug initWith debug
@ -74,6 +76,7 @@ android {
proguardFiles 'proguard-rules.pro' proguardFiles 'proguard-rules.pro'
} }
} }
testOptions { testOptions {
animationsDisabled true animationsDisabled true
@ -86,14 +89,23 @@ android {
apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-kapt'
} }
afterEvaluate {
/**
* Make a string with the application_id (available in xml etc)
*/
android.applicationVariants.all { variant ->
variant.resValue 'string', 'application_id', variant.applicationId
}
}
dependencies { dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])
/** /**
* AndroidX dependencies: * AndroidX dependencies:
*/ */
implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'androidx.core:core-ktx:1.3.2' implementation 'androidx.core:core-ktx:1.5.0'
implementation 'androidx.preference:preference-ktx:1.1.1' implementation 'androidx.preference:preference-ktx:1.1.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5' implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
@ -111,7 +123,7 @@ dependencies {
implementation "androidx.annotation:annotation:1.2.0" implementation "androidx.annotation:annotation:1.2.0"
implementation 'androidx.gridlayout:gridlayout:1.0.0' implementation 'androidx.gridlayout:gridlayout:1.0.0'
implementation "androidx.activity:activity-ktx:1.2.3" implementation "androidx.activity:activity-ktx:1.2.3"
implementation 'androidx.fragment:fragment-ktx:1.3.3' implementation 'androidx.fragment:fragment-ktx:1.3.4'
// Use the most recent version of CameraX // Use the most recent version of CameraX
def cameraX_version = '1.0.0' def cameraX_version = '1.0.0'
@ -191,7 +203,7 @@ dependencies {
// debugImplementation required vs testImplementation: https://issuetracker.google.com/issues/128612536 // debugImplementation required vs testImplementation: https://issuetracker.google.com/issues/128612536
//noinspection FragmentGradleConfiguration //noinspection FragmentGradleConfiguration
stagingImplementation("androidx.fragment:fragment-testing:1.3.3") { stagingImplementation("androidx.fragment:fragment-testing:1.3.4") {
exclude group:'androidx.test', module:'monitor' exclude group:'androidx.test', module:'monitor'
} }

View File

@ -0,0 +1,38 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="49.59793"
android:startX="42.9492"
android:endY="92.4963"
android:endX="85.84757"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<group
android:name="foo"
android:scaleX="2"
android:scaleY="2"
android:translateY="0"
android:translateX="0">
<path
android:pathData="M23.0332,30.2725L27.5781,30.2725C31.8595,30.2725 35.3302,26.9088 35.3302,22.7596C35.3302,18.6103 31.8595,15.2467 27.5781,15.2467L21.0185,15.2467C18.5485,15.2467 16.5461,17.1872 16.5461,19.581L16.5461,36.451L23.0332,30.2725Z"
android:strokeWidth="1"
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</group>
</vector>

View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<vector
android:height="108dp"
android:width="108dp"
android:viewportHeight="108"
android:viewportWidth="108"
xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#3DDC84"
android:pathData="M0,0h108v108h-108z"/>
<path android:fillColor="#00000000" android:pathData="M9,0L9,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,0L19,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M29,0L29,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M39,0L39,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M49,0L49,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M59,0L59,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M69,0L69,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M79,0L79,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M89,0L89,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M99,0L99,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,9L108,9"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,19L108,19"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,29L108,29"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,39L108,39"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,49L108,49"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,59L108,59"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,69L108,69"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,79L108,79"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,89L108,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,99L108,99"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,29L89,29"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,39L89,39"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,49L89,49"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,59L89,59"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,69L89,69"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,79L89,79"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M29,19L29,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M39,19L39,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M49,19L49,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M59,19L59,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M69,19L69,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M79,19L79,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
</vector>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

View File

@ -127,7 +127,7 @@
<provider <provider
android:name="androidx.core.content.FileProvider" android:name="androidx.core.content.FileProvider"
android:authorities="org.pixeldroid.app.fileprovider" android:authorities="${applicationId}.fileprovider"
android:exported="false" android:exported="false"
android:grantUriPermissions="true"> android:grantUriPermissions="true">
<meta-data <meta-data

View File

@ -39,6 +39,7 @@ import io.reactivex.schedulers.Schedulers
import okhttp3.MultipartBody import okhttp3.MultipartBody
import retrofit2.HttpException import retrofit2.HttpException
import java.io.File import java.io.File
import java.io.FileNotFoundException
import java.io.IOException import java.io.IOException
import java.io.OutputStream import java.io.OutputStream
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
@ -313,7 +314,16 @@ class PostCreationActivity : BaseActivity() {
for (data: PhotoData in photoData) { for (data: PhotoData in photoData) {
val imageUri = data.imageUri val imageUri = data.imageUri
val imageInputStream = contentResolver.openInputStream(imageUri)!! val imageInputStream = try {
contentResolver.openInputStream(imageUri)!!
} catch (e: FileNotFoundException){
AlertDialog.Builder(this).apply {
setMessage(getString(R.string.file_not_found).format(imageUri))
setNegativeButton(android.R.string.ok) { _, _ -> }
}.show()
return
}
val imagePart = ProgressRequestBody(imageInputStream, data.size) val imagePart = ProgressRequestBody(imageInputStream, data.size)
val requestBody = MultipartBody.Builder() val requestBody = MultipartBody.Builder()

View File

@ -1,7 +1,12 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<!-- Name of the app. In most languages you won't want to change this. -->
<string name="app_name">PixelDroid</string> <string name="app_name">PixelDroid</string>
<!-- Button to go to the user's profile -->
<string name="menu_account">My Profile</string> <string name="menu_account">My Profile</string>
<!-- Button to go to the settings -->
<string name="menu_settings">Settings</string> <string name="menu_settings">Settings</string>
<string name="invalid_domain">"Invalid domain"</string> <string name="invalid_domain">"Invalid domain"</string>
<string name="registration_failed">"Could not register the application with this server"</string> <string name="registration_failed">"Could not register the application with this server"</string>
@ -14,16 +19,35 @@
<string name="instance_not_pixelfed_continue">"OK, continue anyway"</string> <string name="instance_not_pixelfed_continue">"OK, continue anyway"</string>
<string name="instance_not_pixelfed_cancel">"Cancel logging in"</string> <string name="instance_not_pixelfed_cancel">"Cancel logging in"</string>
<string name="title_activity_settings2">Settings</string> <string name="title_activity_settings2">Settings</string>
<!-- Theme Preferences -->
<!-- Theme Preferences: title of button -->
<string name="theme_title">Application Theme</string> <string name="theme_title">Application Theme</string>
<!-- Theme Preferences: title of the settings section dedicated to themes -->
<string name="theme_header">Theme</string> <string name="theme_header">Theme</string>
<!-- Theme Preferences: default option (follow the system theme) -->
<string name="default_system">Default (Follows system)</string> <string name="default_system">Default (Follows system)</string>
<!-- Theme Preferences: light theme option -->
<string name="light_theme">Light</string> <string name="light_theme">Light</string>
<!-- Theme Preferences: dark theme option -->
<string name="dark_theme">Dark</string> <string name="dark_theme">Dark</string>
<!-- Notifications: follow notification -->
<string name="followed_notification">%1$s followed you</string> <string name="followed_notification">%1$s followed you</string>
<!-- Notifications: mention (@) notification -->
<string name="mention_notification">%1$s mentioned you</string> <string name="mention_notification">%1$s mentioned you</string>
<!-- Notifications: share (boost) notification -->
<string name="shared_notification">%1$s shared your post</string> <string name="shared_notification">%1$s shared your post</string>
<!-- Notifications: like (favourite) notification -->
<string name="liked_notification">%1$s liked your post</string> <string name="liked_notification">%1$s liked your post</string>
<!-- Notifications: end of poll notification -->
<string name="poll_notification">"%1$s's poll has ended"</string> <string name="poll_notification">"%1$s's poll has ended"</string>
<!-- Login page --> <!-- Login page -->
@ -201,4 +225,7 @@ For more info about Pixelfed, you can check here: https://pixelfed.org"</string>
<string name="mascot_description">Image showing a red panda, Pixelfed\'s mascot, using a phone</string> <string name="mascot_description">Image showing a red panda, Pixelfed\'s mascot, using a phone</string>
<string name="delete_post_failed_error">Could not delete the post, error %1$d</string> <string name="delete_post_failed_error">Could not delete the post, error %1$d</string>
<string name="delete_post_failed_io_except">Could not delete the post, check your connection?</string> <string name="delete_post_failed_io_except">Could not delete the post, check your connection?</string>
<!-- Error message when a selected file can not be found -->
<string name="file_not_found">File %1$s was not found</string>
</resources> </resources>

View File

@ -26,7 +26,7 @@
android:summary="@string/about_pixeldroid" android:summary="@string/about_pixeldroid"
app:icon="@drawable/info_black_24dp"> app:icon="@drawable/info_black_24dp">
<intent <intent
android:targetPackage="org.pixeldroid.app" android:targetPackage="@string/application_id"
android:targetClass="org.pixeldroid.app.settings.AboutActivity"/> android:targetClass="org.pixeldroid.app.settings.AboutActivity"/>
</Preference> </Preference>
</PreferenceScreen> </PreferenceScreen>