fixed image/video viewer. status preference fix
This commit is contained in:
parent
82c2cbe67a
commit
71cc5d833c
|
@ -44,52 +44,16 @@ import java.io.Serializable;
|
|||
*/
|
||||
public class ImageViewer extends MediaActivity implements AsyncCallback<ImageLoaderResult>, DescriptionCallback {
|
||||
|
||||
/**
|
||||
* mode used to show local image/gif file
|
||||
* requires {@link #KEY_MEDIA_LOCAL} to be set
|
||||
*/
|
||||
public static final int MEDIA_LOCAL = 902;
|
||||
|
||||
/**
|
||||
* mode used to show online image
|
||||
* requires {@link #KEY_MEDIA_URL} to be set
|
||||
*/
|
||||
public static final int IMAGE_ONLINE = 903;
|
||||
|
||||
/**
|
||||
* mode used to show online image
|
||||
* requires {@link #KEY_MEDIA_ONLINE} to be set
|
||||
*/
|
||||
public static final int MEDIA_ONLINE = 904;
|
||||
|
||||
/**
|
||||
* activity result code indicates that {@link MediaStatus} data has been updated
|
||||
*/
|
||||
public static final int RETURN_MEDIA_STATUS_UPDATE = 0x5895;
|
||||
|
||||
/**
|
||||
* key to set image format (image or gif)
|
||||
* value type is Integer {@link #IMAGE_ONLINE,#GIF_LOCAL,#MEDIA_LOCAL}
|
||||
* key to add media data (online or local)
|
||||
* value type can be {@link Media} for online media, {@link MediaStatus} for local media or {@link Uri} for media links
|
||||
*/
|
||||
public static final String TYPE = "image-type";
|
||||
|
||||
/**
|
||||
* key to add URI of the image (online or local)
|
||||
* value type is {@link Uri}
|
||||
*/
|
||||
public static final String KEY_MEDIA_URL = "image-url";
|
||||
|
||||
/**
|
||||
* key to add offline media
|
||||
* value type is {@link MediaStatus}
|
||||
*/
|
||||
public static final String KEY_MEDIA_LOCAL = "media-status";
|
||||
|
||||
/**
|
||||
* key to add online media
|
||||
* value type is {@link Media}
|
||||
*/
|
||||
public static final String KEY_MEDIA_ONLINE = "media-online";
|
||||
public static final String KEY_IMAGE_DATA = "image-data";
|
||||
|
||||
/**
|
||||
* name of the cache folder where online images will be stored
|
||||
|
@ -111,7 +75,6 @@ public class ImageViewer extends MediaActivity implements AsyncCallback<ImageLoa
|
|||
private ImageDownloader imageAsync;
|
||||
private GlobalSettings settings;
|
||||
private File cacheFolder;
|
||||
private int mode = 0;
|
||||
|
||||
|
||||
@Override
|
||||
|
@ -141,58 +104,66 @@ public class ImageViewer extends MediaActivity implements AsyncCallback<ImageLoa
|
|||
cacheFolder = new File(getExternalCacheDir(), ImageViewer.CACHE_FOLDER);
|
||||
cacheFolder.mkdirs();
|
||||
|
||||
mode = getIntent().getIntExtra(TYPE, 0);
|
||||
switch (mode) {
|
||||
case IMAGE_ONLINE:
|
||||
zoomImage.setVisibility(View.VISIBLE);
|
||||
// get parameters
|
||||
String imageUrl = null;
|
||||
String blurHash = null;
|
||||
String description = null;
|
||||
boolean animated = false;
|
||||
boolean local = false;
|
||||
Serializable serializedData;
|
||||
if (savedInstanceState != null) {
|
||||
serializedData = savedInstanceState.getSerializable(KEY_IMAGE_DATA);
|
||||
} else {
|
||||
serializedData = getIntent().getSerializableExtra(KEY_IMAGE_DATA);
|
||||
}
|
||||
if (serializedData instanceof MediaStatus) {
|
||||
mediaStatus = (MediaStatus) serializedData;
|
||||
imageUrl = mediaStatus.getPath();
|
||||
animated = mediaStatus.getMediaType() == MediaStatus.GIF;
|
||||
local = imageUrl != null && !imageUrl.startsWith("http");
|
||||
description = mediaStatus.getDescription();
|
||||
} else if (serializedData instanceof Media) {
|
||||
Media media = (Media) serializedData;
|
||||
blurHash = media.getBlurHash();
|
||||
imageUrl = media.getUrl();
|
||||
description = media.getDescription();
|
||||
animated = media.getMediaType() == Media.GIF;
|
||||
} else if (serializedData instanceof String) {
|
||||
imageUrl = (String) serializedData;
|
||||
} else {
|
||||
finish();
|
||||
}
|
||||
// setup image view
|
||||
if (imageUrl != null && !imageUrl.trim().isEmpty()) {
|
||||
// select view to show image
|
||||
if (animated) {
|
||||
gifImage.setVisibility(View.VISIBLE);
|
||||
zoomImage.setVisibility(View.INVISIBLE);
|
||||
} else {
|
||||
gifImage.setVisibility(View.INVISIBLE);
|
||||
zoomImage.setVisibility(View.VISIBLE);
|
||||
}
|
||||
// load image
|
||||
if (local) {
|
||||
if (animated) {
|
||||
gifImage.setImageURI(Uri.parse(imageUrl));
|
||||
} else {
|
||||
zoomImage.setImageURI(Uri.parse(imageUrl));
|
||||
}
|
||||
} else {
|
||||
loadingCircle.setVisibility(View.VISIBLE);
|
||||
Uri data = getIntent().getParcelableExtra(KEY_MEDIA_URL);
|
||||
ImageLoaderParam request = new ImageLoaderParam(data, cacheFolder);
|
||||
ImageLoaderParam request = new ImageLoaderParam(Uri.parse(imageUrl), cacheFolder);
|
||||
imageAsync.execute(request, this);
|
||||
break;
|
||||
|
||||
case MEDIA_LOCAL:
|
||||
Serializable serializedData = getIntent().getSerializableExtra(KEY_MEDIA_LOCAL);
|
||||
if (serializedData instanceof MediaStatus) {
|
||||
mediaStatus = (MediaStatus) serializedData;
|
||||
if (!mediaStatus.getDescription().trim().isEmpty()) {
|
||||
descriptionView.setVisibility(View.VISIBLE);
|
||||
descriptionView.setDescription(mediaStatus.getDescription());
|
||||
}
|
||||
if (mediaStatus.getMediaType() == MediaStatus.PHOTO) {
|
||||
zoomImage.setVisibility(View.VISIBLE);
|
||||
gifImage.setVisibility(View.INVISIBLE);
|
||||
zoomImage.setImageURI(Uri.parse(mediaStatus.getPath()));
|
||||
} else if (mediaStatus.getMediaType() == MediaStatus.GIF) {
|
||||
zoomImage.setVisibility(View.INVISIBLE);
|
||||
gifImage.setVisibility(View.VISIBLE);
|
||||
gifImage.setImageURI(Uri.parse(mediaStatus.getPath()));
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case MEDIA_ONLINE:
|
||||
serializedData = getIntent().getSerializableExtra(KEY_MEDIA_ONLINE);
|
||||
if (serializedData instanceof Media) {
|
||||
loadingCircle.setVisibility(View.VISIBLE);
|
||||
Media media = (Media) serializedData;
|
||||
if (!media.getBlurHash().isEmpty()) {
|
||||
Bitmap blur = BlurHashDecoder.INSTANCE.decode(media.getBlurHash(), 16, 16, 1f, true);
|
||||
zoomImage.setImageBitmap(blur);
|
||||
}
|
||||
if (!media.getDescription().isEmpty()) {
|
||||
descriptionView.setVisibility(View.VISIBLE);
|
||||
descriptionView.setDescription(media.getDescription());
|
||||
}
|
||||
if (media.getMediaType() == Media.PHOTO) {
|
||||
zoomImage.setVisibility(View.VISIBLE);
|
||||
gifImage.setVisibility(View.INVISIBLE);
|
||||
request = new ImageLoaderParam(Uri.parse(media.getUrl()), cacheFolder);
|
||||
imageAsync.execute(request, this);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
// set image description
|
||||
if (description != null && !description.trim().isEmpty()) {
|
||||
descriptionView.setDescription(description);
|
||||
}
|
||||
// set image blur placeholder
|
||||
if (blurHash != null && !blurHash.trim().isEmpty()) {
|
||||
Bitmap blur = BlurHashDecoder.INSTANCE.decode(blurHash, 16, 16, 1f, true);
|
||||
zoomImage.setImageBitmap(blur);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -201,7 +172,7 @@ public class ImageViewer extends MediaActivity implements AsyncCallback<ImageLoa
|
|||
public void onBackPressed() {
|
||||
if (mediaStatus != null) {
|
||||
Intent intent = new Intent();
|
||||
intent.putExtra(KEY_MEDIA_LOCAL, mediaStatus);
|
||||
intent.putExtra(KEY_IMAGE_DATA, mediaStatus);
|
||||
setResult(RETURN_MEDIA_STATUS_UPDATE, intent);
|
||||
}
|
||||
super.onBackPressed();
|
||||
|
@ -220,11 +191,17 @@ public class ImageViewer extends MediaActivity implements AsyncCallback<ImageLoa
|
|||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.image, menu);
|
||||
MenuItem itemSave = menu.findItem(R.id.menu_image_save);
|
||||
MenuItem itemDescription = menu.findItem(R.id.menu_image_add_description);
|
||||
AppStyles.setMenuIconColor(menu, settings.getIconColor());
|
||||
itemSave.setVisible(mode == IMAGE_ONLINE || mode == MEDIA_ONLINE);
|
||||
itemDescription.setVisible(mediaStatus != null);
|
||||
AppStyles.setMenuIconColor(menu, settings.getIconColor());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||
MenuItem itemSave = menu.findItem(R.id.menu_image_save);
|
||||
itemSave.setVisible(cacheUri != null);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -239,6 +216,7 @@ public class ImageViewer extends MediaActivity implements AsyncCallback<ImageLoa
|
|||
}
|
||||
else if (item.getItemId() == R.id.menu_image_add_description) {
|
||||
descriptionDialog.show();
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
@ -261,6 +239,7 @@ public class ImageViewer extends MediaActivity implements AsyncCallback<ImageLoa
|
|||
cacheUri = result.uri;
|
||||
zoomImage.reset();
|
||||
zoomImage.setImageURI(cacheUri);
|
||||
invalidateMenu();
|
||||
} else {
|
||||
ErrorUtils.showErrorMessage(getApplicationContext(), result.exception);
|
||||
finish();
|
||||
|
|
|
@ -184,8 +184,7 @@ public class MessageEditor extends MediaActivity implements OnClickListener, OnC
|
|||
else if (v.getId() == R.id.popup_message_preview) {
|
||||
if (messageUpdate.getMediaStatus() != null) {
|
||||
Intent intent = new Intent(this, ImageViewer.class);
|
||||
intent.putExtra(ImageViewer.KEY_MEDIA_LOCAL, messageUpdate.getMediaStatus());
|
||||
intent.putExtra(ImageViewer.TYPE, ImageViewer.MEDIA_LOCAL);
|
||||
intent.putExtra(ImageViewer.KEY_IMAGE_DATA, messageUpdate.getMediaStatus());
|
||||
startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -583,8 +583,7 @@ public class ProfileActivity extends AppCompatActivity implements ActivityResult
|
|||
else if (v.getId() == R.id.profile_img) {
|
||||
if (!user.getOriginalProfileImageUrl().isEmpty()) {
|
||||
Intent intent = new Intent(this, ImageViewer.class);
|
||||
intent.putExtra(ImageViewer.KEY_MEDIA_URL, Uri.parse(user.getOriginalProfileImageUrl()));
|
||||
intent.putExtra(ImageViewer.TYPE, ImageViewer.IMAGE_ONLINE);
|
||||
intent.putExtra(ImageViewer.KEY_IMAGE_DATA, user.getOriginalProfileImageUrl());
|
||||
startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
@ -592,8 +591,7 @@ public class ProfileActivity extends AppCompatActivity implements ActivityResult
|
|||
else if (v.getId() == R.id.profile_banner) {
|
||||
if (!user.getOriginalBannerImageUrl().isEmpty()) {
|
||||
Intent intent = new Intent(this, ImageViewer.class);
|
||||
intent.putExtra(ImageViewer.KEY_MEDIA_URL, Uri.parse(user.getOriginalBannerImageUrl()));
|
||||
intent.putExtra(ImageViewer.TYPE, ImageViewer.IMAGE_ONLINE);
|
||||
intent.putExtra(ImageViewer.KEY_IMAGE_DATA, user.getOriginalBannerImageUrl());
|
||||
startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -539,7 +539,7 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
|
|||
// edit status
|
||||
else if (item.getItemId() == R.id.menu_status_edit) {
|
||||
Intent intent = new Intent(this, StatusEditor.class);
|
||||
intent.putExtra(StatusEditor.KEY_DATA, status);
|
||||
intent.putExtra(StatusEditor.KEY_STATUS_DATA, status);
|
||||
intent.putExtra(StatusEditor.KEY_EDIT, true);
|
||||
activityResultLauncher.launch(intent);
|
||||
}
|
||||
|
@ -555,7 +555,7 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
|
|||
public void onActivityResult(ActivityResult result) {
|
||||
if (result.getData() != null) {
|
||||
if (result.getResultCode() == StatusEditor.RETURN_STATUS_UPDATE) {
|
||||
Serializable data = result.getData().getSerializableExtra(StatusEditor.KEY_DATA);
|
||||
Serializable data = result.getData().getSerializableExtra(StatusEditor.KEY_STATUS_DATA);
|
||||
if (data instanceof Status) {
|
||||
setStatus((Status) data);
|
||||
}
|
||||
|
@ -573,7 +573,7 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
|
|||
// answer to the status
|
||||
if (v.getId() == R.id.page_status_reply) {
|
||||
Intent intent = new Intent(this, StatusEditor.class);
|
||||
intent.putExtra(StatusEditor.KEY_DATA, status);
|
||||
intent.putExtra(StatusEditor.KEY_STATUS_DATA, status);
|
||||
startActivity(intent);
|
||||
}
|
||||
// show user reposting this status
|
||||
|
@ -728,8 +728,7 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
|
|||
String imageUrl = card.getImageUrl();
|
||||
if (!imageUrl.isEmpty()) {
|
||||
Intent intent = new Intent(this, ImageViewer.class);
|
||||
intent.putExtra(ImageViewer.KEY_MEDIA_URL, Uri.parse(card.getImageUrl()));
|
||||
intent.putExtra(ImageViewer.TYPE, ImageViewer.IMAGE_ONLINE);
|
||||
intent.putExtra(ImageViewer.KEY_IMAGE_DATA, card.getImageUrl());
|
||||
startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
@ -742,8 +741,7 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
|
|||
switch (media.getMediaType()) {
|
||||
case Media.PHOTO:
|
||||
Intent intent = new Intent(this, ImageViewer.class);
|
||||
intent.putExtra(ImageViewer.KEY_MEDIA_ONLINE, media);
|
||||
intent.putExtra(ImageViewer.TYPE, ImageViewer.MEDIA_ONLINE);
|
||||
intent.putExtra(ImageViewer.KEY_IMAGE_DATA, media);
|
||||
startActivity(intent);
|
||||
break;
|
||||
|
||||
|
@ -754,7 +752,7 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
|
|||
case Media.GIF:
|
||||
case Media.VIDEO:
|
||||
intent = new Intent(this, VideoViewer.class);
|
||||
intent.putExtra(VideoViewer.KEY_VIDEO_ONLINE, media);
|
||||
intent.putExtra(VideoViewer.KEY_VIDEO_DATA, media);
|
||||
startActivity(intent);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -71,10 +71,10 @@ public class StatusEditor extends MediaActivity implements ActivityResultCallbac
|
|||
* key to add the status to reply
|
||||
* value type is {@link Status}
|
||||
*/
|
||||
public static final String KEY_DATA = "status_data";
|
||||
public static final String KEY_STATUS_DATA = "status_data";
|
||||
|
||||
/**
|
||||
* key to edit status send with {@link #KEY_DATA}
|
||||
* key to edit status send with {@link #KEY_STATUS_DATA}
|
||||
* value type is Boolean
|
||||
*/
|
||||
public static final String KEY_EDIT = "status_edit";
|
||||
|
@ -85,12 +85,6 @@ public class StatusEditor extends MediaActivity implements ActivityResultCallbac
|
|||
*/
|
||||
public static final String KEY_TEXT = "status_text";
|
||||
|
||||
/**
|
||||
* key for status update to restore
|
||||
* value type is {@link StatusUpdate}
|
||||
*/
|
||||
private static final String KEY_SAVE = "status_update";
|
||||
|
||||
private ActivityResultLauncher<Intent> activityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), this);
|
||||
private AsyncCallback<StatusUpdateResult> statusUpdateResult = this::onStatusUpdated;
|
||||
private AsyncCallback<Instance> instanceResult = this::onInstanceResult;
|
||||
|
@ -148,10 +142,10 @@ public class StatusEditor extends MediaActivity implements ActivityResultCallbac
|
|||
audioDialog = new AudioPlayerDialog(this);
|
||||
emojiPicker = new EmojiPicker(this, this);
|
||||
adapter = new IconAdapter(this, true);
|
||||
|
||||
iconList.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true));
|
||||
iconList.setAdapter(adapter);
|
||||
AppStyles.setEditorTheme(root, background);
|
||||
|
||||
if (!settings.getLogin().getConfiguration().locationSupported()) {
|
||||
locationBtn.setVisibility(View.GONE);
|
||||
}
|
||||
|
@ -159,35 +153,43 @@ public class StatusEditor extends MediaActivity implements ActivityResultCallbac
|
|||
emojiButton.setVisibility(View.GONE);
|
||||
}
|
||||
// fetch parameters
|
||||
if (savedInstanceState == null)
|
||||
savedInstanceState = getIntent().getExtras();
|
||||
boolean editStatus;
|
||||
String prefix;
|
||||
Serializable serializedData;
|
||||
if (savedInstanceState != null) {
|
||||
Serializable serializedStatus = savedInstanceState.getSerializable(KEY_DATA);
|
||||
Serializable serializedStatusUpdate = savedInstanceState.getSerializable(KEY_SAVE);
|
||||
boolean editStatus = savedInstanceState.getBoolean(KEY_EDIT, false);
|
||||
String prefix = savedInstanceState.getString(KEY_TEXT);
|
||||
if (serializedStatusUpdate instanceof StatusUpdate) {
|
||||
statusUpdate = (StatusUpdate) serializedStatusUpdate;
|
||||
} else if (serializedStatus instanceof Status) {
|
||||
Status status = (Status) serializedStatus;
|
||||
if (editStatus) {
|
||||
statusUpdate.setStatus(status);
|
||||
statusText.append(status.getText());
|
||||
for (Media media : status.getMedia()) {
|
||||
addMedia(media.getMediaType());
|
||||
}
|
||||
mediaBtn.setVisibility(View.GONE);
|
||||
} else {
|
||||
statusUpdate.addReplyStatusId(status.getId());
|
||||
statusUpdate.setVisibility(status.getVisibility());
|
||||
statusUpdate.addText(status.getUserMentions());
|
||||
statusText.append(status.getUserMentions());
|
||||
}
|
||||
serializedData = savedInstanceState.getSerializable(KEY_STATUS_DATA);
|
||||
editStatus = savedInstanceState.getBoolean(KEY_EDIT, false);
|
||||
prefix = savedInstanceState.getString(KEY_TEXT, "");
|
||||
} else {
|
||||
serializedData = getIntent().getSerializableExtra(KEY_STATUS_DATA);
|
||||
editStatus = getIntent().getBooleanExtra(KEY_EDIT, false);
|
||||
if (getIntent().hasExtra(KEY_TEXT)) {
|
||||
prefix = getIntent().getStringExtra(KEY_TEXT);
|
||||
} else {
|
||||
statusUpdate.addText(prefix);
|
||||
statusText.append(prefix);
|
||||
prefix = "";
|
||||
}
|
||||
}
|
||||
if (serializedData instanceof StatusUpdate) {
|
||||
statusUpdate = (StatusUpdate) serializedData;
|
||||
} else if (serializedData instanceof Status) {
|
||||
Status status = (Status) serializedData;
|
||||
if (editStatus) {
|
||||
statusUpdate.setStatus(status);
|
||||
statusText.append(status.getText());
|
||||
for (Media media : status.getMedia()) {
|
||||
addMedia(media.getMediaType());
|
||||
}
|
||||
mediaBtn.setVisibility(View.GONE);
|
||||
} else {
|
||||
statusUpdate.addReplyStatusId(status.getId());
|
||||
statusUpdate.setVisibility(status.getVisibility());
|
||||
statusUpdate.addText(status.getUserMentions());
|
||||
statusText.append(status.getUserMentions());
|
||||
}
|
||||
} else {
|
||||
statusUpdate.addText(prefix);
|
||||
statusText.append(prefix);
|
||||
}
|
||||
|
||||
statusText.addTextChangedListener(this);
|
||||
emojiButton.setOnClickListener(this);
|
||||
|
@ -226,7 +228,7 @@ public class StatusEditor extends MediaActivity implements ActivityResultCallbac
|
|||
|
||||
@Override
|
||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
outState.putSerializable(KEY_SAVE, statusUpdate);
|
||||
outState.putSerializable(KEY_STATUS_DATA, statusUpdate);
|
||||
super.onSaveInstanceState(outState);
|
||||
}
|
||||
|
||||
|
@ -251,7 +253,7 @@ public class StatusEditor extends MediaActivity implements ActivityResultCallbac
|
|||
public void onActivityResult(ActivityResult result) {
|
||||
if (result.getResultCode() == ImageViewer.RETURN_MEDIA_STATUS_UPDATE) {
|
||||
if (result.getData() != null) {
|
||||
Serializable data = result.getData().getSerializableExtra(ImageViewer.KEY_MEDIA_LOCAL);
|
||||
Serializable data = result.getData().getSerializableExtra(ImageViewer.KEY_IMAGE_DATA);
|
||||
if (data instanceof MediaStatus) {
|
||||
MediaStatus mediaStatus = (MediaStatus) data;
|
||||
statusUpdate.updateMediaStatus(mediaStatus);
|
||||
|
@ -259,7 +261,7 @@ public class StatusEditor extends MediaActivity implements ActivityResultCallbac
|
|||
}
|
||||
} else if (result.getResultCode() == VideoViewer.RESULT_VIDEO_UPDATE) {
|
||||
if (result.getData() != null) {
|
||||
Serializable data = result.getData().getSerializableExtra(VideoViewer.KEY_VIDEO_LOCAL);
|
||||
Serializable data = result.getData().getSerializableExtra(VideoViewer.KEY_VIDEO_DATA);
|
||||
if (data instanceof MediaStatus) {
|
||||
MediaStatus mediaStatus = (MediaStatus) data;
|
||||
statusUpdate.updateMediaStatus(mediaStatus);
|
||||
|
@ -405,14 +407,13 @@ public class StatusEditor extends MediaActivity implements ActivityResultCallbac
|
|||
case MediaStatus.PHOTO:
|
||||
case MediaStatus.GIF:
|
||||
Intent intent = new Intent(this, ImageViewer.class);
|
||||
intent.putExtra(ImageViewer.KEY_MEDIA_LOCAL, media);
|
||||
intent.putExtra(ImageViewer.TYPE, ImageViewer.MEDIA_LOCAL);
|
||||
intent.putExtra(ImageViewer.KEY_IMAGE_DATA, media);
|
||||
activityResultLauncher.launch(intent);
|
||||
break;
|
||||
|
||||
case MediaStatus.VIDEO:
|
||||
intent = new Intent(this, VideoViewer.class);
|
||||
intent.putExtra(VideoViewer.KEY_VIDEO_LOCAL, media);
|
||||
intent.putExtra(VideoViewer.KEY_VIDEO_DATA, media);
|
||||
activityResultLauncher.launch(intent);
|
||||
break;
|
||||
|
||||
|
@ -490,7 +491,7 @@ public class StatusEditor extends MediaActivity implements ActivityResultCallbac
|
|||
private void onStatusUpdated(@NonNull StatusUpdateResult result) {
|
||||
if (result.status != null) {
|
||||
Intent intent = new Intent();
|
||||
intent.putExtra(KEY_DATA, result.status);
|
||||
intent.putExtra(KEY_STATUS_DATA, result.status);
|
||||
setResult(RETURN_STATUS_UPDATE, intent);
|
||||
Toast.makeText(getApplicationContext(), R.string.info_status_sent, Toast.LENGTH_LONG).show();
|
||||
finish();
|
||||
|
|
|
@ -61,15 +61,9 @@ public class VideoViewer extends AppCompatActivity implements Player.Listener, D
|
|||
|
||||
/**
|
||||
* bundle key used for media information
|
||||
* value type is {@link Media}
|
||||
* value type can be {@link Media} or {@link MediaStatus}
|
||||
*/
|
||||
public static final String KEY_VIDEO_ONLINE = "media-video";
|
||||
|
||||
/**
|
||||
* bundle key used for mediastatus information
|
||||
* value type is {@link MediaStatus}
|
||||
*/
|
||||
public static final String KEY_VIDEO_LOCAL = "video-media-status";
|
||||
public static final String KEY_VIDEO_DATA = "media-video";
|
||||
|
||||
/**
|
||||
* Activity result code used to update {@link MediaStatus} information
|
||||
|
@ -116,21 +110,18 @@ public class VideoViewer extends AppCompatActivity implements Player.Listener, D
|
|||
playerView.setShowNextButton(false);
|
||||
playerView.setShowPreviousButton(false);
|
||||
|
||||
MediaItem mediaItem;
|
||||
DataSource.Factory dataSourceFactory;
|
||||
Serializable serializedMedia, serializedMediaStatus;
|
||||
ProgressiveMediaSource mediaSource = null;
|
||||
Serializable serializedData;
|
||||
if (savedInstance != null) {
|
||||
serializedMedia = savedInstance.getSerializable(KEY_VIDEO_ONLINE);
|
||||
serializedMediaStatus = savedInstance.getSerializable(KEY_VIDEO_LOCAL);
|
||||
serializedData = savedInstance.getSerializable(KEY_VIDEO_DATA);
|
||||
} else {
|
||||
serializedMedia = getIntent().getSerializableExtra(KEY_VIDEO_ONLINE);
|
||||
serializedMediaStatus = getIntent().getSerializableExtra(KEY_VIDEO_LOCAL);
|
||||
serializedData = getIntent().getSerializableExtra(KEY_VIDEO_DATA);
|
||||
}
|
||||
// check if video is online
|
||||
if (serializedMedia instanceof Media) {
|
||||
this.media = (Media) serializedMedia;
|
||||
mediaItem = MediaItem.fromUri(media.getUrl());
|
||||
dataSourceFactory = new OkHttpDataSource.Factory((Call.Factory) ConnectionBuilder.create(this, CACHE_SIZE));
|
||||
if (serializedData instanceof Media) {
|
||||
this.media = (Media) serializedData;
|
||||
MediaItem mediaItem = MediaItem.fromUri(media.getUrl());
|
||||
DataSource.Factory dataSourceFactory = new OkHttpDataSource.Factory((Call.Factory) ConnectionBuilder.create(this, CACHE_SIZE));
|
||||
if (media.getMediaType() != Media.VIDEO) {
|
||||
playerView.setUseController(false);
|
||||
player.setRepeatMode(Player.REPEAT_MODE_ONE);
|
||||
|
@ -139,37 +130,46 @@ public class VideoViewer extends AppCompatActivity implements Player.Listener, D
|
|||
descriptionView.setVisibility(View.VISIBLE);
|
||||
descriptionView.setDescription(media.getDescription());
|
||||
}
|
||||
mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory, new DefaultExtractorsFactory()).createMediaSource(mediaItem);
|
||||
}
|
||||
// check if viceo is local
|
||||
else if (serializedMediaStatus instanceof MediaStatus) {
|
||||
this.mediaStatus = (MediaStatus) serializedMediaStatus;
|
||||
mediaItem = MediaItem.fromUri(mediaStatus.getPath());
|
||||
dataSourceFactory = new DataSource.Factory() {
|
||||
@NonNull
|
||||
@Override
|
||||
public DataSource createDataSource() {
|
||||
return new ContentDataSource(getApplicationContext());
|
||||
// check if viceo is from an editable status
|
||||
else if (serializedData instanceof MediaStatus) {
|
||||
this.mediaStatus = (MediaStatus) serializedData;
|
||||
if (mediaStatus.getPath() != null) {
|
||||
DataSource.Factory dataSourceFactory;
|
||||
MediaItem mediaItem = MediaItem.fromUri(mediaStatus.getPath());
|
||||
if (mediaStatus.getPath().startsWith("http")) {
|
||||
dataSourceFactory = new OkHttpDataSource.Factory((Call.Factory) ConnectionBuilder.create(this, CACHE_SIZE));
|
||||
} else {
|
||||
dataSourceFactory = new DataSource.Factory() {
|
||||
@NonNull
|
||||
@Override
|
||||
public DataSource createDataSource() {
|
||||
return new ContentDataSource(getApplicationContext());
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
if (mediaStatus.getMediaType() != MediaStatus.VIDEO) {
|
||||
playerView.setUseController(false);
|
||||
player.setRepeatMode(Player.REPEAT_MODE_ONE);
|
||||
}
|
||||
if (descriptionView != null && !mediaStatus.getDescription().isEmpty()) {
|
||||
descriptionView.setVisibility(View.VISIBLE);
|
||||
descriptionView.setDescription(mediaStatus.getDescription());
|
||||
if (mediaStatus.getMediaType() != MediaStatus.VIDEO) {
|
||||
playerView.setUseController(false);
|
||||
player.setRepeatMode(Player.REPEAT_MODE_ONE);
|
||||
}
|
||||
if (descriptionView != null && !mediaStatus.getDescription().isEmpty()) {
|
||||
descriptionView.setVisibility(View.VISIBLE);
|
||||
descriptionView.setDescription(mediaStatus.getDescription());
|
||||
}
|
||||
mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory, new DefaultExtractorsFactory()).createMediaSource(mediaItem);
|
||||
}
|
||||
}
|
||||
// prepare playback
|
||||
if (mediaSource != null) {
|
||||
player.setMediaSource(mediaSource);
|
||||
playerView.setPlayer(player);
|
||||
player.addListener(this);
|
||||
player.prepare();
|
||||
player.setPlayWhenReady(true);
|
||||
} else {
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
// initialize video extractor
|
||||
player.setMediaSource(new ProgressiveMediaSource.Factory(dataSourceFactory, new DefaultExtractorsFactory()).createMediaSource(mediaItem));
|
||||
playerView.setPlayer(player);
|
||||
// prepare playback
|
||||
player.addListener(this);
|
||||
player.prepare();
|
||||
player.setPlayWhenReady(true);
|
||||
}
|
||||
|
||||
|
||||
|
@ -186,7 +186,7 @@ public class VideoViewer extends AppCompatActivity implements Player.Listener, D
|
|||
public void onBackPressed() {
|
||||
if (mediaStatus != null) {
|
||||
Intent intent = new Intent();
|
||||
intent.putExtra(KEY_VIDEO_LOCAL, mediaStatus);
|
||||
intent.putExtra(KEY_VIDEO_DATA, mediaStatus);
|
||||
setResult(RESULT_VIDEO_UPDATE, intent);
|
||||
}
|
||||
player.stop();
|
||||
|
@ -196,8 +196,11 @@ public class VideoViewer extends AppCompatActivity implements Player.Listener, D
|
|||
|
||||
@Override
|
||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
outState.putSerializable(KEY_VIDEO_LOCAL, mediaStatus);
|
||||
outState.putSerializable(KEY_VIDEO_ONLINE, media);
|
||||
if (mediaStatus != null) {
|
||||
outState.putSerializable(KEY_VIDEO_DATA, mediaStatus);
|
||||
} else if (media != null) {
|
||||
outState.putSerializable(KEY_VIDEO_DATA, media);
|
||||
}
|
||||
super.onSaveInstanceState(outState);
|
||||
}
|
||||
|
||||
|
@ -226,10 +229,10 @@ public class VideoViewer extends AppCompatActivity implements Player.Listener, D
|
|||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.video, menu);
|
||||
MenuItem menuOpenLink = menu.findItem(R.id.menu_video_link);
|
||||
MenuItem menuOpenUrl = menu.findItem(R.id.menu_video_link);
|
||||
MenuItem menuDescription = menu.findItem(R.id.menu_video_add_description);
|
||||
AppStyles.setMenuIconColor(menu, Color.WHITE);
|
||||
menuOpenLink.setVisible(media != null);
|
||||
menuOpenUrl.setVisible(media != null);
|
||||
menuDescription.setVisible(mediaStatus != null);
|
||||
return super.onCreateOptionsMenu(menu);
|
||||
}
|
||||
|
|
|
@ -31,7 +31,8 @@ import java.util.TreeMap;
|
|||
*/
|
||||
public class StatusPreferenceDialog extends Dialog implements OnCheckedChangeListener, OnItemSelectedListener {
|
||||
|
||||
private Spinner visibilitySelector;
|
||||
private Spinner visibilitySelector, languageSelector;
|
||||
private SwitchButton sensitiveCheck, spoilerCheck;
|
||||
|
||||
private DropdownAdapter visibility_adapter, language_adapter;
|
||||
private StatusUpdate statusUpdate;
|
||||
|
@ -63,16 +64,17 @@ public class StatusPreferenceDialog extends Dialog implements OnCheckedChangeLis
|
|||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.dialog_status);
|
||||
ViewGroup rootView = findViewById(R.id.dialog_status_root);
|
||||
SwitchButton sensitiveCheck = findViewById(R.id.dialog_status_sensitive);
|
||||
SwitchButton spoilerCheck = findViewById(R.id.dialog_status_spoiler);
|
||||
View statusVisibility = findViewById(R.id.dialog_status_visibility_container);
|
||||
View statusSpoiler = findViewById(R.id.dialog_status_spoiler_container);
|
||||
Spinner languageSelector = findViewById(R.id.dialog_status_language);
|
||||
languageSelector = findViewById(R.id.dialog_status_language);
|
||||
visibilitySelector = findViewById(R.id.dialog_status_visibility);
|
||||
sensitiveCheck = findViewById(R.id.dialog_status_sensitive);
|
||||
spoilerCheck = findViewById(R.id.dialog_status_spoiler);
|
||||
GlobalSettings settings = GlobalSettings.get(getContext());
|
||||
AppStyles.setTheme(rootView);
|
||||
|
||||
languageSelector.setAdapter(language_adapter);
|
||||
languageSelector.setSelection(0, false);
|
||||
languageSelector.setSelected(false);
|
||||
visibilitySelector.setAdapter(visibility_adapter);
|
||||
visibilitySelector.setSelection(0, false);
|
||||
|
@ -95,7 +97,6 @@ public class StatusPreferenceDialog extends Dialog implements OnCheckedChangeLis
|
|||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
if (statusUpdate.getVisibility() == Status.VISIBLE_PUBLIC) {
|
||||
visibilitySelector.setSelection(0, false);
|
||||
} else if (statusUpdate.getVisibility() == Status.VISIBLE_PRIVATE) {
|
||||
|
@ -105,6 +106,16 @@ public class StatusPreferenceDialog extends Dialog implements OnCheckedChangeLis
|
|||
} else if (statusUpdate.getVisibility() == Status.VISIBLE_UNLISTED) {
|
||||
visibilitySelector.setSelection(3, false);
|
||||
}
|
||||
sensitiveCheck.setCheckedImmediately(statusUpdate.isSensitive());
|
||||
spoilerCheck.setCheckedImmediately(statusUpdate.isSpoiler());
|
||||
if (!statusUpdate.getLanguageCode().isEmpty()) {
|
||||
for (int i = 0; i < languageCodes.length; i++) {
|
||||
if (languageCodes[i].equals(statusUpdate.getLanguageCode())) {
|
||||
languageSelector.setSelection(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
super.onStart();
|
||||
}
|
||||
|
||||
|
||||
|
@ -136,8 +147,6 @@ public class StatusPreferenceDialog extends Dialog implements OnCheckedChangeLis
|
|||
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||
if (!isShowing())
|
||||
return;
|
||||
if (parent.getId() == R.id.dialog_status_visibility) {
|
||||
switch (position) {
|
||||
case 0:
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package org.nuclearfog.twidda.ui.fragments;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.Toast;
|
||||
|
@ -142,8 +141,7 @@ public class MessageFragment extends ListFragment implements OnMessageClickListe
|
|||
int mediaIndex = extras[0];
|
||||
if (mediaIndex >= 0 && mediaIndex < message.getMedia().length) {
|
||||
Intent intent = new Intent(requireContext(), ImageViewer.class);
|
||||
intent.putExtra(ImageViewer.KEY_MEDIA_URL, Uri.parse(message.getMedia()[mediaIndex].getUrl()));
|
||||
intent.putExtra(ImageViewer.TYPE, ImageViewer.IMAGE_ONLINE);
|
||||
intent.putExtra(ImageViewer.KEY_IMAGE_DATA, message.getMedia()[mediaIndex].getUrl());
|
||||
startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue