diff --git a/app/src/husky/res/values/strings.xml b/app/src/husky/res/values/strings.xml
index 2ef938cc..6a5caeab 100644
--- a/app/src/husky/res/values/strings.xml
+++ b/app/src/husky/res/values/strings.xml
@@ -36,6 +36,9 @@
Notifications about new chat messages
Other
+ Privacy
+
+ Anonymize uploaded file names
Live notifications
May slightly increase power consumption
Default formatting syntax(if supported by instance)
diff --git a/app/src/main/java/com/keylesspalace/tusky/components/chat/ChatActivity.kt b/app/src/main/java/com/keylesspalace/tusky/components/chat/ChatActivity.kt
index fd2db9e0..58f8e435 100644
--- a/app/src/main/java/com/keylesspalace/tusky/components/chat/ChatActivity.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/components/chat/ChatActivity.kt
@@ -58,6 +58,7 @@ import com.keylesspalace.tusky.repository.Placeholder
import com.keylesspalace.tusky.repository.TimelineRequestMode
import com.keylesspalace.tusky.service.MessageToSend
import com.keylesspalace.tusky.service.ServiceClient
+import com.keylesspalace.tusky.settings.PrefKeys
import com.keylesspalace.tusky.util.*
import com.keylesspalace.tusky.view.EmojiKeyboard
import com.mikepenz.iconics.IconicsDrawable
@@ -207,6 +208,7 @@ class ChatActivity: BottomSheetActivity(),
val preferences = PreferenceManager.getDefaultSharedPreferences(this)
viewModel.tryFetchStickers = preferences.getBoolean("stickers", false)
+ viewModel.anonymizeNames = preferences.getBoolean(PrefKeys.ANONYMIZE_FILENAMES, false)
setupHeader()
setupChat()
diff --git a/app/src/main/java/com/keylesspalace/tusky/components/common/CommonComposeViewModel.kt b/app/src/main/java/com/keylesspalace/tusky/components/common/CommonComposeViewModel.kt
index 6c3e7501..d927dea7 100644
--- a/app/src/main/java/com/keylesspalace/tusky/components/common/CommonComposeViewModel.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/components/common/CommonComposeViewModel.kt
@@ -52,6 +52,7 @@ open class CommonComposeViewModel(
protected val stickers: MutableLiveData> = MutableLiveData(emptyArray())
val haveStickers: MutableLiveData = MutableLiveData(false)
var tryFetchStickers = false
+ var anonymizeNames = true
var hasNoAttachmentLimits = false
val instanceParams: LiveData = instance.map { instance ->
@@ -162,7 +163,7 @@ open class CommonComposeViewModel(
&& mediaItems[0].type == QueuedMedia.Type.IMAGE) {
throw VideoOrImageException()
} else {
- addMediaToQueue(type, uri, size, filename ?: "unknown")
+ addMediaToQueue(type, uri, size, filename ?: "unknown", anonymizeNames)
}
}
.subscribe({ queuedMedia ->
@@ -174,9 +175,9 @@ open class CommonComposeViewModel(
return liveData
}
- private fun addMediaToQueue(type: Int, uri: Uri, mediaSize: Long, filename: String): QueuedMedia {
+ private fun addMediaToQueue(type: Int, uri: Uri, mediaSize: Long, filename: String, anonymizeNames: Boolean): QueuedMedia {
val mediaItem = QueuedMedia(System.currentTimeMillis(), uri, type, mediaSize, filename,
- hasNoAttachmentLimits)
+ hasNoAttachmentLimits, anonymizeNames)
val imageLimit = instanceMetadata.value?.videoLimit ?: STATUS_VIDEO_SIZE_LIMIT
val videoLimit = instanceMetadata.value?.imageLimit ?: STATUS_IMAGE_SIZE_LIMIT
@@ -210,7 +211,7 @@ open class CommonComposeViewModel(
protected fun addUploadedMedia(id: String, type: Int, uri: Uri, description: String?) {
val mediaItem = QueuedMedia(System.currentTimeMillis(), uri, type, 0, "unknown",
- hasNoAttachmentLimits, -1, id, description)
+ hasNoAttachmentLimits, anonymizeNames, -1, id, description)
media.value = media.value!! + mediaItem
}
diff --git a/app/src/main/java/com/keylesspalace/tusky/components/common/MediaUploader.kt b/app/src/main/java/com/keylesspalace/tusky/components/common/MediaUploader.kt
index 652adef1..648b10ec 100644
--- a/app/src/main/java/com/keylesspalace/tusky/components/common/MediaUploader.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/components/common/MediaUploader.kt
@@ -46,10 +46,10 @@ sealed class UploadEvent {
data class FinishedEvent(val attachment: Attachment) : UploadEvent()
}
-fun createNewImageFile(context: Context): File {
+fun createNewImageFile(context: Context, name: String = "Photo"): File {
// Create an image file name
- val randomId = randomAlphanumericString(12)
- val imageFileName = "Tusky_${randomId}_"
+ val randomId = randomAlphanumericString(4)
+ val imageFileName = "${name}_${randomId}"
val storageDir = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)
return File.createTempFile(
imageFileName, /* prefix */
@@ -164,7 +164,8 @@ class MediaUploaderImpl(
private fun upload(media: QueuedMedia): Observable {
return Observable.create { emitter ->
var (mimeType, fileExtension) = getMimeTypeAndSuffixFromFilenameOrUri(media.uri, media.originalFileName)
- val filename = String.format("%s_%s_%s%s",
+ val filename = if(!media.anonymizeFileName) media.originalFileName else
+ String.format("%s_%s_%s%s",
context.getString(R.string.app_name),
Date().time.toString(),
randomAlphanumericString(10),
@@ -199,7 +200,7 @@ class MediaUploaderImpl(
}
private fun downsize(media: QueuedMedia, imageLimit: Long): QueuedMedia {
- val file = createNewImageFile(context)
+ val file = createNewImageFile(context, media.originalFileName)
DownsizeImageTask.resize(arrayOf(media.uri), imageLimit, context.contentResolver, file)
return media.copy(uri = file.toUri(), mediaSize = file.length())
}
diff --git a/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt b/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt
index 6e869ee5..cc22ccd1 100644
--- a/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt
@@ -80,6 +80,7 @@ import com.keylesspalace.tusky.entity.Attachment
import com.keylesspalace.tusky.entity.Emoji
import com.keylesspalace.tusky.entity.NewPoll
import com.keylesspalace.tusky.entity.Status
+import com.keylesspalace.tusky.settings.PrefKeys
import com.keylesspalace.tusky.util.*
import com.keylesspalace.tusky.view.EmojiKeyboard
import com.mikepenz.iconics.IconicsDrawable
@@ -148,6 +149,7 @@ class ComposeActivity : BaseActivity(),
val activeAccount = accountManager.activeAccount ?: return
viewModel.tryFetchStickers = preferences.getBoolean("stickers", false)
+ viewModel.anonymizeNames = preferences.getBoolean(PrefKeys.ANONYMIZE_FILENAMES, false)
setupAvatar(preferences, activeAccount)
val mediaAdapter = MediaPreviewAdapter(
this,
@@ -1269,6 +1271,7 @@ class ComposeActivity : BaseActivity(),
val mediaSize: Long,
val originalFileName: String,
val noChanges: Boolean = false,
+ val anonymizeFileName: Boolean = false,
val uploadPercent: Int = 0,
val id: String? = null,
val description: String? = null
diff --git a/app/src/main/java/com/keylesspalace/tusky/fragment/preference/PreferencesFragment.kt b/app/src/main/java/com/keylesspalace/tusky/fragment/preference/PreferencesFragment.kt
index 5fa6bb39..c14e9d9e 100644
--- a/app/src/main/java/com/keylesspalace/tusky/fragment/preference/PreferencesFragment.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/fragment/preference/PreferencesFragment.kt
@@ -176,6 +176,15 @@ class PreferencesFragment : PreferenceFragmentCompat() {
}
}
+ preferenceCategory(R.string.pref_title_privacy) {
+ switchPreference {
+ setDefaultValue(false)
+ key = PrefKeys.ANONYMIZE_FILENAMES
+ setTitle(R.string.pref_title_anonymize_upload_filenames)
+ isSingleLineTitle = false
+ }
+ }
+
preferenceCategory(R.string.pref_title_browser_settings) {
switchPreference {
setDefaultValue(false)
diff --git a/app/src/main/java/com/keylesspalace/tusky/settings/SettingsConstants.kt b/app/src/main/java/com/keylesspalace/tusky/settings/SettingsConstants.kt
index 3abc4a28..236962a8 100644
--- a/app/src/main/java/com/keylesspalace/tusky/settings/SettingsConstants.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/settings/SettingsConstants.kt
@@ -32,6 +32,7 @@ object PrefKeys {
const val ENABLE_SWIPE_FOR_TABS = "enableSwipeForTabs"
const val BIG_EMOJIS = "bigEmojis"
const val STICKERS = "stickers"
+ const val ANONYMIZE_FILENAMES = "anonymizeFilenames"
const val CUSTOM_TABS = "customTabs"
diff --git a/app/src/main/java/com/keylesspalace/tusky/util/MediaUtils.kt b/app/src/main/java/com/keylesspalace/tusky/util/MediaUtils.kt
index 43f05e9c..3b1e0fd9 100644
--- a/app/src/main/java/com/keylesspalace/tusky/util/MediaUtils.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/util/MediaUtils.kt
@@ -36,7 +36,7 @@ import java.util.Locale
* Helper methods for obtaining and resizing media files
*/
private const val TAG = "MediaUtils"
-private const val MEDIA_TEMP_PREFIX = "Tusky_Share_Media"
+private const val MEDIA_TEMP_PREFIX = "Share_Media"
const val MEDIA_SIZE_UNKNOWN = -1L
/**