media: add option to anonymize filenames or left them as is

main
Alibek Omarov 4 years ago
parent 56120e6bf4
commit c74ff19805
  1. 3
      app/src/husky/res/values/strings.xml
  2. 2
      app/src/main/java/com/keylesspalace/tusky/components/chat/ChatActivity.kt
  3. 9
      app/src/main/java/com/keylesspalace/tusky/components/common/CommonComposeViewModel.kt
  4. 11
      app/src/main/java/com/keylesspalace/tusky/components/common/MediaUploader.kt
  5. 3
      app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt
  6. 9
      app/src/main/java/com/keylesspalace/tusky/fragment/preference/PreferencesFragment.kt
  7. 1
      app/src/main/java/com/keylesspalace/tusky/settings/SettingsConstants.kt
  8. 2
      app/src/main/java/com/keylesspalace/tusky/util/MediaUtils.kt

@ -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…
Cancel
Save