diff options
author | Alex Ning <chineseperson5@gmail.com> | 2019-08-28 08:41:36 +0000 |
---|---|---|
committer | Alex Ning <chineseperson5@gmail.com> | 2019-08-28 08:41:36 +0000 |
commit | cc0d78aeddb90346c136fc4eafe03d80b95e93fa (patch) | |
tree | b871b8fb573886c876bc0197a3c46e2bcfd72553 | |
parent | 30d2abe9c691bf1603495bd7ae1abebbc447e0a8 (diff) | |
download | infinity-for-reddit-cc0d78aeddb90346c136fc4eafe03d80b95e93fa.tar infinity-for-reddit-cc0d78aeddb90346c136fc4eafe03d80b95e93fa.tar.gz infinity-for-reddit-cc0d78aeddb90346c136fc4eafe03d80b95e93fa.tar.bz2 infinity-for-reddit-cc0d78aeddb90346c136fc4eafe03d80b95e93fa.tar.lz infinity-for-reddit-cc0d78aeddb90346c136fc4eafe03d80b95e93fa.tar.xz infinity-for-reddit-cc0d78aeddb90346c136fc4eafe03d80b95e93fa.tar.zst infinity-for-reddit-cc0d78aeddb90346c136fc4eafe03d80b95e93fa.zip |
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.
-rw-r--r-- | .idea/caches/build_file_checksums.ser | bin | 533 -> 533 bytes | |||
-rw-r--r-- | .idea/caches/gradle_models.ser | bin | 309771 -> 309771 bytes | |||
-rw-r--r-- | app/src/main/AndroidManifest.xml | 47 | ||||
-rw-r--r-- | app/src/main/java/ml/docilealligator/infinityforreddit/PostImageActivity.java | 9 | ||||
-rw-r--r-- | app/src/main/java/ml/docilealligator/infinityforreddit/PostLinkActivity.java | 9 | ||||
-rw-r--r-- | app/src/main/java/ml/docilealligator/infinityforreddit/PostTextActivity.java | 9 | ||||
-rw-r--r-- | app/src/main/java/ml/docilealligator/infinityforreddit/PostVideoActivity.java | 70 | ||||
-rw-r--r-- | app/src/main/java/ml/docilealligator/infinityforreddit/ShareDataResolverActivity.java | 77 | ||||
-rw-r--r-- | app/src/main/java/ml/docilealligator/infinityforreddit/SubmitPost.java | 4 | ||||
-rw-r--r-- | app/src/main/java/ml/docilealligator/infinityforreddit/SubmitPostService.java | 104 | ||||
-rw-r--r-- | app/src/main/java/ml/docilealligator/infinityforreddit/ViewVideoActivity.java | 38 | ||||
-rw-r--r-- | app/src/main/res/layout/activity_post_video.xml | 9 | ||||
-rw-r--r-- | app/src/main/res/values/strings.xml | 14 |
13 files changed, 281 insertions, 109 deletions
diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser Binary files differindex 7f5b4248..b4c3a5c8 100644 --- a/.idea/caches/build_file_checksums.ser +++ b/.idea/caches/build_file_checksums.ser diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser Binary files differindex e92fef90..321d1240 100644 --- a/.idea/caches/gradle_models.ser +++ b/.idea/caches/gradle_models.ser diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 46d43af7..c3de6dc2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,15 +2,6 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="ml.docilealligator.infinityforreddit"> - <uses-permission android:name="android.permission.INTERNET" /> - - <uses-permission-sdk-23 android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> - - <uses-permission - android:name="android.permission.WRITE_EXTERNAL_STORAGE" - android:maxSdkVersion="22" /> - <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> - <application android:name=".Infinity" android:allowBackup="true" @@ -20,6 +11,23 @@ android:supportsRtl="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true"> + <activity android:name=".ShareDataResolverActivity"> + <intent-filter> + <action android:name="android.intent.action.SEND" /> + <category android:name="android.intent.category.DEFAULT" /> + <data android:mimeType="image/*" /> + </intent-filter> + <intent-filter> + <action android:name="android.intent.action.SEND" /> + <category android:name="android.intent.category.DEFAULT" /> + <data android:mimeType="video/*" /> + </intent-filter> + <intent-filter> + <action android:name="android.intent.action.SEND" /> + <category android:name="android.intent.category.DEFAULT" /> + <data android:mimeType="text/plain" /> + </intent-filter> + </activity> <activity android:name=".SettingsActivity" android:label="@string/search_activity_label" @@ -47,15 +55,11 @@ android:theme="@style/AppTheme.NoActionBar" android:windowSoftInputMode="adjustResize" /> - <service - android:name=".SubmitPostService" - android:enabled="true" - android:exported="false" /> - <activity android:name=".FilteredThingActivity" android:parentActivityName=".MainActivity" android:theme="@style/AppTheme.NoActionBar" /> + <activity android:name=".SearchSubredditsResultActivity" android:label="@string/search_subreddits_activity_label" @@ -172,7 +176,6 @@ android:name=".ViewUserDetailActivity" android:parentActivityName=".MainActivity" android:theme="@style/AppTheme.NoActionBarWithTranslucentWindow" /> - <provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.provider" @@ -182,6 +185,20 @@ android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider> + + <service + android:name=".SubmitPostService" + android:enabled="true" + android:exported="false" /> </application> + <uses-permission + android:name="android.permission.WRITE_EXTERNAL_STORAGE" + android:maxSdkVersion="22" /> + + <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> + <uses-permission android:name="android.permission.INTERNET" /> + + <uses-permission-sdk-23 android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> + </manifest>
\ 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); @@ -469,9 +489,17 @@ 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<String> uploadImageCall = api.uploadImage(RedditUtils.getOAuthHeader(accessToken), uploadImageParams); uploadImageCall.enqueue(new Callback<String>() { @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) { @@ -172,6 +173,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); - - Glide.with(this) - .asBitmap() - .load(mediaUri) - .into(new CustomTarget<Bitmap>() { - @Override - public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> 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(); - - stopService(); - } - - @Override - public void submitFailed(@Nullable String errorMessage) { - EventBus.getDefault().post(new SubmitVideoPostEvent(false, false, errorMessage)); - - stopService(); - } - }); - } - - @Override - public void onLoadCleared(@Nullable Drawable placeholder) { - - } - }); + 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<Bitmap>() { + @Override + public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> 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(); + } + + @Override + public void submitFailed(@Nullable String errorMessage) { + EventBus.getDefault().post(new SubmitVideoPostEvent(false, false, errorMessage)); + + stopService(); + } + }); + } else { + EventBus.getDefault().post(new SubmitVideoPostEvent(false, true, null)); + } + } + + @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" /> - <VideoView - android:id="@+id/video_view_post_video_activity" + <com.google.android.exoplayer2.ui.PlayerView + android:id="@+id/player_view_post_video_activity" android:layout_width="match_parent" - android:layout_height="wrap_content" - android:visibility="gone"/> + android:layout_height="400dp" + android:visibility="gone" + app:controller_layout_id="@layout/exo_playback_control_view" /> </LinearLayout> 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 @@ <string name="select_an_image">Please select an image first</string> <string name="posting">Posting</string> <string name="post_failed">Could not post it</string> - <string name="error_processing_video">Error processing this video</string> + <string name="error_processing_image">Error processing image</string> + <string name="error_processing_video">Error processing video</string> <string name="download_completed">Download completed</string> <string name="download_failed">Download Failed</string> @@ -197,8 +198,8 @@ <string name="best">Best</string> <string name="search">Search</string> - <string name="posting_video">Posting video</string> - <string name="posting_image">Posting image</string> + <string name="posting_video">Posting Video</string> + <string name="posting_image">Posting Image</string> <string name="please_wait">Please wait.</string> <string name="add_account">Add account</string> @@ -283,7 +284,12 @@ <string name="exit_when_submit_post">Leave?</string> <string name="exit_when_submit_post_detail">The post will still be submitted even if you leave here.</string> <string name="discard_post">Discard?</string> - <string name="discard_post_detail">All the draft will not be saved.</string> + <string name="discard_post_detail">All the draft will NOT be saved.</string> <string name="yes">Yes</string> <string name="no">No</string> + + <string name="no_data_received">No data received</string> + <string name="no_image_path_received">No image path received</string> + <string name="no_video_path_received">No video path received</string> + <string name="cannot_handle_intent">Could not handle the share request</string> </resources> |