media: add option to anonymize filenames or left them as is
This commit is contained in:
parent
00bbad1345
commit
c45d6f0e23
|
@ -36,6 +36,9 @@
|
|||
<string name="notification_chat_message_description">Notifications about new chat messages</string>
|
||||
|
||||
<string name="pref_title_other">Other</string>
|
||||
<string name="pref_title_privacy">Privacy</string>
|
||||
|
||||
<string name="pref_title_anonymize_upload_filenames">Anonymize uploaded file names</string>
|
||||
<string name="pref_title_live_notifications">Live notifications</string>
|
||||
<string name="pref_summary_live_notifications">May slightly increase power consumption</string>
|
||||
<string name="pref_title_default_formatting">Default formatting syntax(if supported by instance)</string>
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -52,6 +52,7 @@ open class CommonComposeViewModel(
|
|||
protected val stickers: MutableLiveData<Array<StickerPack>> = MutableLiveData(emptyArray())
|
||||
val haveStickers: MutableLiveData<Boolean> = MutableLiveData(false)
|
||||
var tryFetchStickers = false
|
||||
var anonymizeNames = true
|
||||
var hasNoAttachmentLimits = false
|
||||
|
||||
val instanceParams: LiveData<ComposeInstanceParams> = 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
|
||||
}
|
||||
|
||||
|
|
|
@ -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<UploadEvent> {
|
||||
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())
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue