-
Notifications
You must be signed in to change notification settings - Fork 391
Conversation
@@ -1943,7 +1947,12 @@ public void run() { | |||
} | |||
|
|||
if (0 != sharedDataItems.size()) { | |||
mVectorRoomMediasSender.sendMedias(sharedDataItems); | |||
if (sharedDataItems.get(0).getFileName(this).indexOf(".jpg")>-1) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
contains instead of indexOf (i often make the same thing whereas i should not)
@@ -1943,7 +1947,12 @@ public void run() { | |||
} | |||
|
|||
if (0 != sharedDataItems.size()) { | |||
mVectorRoomMediasSender.sendMedias(sharedDataItems); | |||
if (sharedDataItems.get(0).getFileName(this).indexOf(".jpg")>-1) { | |||
intent.setClass(this, MediasPreviewerActivity.class); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
1- some other image types can be supported (png, gif...)
2- you cannot guess the list items type from the first one : with a files explorer, you could select a file, a video and an image.
if (!sharedDataItems.isEmpty()) { | ||
ImageView imagePreview = (ImageView) findViewById(R.id.image_previewer); | ||
imagePreview.setImageURI(sharedDataItems.get(0).getUri()); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Only the first item ?
A webview might be more simple to manage animated gifs, videos or files
I think the PR is finished now. As a quick summary, I have added the following functionality:
|
@nvbln |
This should solve 2 and 4 and I think @giomfo took care of 1? (Many thanks!) As for the crashes (especially the out of memory ones, as I have (hopefully) fixed the others by properly handling pictures/videos from the camera), could you elaborate on that? Because I am not sure how to go about fixing it. I don't experience these issues myself either (while using an emulator). |
I think the review can be postponed until I have fixed the errors (given by the Travis CI build). |
Hi @nvbln , I'm replacing Yannick to review the PRs. Please add a line describing your change in CHANGES.rst, and also Sign-Off as per https://github.com/matrix-org/synapse/blob/master/CONTRIBUTING.rst#sign-off I'll do some tests on your PR Benoît |
Hi @nvbln , Thanks for the rebase. Please fix error reported by Travis:
Thanks |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @nvbln ,
Thank for the update. I've reported quite a lot of remarks, please let me know if you need more explanation on some.
About the UX: Maybe it is useful to display the filename for every media? Because this information will also be sent to the Room
Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.room_toolbar); | ||
|
||
setSupportActionBar(toolbar); | ||
getSupportActionBar().setDisplayHomeAsUpEnabled(true); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Replace the 3 lines above by configureToolbar() and rename the id of the toolbar in layout to toolbar
setSupportActionBar(toolbar); | ||
getSupportActionBar().setDisplayHomeAsUpEnabled(true); | ||
|
||
String roomTitle = (String) getIntent().getExtras().get(VectorRoomActivity.EXTRA_ROOM_TITLE); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would prefer that EXTRA_ROOM_TITLE is define in this class
getSupportActionBar().setDisplayHomeAsUpEnabled(true); | ||
|
||
String roomTitle = (String) getIntent().getExtras().get(VectorRoomActivity.EXTRA_ROOM_TITLE); | ||
if (roomTitle != null && !roomTitle.isEmpty()) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use !TextUtils.isEmpty(roomTitle)
} | ||
|
||
if (!sharedDataItems.isEmpty()) { | ||
RecyclerView imagesPreview = (RecyclerView) findViewById(R.id.images_preview); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please bind views with Butterknife
WebView webPreview = (WebView) findViewById(R.id.web_previewer); | ||
VideoView videoPreview = (VideoView) findViewById(R.id.video_previewer); | ||
ImageView filePreview = (ImageView) findViewById(R.id.file_previewer); | ||
TextView fileNameView = (TextView) findViewById(R.id.file_name); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please bind all those views with Butterknife
* @return true to preview media | ||
*/ | ||
public static boolean previewMediaWhenSending(Context context) { | ||
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(SETTINGS_PREVIEW_MEDIA_BEFORE_SENDING_KEY, true); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please disable by default for the moment
<ImageView | ||
android:id="@+id/file_previewer" | ||
android:layout_width="265dip" | ||
android:layout_height="265dip" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Quality of the icon is not good.
Please use wrap_content for width and height and add
android:src="@drawable/filetype_attachment"
No need to set the src it in code then
} | ||
}); | ||
} else { | ||
filePreview.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.filetype_attachment)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove this line (src will be set in layout)
videoPreview.seekTo(100); | ||
videoPreview.setVisibility(View.VISIBLE); | ||
|
||
videoPreview.setOnTouchListener(new View.OnTouchListener() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please use setOnClickListener() rather that setOnTouchListener()
@Override | ||
public void onClick(View view) { | ||
ViewGroup viewGroup = (ViewGroup) view.getParent().getParent(); | ||
ImageView imagePreview = (ImageView) viewGroup.findViewById(R.id.image_previewer); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's not nice to bind this View here. They have to be bound in the Activity they belong to.
Instead notify the Activity of the click event with a listener to provide the clicked item position
There are two things I wanted to note:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @nvbln ,
Thanks for the update. The code looks good to me. I have a few remarks, once done, I'll merge the PR. I've added the Sprint 12 milestone, which means it should be including in the August release.
Benoît
} | ||
|
||
if (!mSharedDataItems.isEmpty()) { | ||
ButterKnife.bind(this); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Butterknife binding is already done by parent class, you can remove this call
finish(); | ||
} | ||
|
||
public void setPreview(RoomMediaMessage roomMediaMessage) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this method can be private
public void setPreview(RoomMediaMessage roomMediaMessage) { | ||
|
||
// Prevent blinking when tapping on the same item multiple times. | ||
if (mCurrentRoomMediaMessage != null && roomMediaMessage == mCurrentRoomMediaMessage) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think test on nullity is not necessary
// Prevent blinking when tapping on the same item multiple times. | ||
if (mCurrentRoomMediaMessage != null && roomMediaMessage == mCurrentRoomMediaMessage) { | ||
return; | ||
} else { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
remove the else block, just do the affectation of mCurrentRoomMediaMessage
intent.setClass(this, MediaPreviewerActivity.class); | ||
startActivityForResult(intent, CONFIRM_MEDIA_REQUEST_CODE); | ||
} else if (null != mLatestTakePictureCameraUri) { | ||
intent.putExtra(MediaPreviewerActivity.EXTRA_CAMERA_PICTURE_URI, mLatestTakePictureCameraUri); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
no need to call setClass() here?
} | ||
} | ||
|
||
final int itemPosition = position; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
parameter position
can be declared final, to avoid creating a new variable itemPosition
|
||
@Override | ||
public void onAttachedToRecyclerView(RecyclerView recyclerView) { | ||
super.onAttachedToRecyclerView(recyclerView); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this necessary? I think it can be removed
Sorry for closing/reopening the PR, that was an accident. I haven't removed |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
two minor remarks. Also would you squash all your commits (note that I can do it during the merge process)?
mLatestTakePictureCameraUri = null; | ||
intent.setClass(this, MediaPreviewerActivity.class); | ||
} else { | ||
intent = new Intent(this, MediaPreviewerActivity.class); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, thanks, it's clearer now. Maybe you should keep the if to initiate sharedDataItems
, but move the code related to MediaPreviewerActivity to the if block with PreferencesManager.previewMediaWhenSending(this)
.
private void setPreview(RoomMediaMessage roomMediaMessage) { | ||
|
||
// Prevent blinking when tapping on the same item multiple times. | ||
if (!(roomMediaMessage == mCurrentRoomMediaMessage)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please simplify: if (roomMediaMessage != mCurrentRoomMediaMessage) {
Add RecyclerView to MediasPreviewerActivity Add Toolbar to MediasPreviewerActivity Improve the layout of MediasPreviewerActivity Add support for videos and gifs Also changed the name of ImagePreviewAdapter to a more general name, namely: MediasPreviewAdapter Add general case for unsupported filetypes Remove the border around the CardView Properly handle camera URI Make the previewer optional Update code to most recent develop Fix lint error Remove forbidden patterns Describe changes of PR and sign off Signed-off-by: Nathan van Beelen <nathan at vanbeelen dot org> Replace tab indentation with spaces Remove forbidden pattern Improve the code Rename the Activity and Adapter Also correct an incorrect reference to the ItemPositionChangeListener method. Show filename for all files Rename the layout file of the media previewer Properly resize content in the WebView Improve the code further Add and update comments Further improve the code
Update matrix-sdk.aar lib - build 1875 - Revision: ccf12449b8f09b06a7a8f501b9d7a382270b2305 Last rebase was performed June 1 2018. Here is the list of changes from vector-im/riot-android changes: Changes in Riot 0.8.XX (2018-08-24) =================================================== Features: - Manage server quota notices (#2440) Improvements: - Do not ask permission to write external storage at startup (#2483) - Update settings icon and transparent logo for notifications and navigation drawer (#2492) - URL previews are no longer requested from the server when displaying URL previews is disabled (PR #2514) - Fix some plural and puzzle strings, and remove other unused ones (#2444) - Manage System Alerts in a dedicated section Other changes: - Upgrade olm-sdk.aar from version 2.2.2 to version 2.3.0 - move PieFractionView from the SDK to the client (#2525) Bugfix: - Fix media sharing (#2530) - Fix notification sound issue in settings (#2524) - Disable app icon badge for "listen for event" notification (#2104) Changes in Riot 0.8.13 (2018-08-09) =================================================== Features: - Resurrect performance metrics (#2391) - Telemetry to report incidence of UISIs (#2330) - Add a previewer for previewing media before sending it into the room (#1742|#2445) - Implements ReplyTo feature (#2390) - Add auto completion for slash commands (#2384) - Support Room Versioning (#2441) Improvements: - Update matrix-sdk.aar lib (v0.9.7). - Piwik: Update the way how stats are reported (#2402) - Improve BugReport screen: display a preview of the screenshot (#2318) - In the settings, move theme settings just below "language" (#2439) - Improve the display of the sources of the message in the dialog (#2348) - Improve the display of the buttons and the reason in the room preview (#2352) - In the flair section on settings, notify the user when he has no flair (#2430) - Improve GDPR consent webview management (#2491) - Support external keyboard to send messages for recent devices (#220, #1279) - When user ignores or un-ignores someone, notify that the app will restart (#2437) Other changes: - Remove dependency to `android-gif-drawable` lib and use Glide to animate logo on Splashscreen (#2421) - Keep only Room.getState() method and remove Room.getLiveState() because they are similar (matrix-org/matrix-android-sdk#310) Bugfix: - Fix issue on incoming call screen when "Do not disturb mode" is active (#2417) - Fix issue when selecting sound for notifications in the settings - Fix issue when changing device name in the settings (#2416) - Fix issue on verifying device, update the wording of the description message (#1067) - Messages with code blocks show other HTML as plain text (#2280) - Message with <p> was sometimes not properly formatted (#2275) - Fix notification issue when Riot is not started (#2451) - Fix Unable to add Matrix apps (#2466) - Riot auto joined a public room (#2472) - Remove last traces of Firebase analytics (#2481) - code blocks are escaped and therefore hard readable (#2484) - Restore the navigation of the back button in the public rooms preview header (#2473) - Fix issue on preference screen: device lists was not displayed (#2409) - Ensure notification has a title (#2242) Changes in Riot 0.8.12 (2018-07-06) =================================================== Bugfix: - Fix issue on vanished favorite and low priority room (#2413) Changes in Riot 0.8.11 (2018-07-03) =================================================== Features: - Re-request keys manually for encrypted events (#2319) - Add option to send voice message to a room, using a third application to record message. To enable in the Labs settings (PR #1762) Improvements: - Update matrix-sdk.aar lib (v0.9.6). - New Floating Action Menu in Home screen (PR #2335) - Add spacing to device keys (#2314) - use apply() instead of commit() to save shared prefs (#2231) - Do not ring if "Do Not Disturb" is active (#1072) - Manage the "consent not given" error when declining a room invite Other changes: - Remove "Matrix application" activation from the Lab section in the settings (#2341) Bugfix: - Remove black borders on 18:9 phone (#2063) - Auto dismiss the join/reject room notification when user select an action (#2354) - Fix some crashes reported by the PlayStore (#2380, #2382, #2383, #2395) - Fix issues in UrlPreviews (#2312) Translations: - Galician thanks to Miguel Branco Build: - Add script to check code quality - Travis will now check if CHANGES.rst has been modified for each PR ------ Merge commit '94b7925a57b800db62b5ec87966d994ff53392b4' into develop # Conflicts: # vector/src/main/java/im/vector/activity/VectorRoomActivity.java # vector/src/main/java/im/vector/adapters/VectorMediasViewerAdapter.java # vector/src/main/java/im/vector/db/VectorContentProvider.java # vector/src/main/java/im/vector/dialogs/ConsentNotGivenHelper.kt # vector/src/main/java/im/vector/fragments/VectorSettingsPreferencesFragment.kt # vector/src/main/res/values/strings.xml # vector/src/main/res/values/styles.xml
This is intended as a start on issue #860. I was wondering if I could receive some feedback on the way that I am implementing this. The functionality right now is the following:
sendMediasIntent()
will check if the file is an image.MediasPreviewerActivity.java
MediasPreviewerActivity.java
will then get the image(s) (in this case only one image is supported) from the intent and display it.FloatingActionButton
to confirm that the right media file has been selected.MediasPreviewerActivity.java
sends the intent back.VectorRoomActivity.java
will callonActivityResult()
which will in turn callmVectorRoomMediasSender.sendMedias()
and so the image will be send.I primarily want to expand on this by making the contain the necessary information (like a highly needed top bar) and by supporting different and multiple media files at the same time (right now just the first one will be used and the only media type that will trigger the preview is a .jpg).
I was mainly wondering if this is the right way to go about it and if there are default things that I should implement in
MediasPreviewerAcitivity.java
. As an example, I have already implemented checks if the application should restart or is going to splash, but there might be more.