From cc0d78aeddb90346c136fc4eafe03d80b95e93fa Mon Sep 17 00:00:00 2001 From: Alex Ning Date: Wed, 28 Aug 2019 16:41:36 +0800 Subject: [PATCH] Receiving images, videos and texts to directly submitting different kinds of posts. Fixed video was not shown after selected from picker in PostVideoActivity. Handle some cases that the posts cannot be submitted. Minor bugs fixed. --- .idea/caches/build_file_checksums.ser | Bin 533 -> 533 bytes .idea/caches/gradle_models.ser | Bin 309771 -> 309771 bytes app/src/main/AndroidManifest.xml | 47 ++++++--- .../infinityforreddit/PostImageActivity.java | 9 +- .../infinityforreddit/PostLinkActivity.java | 9 +- .../infinityforreddit/PostTextActivity.java | 9 +- .../infinityforreddit/PostVideoActivity.java | 70 +++++++++---- .../ShareDataResolverActivity.java | 77 +++++++++++++++ .../infinityforreddit/SubmitPost.java | 4 +- .../infinityforreddit/SubmitPostService.java | 92 +++++++++++------- .../infinityforreddit/ViewVideoActivity.java | 38 ++++---- .../main/res/layout/activity_post_video.xml | 9 +- app/src/main/res/values/strings.xml | 14 ++- 13 files changed, 275 insertions(+), 103 deletions(-) create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/ShareDataResolverActivity.java diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 7f5b4248f22a945f0bdf956f4078d7fbb3b53f8e..b4c3a5c81ef539f609e19b56527bfa937697aa28 100644 GIT binary patch delta 15 XcmbQrGL>b*43=wJM;>mRQ^^PbGi3(L delta 15 XcmbQrGL>b*43>+>5+pXxsbmBIF+2t} diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser index e92fef90c96dac011a97ab4bd04ebc3c192761a4..321d1240257103881a74eed8ccd8368e8f8b7d2d 100644 GIT binary patch delta 116 zcmeDFBGmmwXoIdg%f!reQkxCc1{3meU1Qr_V;O;%35c1uyT-CSXJ*;Q(%ZJ( zAdw}VjioAa?UL=Y(^)#5SnhvL*PK4#GozJ4vZ;}YiJ`e+qOqx|g_(hgk%eW7Ns2{U RQW}s-F*V%Yw2GyZ9{^hEs6h0{ - - - - - - - + + + + + + + + + + + + + + + + + - - + - + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostImageActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostImageActivity.java index aedaf37b..aa9a34d3 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostImageActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostImageActivity.java @@ -239,6 +239,11 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) .into(iconGifImageView); } + + imageUri = getIntent().getData(); + if(imageUri != null) { + loadImage(); + } } iconGifImageView.setOnClickListener(view -> { @@ -448,6 +453,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS intent.putExtra(SubmitPostService.EXTRA_IS_SPOILER, isSpoiler); intent.putExtra(SubmitPostService.EXTRA_IS_NSFW, isNSFW); intent.putExtra(SubmitPostService.EXTRA_POST_TYPE, SubmitPostService.EXTRA_POST_TYPE_IMAGE); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { startForegroundService(intent); @@ -563,7 +569,8 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS if (submitImagePostEvent.errorMessage == null || submitImagePostEvent.errorMessage.equals("")) { Snackbar.make(coordinatorLayout, R.string.post_failed, Snackbar.LENGTH_SHORT).show(); } else { - Snackbar.make(coordinatorLayout, submitImagePostEvent.errorMessage, Snackbar.LENGTH_SHORT).show(); + Snackbar.make(coordinatorLayout, submitImagePostEvent.errorMessage.substring(0, 1).toUpperCase() + + submitImagePostEvent.errorMessage.substring(1), Snackbar.LENGTH_SHORT).show(); } } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostLinkActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostLinkActivity.java index f64cdcee..426eb062 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostLinkActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostLinkActivity.java @@ -48,6 +48,7 @@ import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES; public class PostLinkActivity extends AppCompatActivity implements FlairBottomSheetFragment.FlairSelectionCallback { static final String EXTRA_SUBREDDIT_NAME = "ESN"; + static final String EXTRA_LINK = "EL"; private static final String SUBREDDIT_NAME_STATE = "SNS"; private static final String SUBREDDIT_ICON_STATE = "SIS"; @@ -210,6 +211,11 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) .into(iconGifImageView); } + + String link = getIntent().getStringExtra(EXTRA_LINK); + if(link != null) { + contentEditText.setText(link); + } } iconGifImageView.setOnClickListener(view -> { @@ -472,7 +478,8 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh if(submitTextOrLinkPostEvent.errorMessage == null) { Snackbar.make(coordinatorLayout, R.string.post_failed, Snackbar.LENGTH_SHORT).show(); } else { - Snackbar.make(coordinatorLayout, submitTextOrLinkPostEvent.errorMessage, Snackbar.LENGTH_SHORT).show(); + Snackbar.make(coordinatorLayout, submitTextOrLinkPostEvent.errorMessage.substring(0, 1).toUpperCase() + + submitTextOrLinkPostEvent.errorMessage.substring(1), Snackbar.LENGTH_SHORT).show(); } } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostTextActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostTextActivity.java index 6364cde9..257c97ef 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostTextActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostTextActivity.java @@ -48,6 +48,7 @@ import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES; public class PostTextActivity extends AppCompatActivity implements FlairBottomSheetFragment.FlairSelectionCallback { static final String EXTRA_SUBREDDIT_NAME = "ESN"; + static final String EXTRA_CONTENT = "EC"; private static final String SUBREDDIT_NAME_STATE = "SNS"; private static final String SUBREDDIT_ICON_STATE = "SIS"; @@ -210,6 +211,11 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) .into(iconGifImageView); } + + String text = getIntent().getStringExtra(EXTRA_CONTENT); + if(text != null) { + contentEditText.setText(text); + } } iconGifImageView.setOnClickListener(view -> { @@ -472,7 +478,8 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh if(submitTextOrLinkPostEvent.errorMessage == null) { Snackbar.make(coordinatorLayout, R.string.post_failed, Snackbar.LENGTH_SHORT).show(); } else { - Snackbar.make(coordinatorLayout, submitTextOrLinkPostEvent.errorMessage, Snackbar.LENGTH_SHORT).show(); + Snackbar.make(coordinatorLayout, submitTextOrLinkPostEvent.errorMessage.substring(0, 1).toUpperCase() + + submitTextOrLinkPostEvent.errorMessage.substring(1), Snackbar.LENGTH_SHORT).show(); } } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostVideoActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostVideoActivity.java index 50ba6912..ec5b1bca 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostVideoActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostVideoActivity.java @@ -14,7 +14,6 @@ import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; -import android.widget.VideoView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -28,6 +27,14 @@ import androidx.core.content.ContextCompat; import com.bumptech.glide.Glide; import com.bumptech.glide.RequestManager; import com.bumptech.glide.request.RequestOptions; +import com.google.android.exoplayer2.ExoPlayerFactory; +import com.google.android.exoplayer2.Player; +import com.google.android.exoplayer2.SimpleExoPlayer; +import com.google.android.exoplayer2.source.ExtractorMediaSource; +import com.google.android.exoplayer2.ui.PlayerView; +import com.google.android.exoplayer2.upstream.DataSource; +import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; +import com.google.android.exoplayer2.util.Util; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.snackbar.Snackbar; @@ -85,7 +92,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS @BindView(R.id.capture_fab_post_video_activity) FloatingActionButton captureFab; @BindView(R.id.select_from_library_fab_post_video_activity) FloatingActionButton selectFromLibraryFab; @BindView(R.id.select_again_text_view_post_video_activity) TextView selectAgainTextView; - @BindView(R.id.video_view_post_video_activity) VideoView videoView; + @BindView(R.id.player_view_post_video_activity) PlayerView videoPlayerView; private boolean mNullAccessToken = false; private String mAccessToken; @@ -97,6 +104,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS private Uri videoUri; private boolean loadSubredditIconSuccessful = true; private boolean isPosting; + private boolean wasPlaying; private Flair flair; private boolean isSpoiler = false; @@ -107,6 +115,9 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS private FlairBottomSheetFragment mFlairSelectionBottomSheetFragment; private Snackbar mPostingSnackbar; + private DataSource.Factory dataSourceFactory; + private SimpleExoPlayer player; + @Inject @Named("no_oauth") Retrofit mRetrofit; @@ -171,6 +182,12 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS mGlide = Glide.with(this); + player = ExoPlayerFactory.newSimpleInstance(this); + videoPlayerView.setPlayer(player); + dataSourceFactory = new DefaultDataSourceFactory(this, + Util.getUserAgent(this, "Infinity")); + player.setRepeatMode(Player.REPEAT_MODE_ALL); + mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE); if(savedInstanceState != null) { @@ -237,6 +254,11 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) .into(iconGifImageView); } + + videoUri = getIntent().getData(); + if(videoUri != null) { + loadVideo(); + } } iconGifImageView.setOnClickListener(view -> { @@ -312,16 +334,12 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS startActivityForResult(Intent.createChooser(intent,getResources().getString(R.string.select_from_gallery)), PICK_VIDEO_REQUEST_CODE); }); - videoView.setOnPreparedListener(mediaPlayer -> { - mediaPlayer.setLooping(true); - mediaPlayer.setVolume(0, 0); - }); - selectAgainTextView.setOnClickListener(view -> { + wasPlaying = false; + player.setPlayWhenReady(false); videoUri = null; + videoPlayerView.setVisibility(View.GONE); selectAgainTextView.setVisibility(View.GONE); - videoView.stopPlayback(); - videoView.setVisibility(View.GONE); constraintLayout.setVisibility(View.VISIBLE); }); } @@ -339,10 +357,11 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS private void loadVideo() { constraintLayout.setVisibility(View.GONE); - videoView.setVisibility(View.VISIBLE); selectAgainTextView.setVisibility(View.VISIBLE); - videoView.setVideoURI(videoUri); - videoView.start(); + videoPlayerView.setVisibility(View.VISIBLE); + player.prepare(new ExtractorMediaSource.Factory(dataSourceFactory).createMediaSource(videoUri)); + player.setPlayWhenReady(true); + wasPlaying = true; } private void displaySubredditIcon() { @@ -442,6 +461,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS intent.putExtra(SubmitPostService.EXTRA_IS_SPOILER, isSpoiler); intent.putExtra(SubmitPostService.EXTRA_IS_NSFW, isNSFW); intent.putExtra(SubmitPostService.EXTRA_POST_TYPE, SubmitPostService.EXTRA_POST_TYPE_VIDEO); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { startForegroundService(intent); @@ -468,10 +488,18 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS } } + @Override + protected void onStart() { + super.onStart(); + if(wasPlaying) { + player.setPlayWhenReady(true); + } + } + @Override protected void onStop() { super.onStop(); - videoView.stopPlayback(); + player.setPlayWhenReady(false); } @Override @@ -526,11 +554,13 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS loadVideo(); } } else if (requestCode == CAPTURE_VIDEO_REQUEST_CODE) { - if(data != null) { - videoUri = data.getData(); - loadVideo(); - } else { - Snackbar.make(coordinatorLayout, R.string.error_getting_video, Snackbar.LENGTH_SHORT).show(); + if(resultCode == RESULT_OK) { + if(data != null && data.getData() != null) { + videoUri = data.getData(); + loadVideo(); + } else { + Snackbar.make(coordinatorLayout, R.string.error_getting_video, Snackbar.LENGTH_SHORT).show(); + } } } } @@ -539,6 +569,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS protected void onDestroy() { EventBus.getDefault().unregister(this); super.onDestroy(); + player.release(); } @Override @@ -572,7 +603,8 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS if (submitVideoPostEvent.errorMessage == null || submitVideoPostEvent.errorMessage.equals("")) { Snackbar.make(coordinatorLayout, R.string.post_failed, Snackbar.LENGTH_SHORT).show(); } else { - Snackbar.make(coordinatorLayout, submitVideoPostEvent.errorMessage, Snackbar.LENGTH_SHORT).show(); + Snackbar.make(coordinatorLayout, submitVideoPostEvent.errorMessage.substring(0, 1).toUpperCase() + + submitVideoPostEvent.errorMessage.substring(1), Snackbar.LENGTH_SHORT).show(); } } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ShareDataResolverActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ShareDataResolverActivity.java new file mode 100644 index 00000000..92d2b290 --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ShareDataResolverActivity.java @@ -0,0 +1,77 @@ +package ml.docilealligator.infinityforreddit; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.util.Patterns; +import android.widget.Toast; + +import androidx.appcompat.app.AppCompatActivity; + +public class ShareDataResolverActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Intent receivedIntent = getIntent(); + String action = receivedIntent.getAction(); + String type = receivedIntent.getType(); + + if(Intent.ACTION_SEND.equals(action) && type != null) { + if("text/plain".equals(type)) { + String text = receivedIntent.getStringExtra(Intent.EXTRA_TEXT); + if(text != null) { + if(Patterns.WEB_URL.matcher(text).matches()) { + //It's a link + Intent intent = new Intent(this, PostLinkActivity.class); + intent.putExtra(PostLinkActivity.EXTRA_LINK, text); + startActivity(intent); + } else { + Intent intent = new Intent(this, PostTextActivity.class); + intent.putExtra(PostTextActivity.EXTRA_CONTENT, text); + startActivity(intent); + } + } else { + Toast.makeText(this, R.string.no_data_received, Toast.LENGTH_SHORT).show(); + } + } else if(type.equals("image/gif")) { + Uri videoUri = receivedIntent.getParcelableExtra(Intent.EXTRA_STREAM); + if(videoUri != null) { + Intent intent = new Intent(this, PostVideoActivity.class); + intent.setData(videoUri); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + startActivity(intent); + } else { + Toast.makeText(this, R.string.no_video_path_received, Toast.LENGTH_SHORT).show(); + } + } else if(type.startsWith("image/")) { + Uri imageUri = receivedIntent.getParcelableExtra(Intent.EXTRA_STREAM); + if(imageUri != null) { + Intent intent = new Intent(this, PostImageActivity.class); + intent.setData(imageUri); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + startActivity(intent); + } else { + Toast.makeText(this, R.string.no_image_path_received, Toast.LENGTH_SHORT).show(); + } + } else if(type.startsWith("video/")) { + Uri videoUri = receivedIntent.getParcelableExtra(Intent.EXTRA_STREAM); + if(videoUri != null) { + Intent intent = new Intent(this, PostVideoActivity.class); + intent.setData(videoUri); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + startActivity(intent); + } else { + Toast.makeText(this, R.string.no_video_path_received, Toast.LENGTH_SHORT).show(); + } + } else { + Toast.makeText(this, R.string.cannot_handle_intent, Toast.LENGTH_SHORT).show(); + } + } else { + Toast.makeText(this, R.string.cannot_handle_intent, Toast.LENGTH_SHORT).show(); + } + + finish(); + } +} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubmitPost.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubmitPost.java index 018d3a7c..fe8c1e79 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubmitPost.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubmitPost.java @@ -135,7 +135,7 @@ class SubmitPost { } }).execute(); } else { - submitPostListener.submitFailed("Error: " + response.code()); + submitPostListener.submitFailed(response.message()); } } @@ -234,7 +234,6 @@ class SubmitPost { uploadImageParams.put(RedditUtils.FILEPATH_KEY, "post_image.jpg"); uploadImageParams.put(RedditUtils.MIMETYPE_KEY, "image/jpeg"); - Log.i("map", RedditUtils.getOAuthHeader(accessToken).toString()); Call uploadImageCall = api.uploadImage(RedditUtils.getOAuthHeader(accessToken), uploadImageParams); uploadImageCall.enqueue(new Callback() { @Override @@ -417,7 +416,6 @@ class SubmitPost { } else { errorString = error.getString(0); } - errorString = errorString.substring(0, 1).toUpperCase() + errorString.substring(1); submitPostListener.submitFailed(errorString); } else { submitPostListener.submitFailed(null); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubmitPostService.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubmitPostService.java index efb6a7df..f3e42109 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubmitPostService.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubmitPostService.java @@ -16,6 +16,7 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; +import androidx.core.app.NotificationManagerCompat; import com.bumptech.glide.Glide; import com.bumptech.glide.request.target.CustomTarget; @@ -93,13 +94,13 @@ public class SubmitPostService extends Service { NotificationManager.IMPORTANCE_LOW ); - NotificationManager manager = getSystemService(NotificationManager.class); + NotificationManagerCompat manager = NotificationManagerCompat.from(this); manager.createNotificationChannel(serviceChannel); } if(postType == EXTRA_POST_TEXT_OR_LINK) { - content = intent.getExtras().getString(EXTRA_CONTENT); - kind = intent.getExtras().getString(EXTRA_KIND); + content = intent.getStringExtra(EXTRA_CONTENT); + kind = intent.getStringExtra(EXTRA_KIND); startForeground(NotificationUtils.SUBMIT_POST_SERVICE_NOTIFICATION_ID, createNotification(R.string.posting)); submitTextOrLinkPost(); } else if(postType == EXTRA_POST_TYPE_IMAGE) { @@ -171,6 +172,13 @@ public class SubmitPostService extends Service { }); } + @Override + public void onLoadFailed(@Nullable Drawable errorDrawable) { + EventBus.getDefault().post(new SubmitImagePostEvent(false, getString(R.string.error_processing_image))); + + stopService(); + } + @Override public void onLoadCleared(@Nullable Drawable placeholder) { @@ -180,43 +188,59 @@ public class SubmitPostService extends Service { private void submitVideoPost() { try (ParcelFileDescriptor pfd = getContentResolver().openFileDescriptor(mediaUri, "r")) { - FileInputStream in = new FileInputStream(pfd.getFileDescriptor()); - byte[] buffer; - buffer = new byte[in.available()]; - while (in.read(buffer) != -1); + if(pfd != null) { + FileInputStream in = new FileInputStream(pfd.getFileDescriptor()); + byte[] buffer; + buffer = new byte[in.available()]; + while (in.read(buffer) != -1); - Glide.with(this) - .asBitmap() - .load(mediaUri) - .into(new CustomTarget() { - @Override - public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition transition) { - SubmitPost.submitVideoPost(mOauthRetrofit, mUploadMediaRetrofit, mUploadVideoRetrofit, - mAccessToken, getResources().getConfiguration().locale, subredditName, title, - buffer, getContentResolver().getType(mediaUri), resource, flair, isSpoiler, isNSFW, - new SubmitPost.SubmitPostListener() { - @Override - public void submitSuccessful(Post post) { - EventBus.getDefault().post(new SubmitVideoPostEvent(true, false, null)); - Toast.makeText(SubmitPostService.this, R.string.video_is_processing, Toast.LENGTH_SHORT).show(); + Glide.with(this) + .asBitmap() + .load(mediaUri) + .into(new CustomTarget() { + @Override + public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition transition) { + String type = getContentResolver().getType(mediaUri); + if(type != null) { + SubmitPost.submitVideoPost(mOauthRetrofit, mUploadMediaRetrofit, mUploadVideoRetrofit, + mAccessToken, getResources().getConfiguration().locale, subredditName, title, + buffer, type, resource, flair, isSpoiler, isNSFW, + new SubmitPost.SubmitPostListener() { + @Override + public void submitSuccessful(Post post) { + EventBus.getDefault().post(new SubmitVideoPostEvent(true, false, null)); + Toast.makeText(SubmitPostService.this, R.string.video_is_processing, Toast.LENGTH_SHORT).show(); - stopService(); - } + stopService(); + } - @Override - public void submitFailed(@Nullable String errorMessage) { - EventBus.getDefault().post(new SubmitVideoPostEvent(false, false, errorMessage)); + @Override + public void submitFailed(@Nullable String errorMessage) { + EventBus.getDefault().post(new SubmitVideoPostEvent(false, false, errorMessage)); - stopService(); - } - }); - } + stopService(); + } + }); + } else { + EventBus.getDefault().post(new SubmitVideoPostEvent(false, true, null)); + } + } - @Override - public void onLoadCleared(@Nullable Drawable placeholder) { + @Override + public void onLoadFailed(@Nullable Drawable errorDrawable) { + EventBus.getDefault().post(new SubmitVideoPostEvent(false, true, null)); - } - }); + stopService(); + } + + @Override + public void onLoadCleared(@Nullable Drawable placeholder) { + + } + }); + } else { + EventBus.getDefault().post(new SubmitVideoPostEvent(false, true, null)); + } } catch (IOException e) { e.printStackTrace(); EventBus.getDefault().post(new SubmitVideoPostEvent(false, true, null)); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewVideoActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewVideoActivity.java index 5d8a3e07..bffc0a9c 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewVideoActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewVideoActivity.java @@ -44,7 +44,6 @@ import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; import com.google.android.exoplayer2.trackselection.TrackSelection; import com.google.android.exoplayer2.trackselection.TrackSelector; -import com.google.android.exoplayer2.ui.PlayerControlView; import com.google.android.exoplayer2.ui.PlayerView; import com.google.android.exoplayer2.upstream.DataSource; import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter; @@ -257,25 +256,22 @@ public class ViewVideoActivity extends AppCompatActivity { } }); - videoPlayerView.setControllerVisibilityListener(new PlayerControlView.VisibilityListener() { - @Override - public void onVisibilityChange(int visibility) { - switch (visibility) { - case View.GONE: - getWindow().getDecorView().setSystemUiVisibility( - View.SYSTEM_UI_FLAG_LAYOUT_STABLE - | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_FULLSCREEN - | View.SYSTEM_UI_FLAG_IMMERSIVE); - break; - case View.VISIBLE: - getWindow().getDecorView().setSystemUiVisibility( - View.SYSTEM_UI_FLAG_LAYOUT_STABLE - | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); - } + videoPlayerView.setControllerVisibilityListener(visibility -> { + switch (visibility) { + case View.GONE: + getWindow().getDecorView().setSystemUiVisibility( + View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_FULLSCREEN + | View.SYSTEM_UI_FLAG_IMMERSIVE); + break; + case View.VISIBLE: + getWindow().getDecorView().setSystemUiVisibility( + View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); } }); @@ -371,7 +367,7 @@ public class ViewVideoActivity extends AppCompatActivity { public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if(requestCode == PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE && grantResults.length > 0) { if(grantResults[0] == PackageManager.PERMISSION_DENIED) { - Toast.makeText(this, "No storage permission to save this file", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, R.string.no_storage_permission, Toast.LENGTH_SHORT).show(); } else if(grantResults[0] == PackageManager.PERMISSION_GRANTED && isDownloading) { download(); } diff --git a/app/src/main/res/layout/activity_post_video.xml b/app/src/main/res/layout/activity_post_video.xml index 3e87bd88..2ba2d8eb 100644 --- a/app/src/main/res/layout/activity_post_video.xml +++ b/app/src/main/res/layout/activity_post_video.xml @@ -184,11 +184,12 @@ android:textColor="@color/colorAccent" android:visibility="gone" /> - + android:layout_height="400dp" + android:visibility="gone" + app:controller_layout_id="@layout/exo_playback_control_view" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 85a70bbb..1cde4e7a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -118,7 +118,8 @@ Please select an image first Posting Could not post it - Error processing this video + Error processing image + Error processing video Download completed Download Failed @@ -197,8 +198,8 @@ Best Search - Posting video - Posting image + Posting Video + Posting Image Please wait. Add account @@ -283,7 +284,12 @@ Leave? The post will still be submitted even if you leave here. Discard? - All the draft will not be saved. + All the draft will NOT be saved. Yes No + + No data received + No image path received + No video path received + Could not handle the share request