From fe898a5c6c6cea96ab29e3677f9c89435f6c1075 Mon Sep 17 00:00:00 2001 From: Alex Ning Date: Tue, 6 Aug 2019 17:35:54 +0800 Subject: [PATCH] Create PostMediaService to submit video and image posts. --- .idea/caches/build_file_checksums.ser | Bin 533 -> 533 bytes .idea/caches/gradle_models.ser | Bin 263220 -> 263220 bytes app/src/main/AndroidManifest.xml | 16 +- .../java/CustomView/CustomMarkwonView.java | 2 +- .../infinityforreddit/AppComponent.java | 1 + .../infinityforreddit/MainActivity.java | 4 +- .../infinityforreddit/NotificationUtils.java | 5 + .../infinityforreddit/PostImageActivity.java | 142 ++++++------ .../infinityforreddit/PostMediaService.java | 203 ++++++++++++++++++ .../infinityforreddit/PostVideoActivity.java | 151 +++++++------ .../SubmitImagePostEvent.java | 11 + .../infinityforreddit/SubmitPost.java | 1 - .../SubmitVideoPostEvent.java | 13 ++ .../ViewUserDetailActivity.java | 23 +- app/src/main/res/values/strings.xml | 4 + 15 files changed, 410 insertions(+), 166 deletions(-) create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/NotificationUtils.java create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/PostMediaService.java create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/SubmitImagePostEvent.java create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/SubmitVideoPostEvent.java diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 95a34af4b5b79c206311bc8be66af5cc480ec463..bc1d4e1f273488f7e2d3c201426827f70703d08c 100644 GIT binary patch delta 15 XcmbQrGL>b*43^aP8P7J(sbmBIF?j}% delta 15 XcmbQrGL>b*43_vE=KUMzR5AhpE~f?q diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser index ce72386afc0cdd3ef357c4c56bcbfa2e4282272c..1f097d1a4223a33abcfd4621349f90c1bde332b2 100644 GIT binary patch literal 263220 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 z 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 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 425e1269..bebae40b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -10,6 +10,8 @@ android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="22" /> + + + + + android:theme="@style/AppTheme.NoActionBar" + android:windowSoftInputMode="adjustResize" /> + android:theme="@style/AppTheme.NoActionBar" + android:windowSoftInputMode="adjustResize" /> + android:theme="@style/AppTheme.NoActionBar" + android:windowSoftInputMode="adjustResize" /> () { + Intent intent = new Intent(this, PostMediaService.class); + intent.setData(imageUri); + intent.putExtra(PostMediaService.EXTRA_SUBREDDIT_NAME, subredditName); + intent.putExtra(PostMediaService.EXTRA_TITLE, titleEditText.getText().toString()); + intent.putExtra(PostMediaService.EXTRA_FLAIR, flair); + intent.putExtra(PostMediaService.EXTRA_IS_SPOILER, isSpoiler); + intent.putExtra(PostMediaService.EXTRA_IS_NSFW, isNSFW); + intent.putExtra(PostMediaService.EXTRA_POST_TYPE, PostMediaService.EXTRA_POST_TYPE_IMAGE); - @Override - public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition transition) { - SubmitPost.submitImagePost(mOauthRetrofit, mUploadMediaRetrofit, sharedPreferences, - mLocale, subredditName, titleEditText.getText().toString(), resource, - flair, isSpoiler, isNSFW, new SubmitPost.SubmitPostListener() { - @Override - public void submitSuccessful(Post post) { - RedditAPI api = mOauthRetrofit.create(RedditAPI.class); - Call getPost = api.getUserBestPosts(mUserInfoSharedPreferences.getString(SharedPreferencesUtils.USER_KEY, ""), null, - RedditUtils.getOAuthHeader(sharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN_KEY, ""))); - getPost.enqueue(new Callback() { - @Override - public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { - if(response.isSuccessful()) { - Toast.makeText(PostImageActivity.this, R.string.image_is_processing, Toast.LENGTH_SHORT).show(); - Intent intent = new Intent(PostImageActivity.this, ViewUserDetailActivity.class); - intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, - mUserInfoSharedPreferences.getString(SharedPreferencesUtils.USER_KEY, "")); - startActivity(intent); - finish(); - } else { - startViewUserDetailActivity(); - } - } + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + startForegroundService(intent); + } else { + startService(intent); + } - @Override - public void onFailure(@NonNull Call call, @NonNull Throwable t) { - startViewUserDetailActivity(); - } - }); - } - - @Override - public void submitFailed(@Nullable String errorMessage) { - postingSnackbar.dismiss(); - item.setEnabled(true); - item.getIcon().setAlpha(255); - if(errorMessage == null) { - Snackbar.make(coordinatorLayout, R.string.post_failed, Snackbar.LENGTH_SHORT).show(); - } else { - Snackbar.make(coordinatorLayout, errorMessage, Snackbar.LENGTH_SHORT).show(); - } - } - }); - } - - @Override - public void onLoadCleared(@Nullable Drawable placeholder) { - - } - }); return true; } return false; } - private void startViewUserDetailActivity() { - Intent intent = new Intent(PostImageActivity.this, ViewUserDetailActivity.class); - intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, - mUserInfoSharedPreferences.getString(SharedPreferencesUtils.USER_KEY, "")); - startActivity(intent); - finish(); - } - @Override protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); @@ -415,6 +381,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS outState.putString(IMAGE_URI_STATE, imageUri.toString()); } outState.putBoolean(LOAD_SUBREDDIT_ICON_STATE, loadSubredditIconSuccessful); + outState.putBoolean(IS_POSTING_STATE, isPosting); outState.putString(FLAIR_STATE, flair); outState.putBoolean(IS_SPOILER_STATE, isSpoiler); outState.putBoolean(IS_NSFW_STATE, isNSFW); @@ -456,6 +423,12 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS } } + @Override + protected void onDestroy() { + EventBus.getDefault().unregister(this); + super.onDestroy(); + } + @Override public void flairSelected(String flair) { this.flair = flair; @@ -463,4 +436,25 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS flairTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark)); flairSelectionBottomSheetFragment.dismiss(); } + + @Subscribe + public void onSubmitImagePostEvent(SubmitImagePostEvent submitImagePostEvent) { + isPosting = false; + if(submitImagePostEvent.postSuccess) { + Intent intent = new Intent(this, ViewUserDetailActivity.class); + intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, + mUserInfoSharedPreferences.getString(SharedPreferencesUtils.USER_KEY, "")); + startActivity(intent); + finish(); + } else { + mPostingSnackbar.dismiss(); + mMemu.getItem(R.id.action_send_post_image_activity).setEnabled(true); + mMemu.getItem(R.id.action_send_post_image_activity).getIcon().setAlpha(255); + 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(); + } + } + } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostMediaService.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostMediaService.java new file mode 100644 index 00000000..fa02eb41 --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostMediaService.java @@ -0,0 +1,203 @@ +package ml.docilealligator.infinityforreddit; + +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.Service; +import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.Bitmap; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Build; +import android.os.IBinder; +import android.os.ParcelFileDescriptor; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.app.NotificationCompat; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.target.CustomTarget; +import com.bumptech.glide.request.transition.Transition; + +import org.greenrobot.eventbus.EventBus; + +import java.io.FileInputStream; +import java.io.IOException; + +import javax.inject.Inject; +import javax.inject.Named; + +import retrofit2.Retrofit; + +public class PostMediaService extends Service { + static final String EXTRA_SUBREDDIT_NAME = "ESN"; + static final String EXTRA_TITLE = "ET"; + static final String EXTRA_FLAIR = "EF"; + static final String EXTRA_IS_SPOILER = "EIS"; + static final String EXTRA_IS_NSFW = "EIN"; + static final String EXTRA_POST_TYPE = "EPT"; + static final int EXTRA_POST_TYPE_IMAGE = 0; + static final int EXTRA_POST_TYPE_VIDEO = 1; + + @Inject + @Named("oauth") + Retrofit mOauthRetrofit; + + @Inject + @Named("upload_media") + Retrofit mUploadMediaRetrofit; + + @Inject + @Named("upload_video") + Retrofit mUploadVideoRetrofit; + + @Inject + @Named("user_info") + SharedPreferences mUserInfoSharedPreferences; + + @Inject + @Named("auth_info") + SharedPreferences sharedPreferences; + + public PostMediaService() { + } + + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + ((Infinity) getApplication()).getmAppComponent().inject(this); + + Uri mediaUri = intent.getData(); + String subredditName = intent.getExtras().getString(EXTRA_SUBREDDIT_NAME); + String title = intent.getExtras().getString(EXTRA_TITLE); + String flair = intent.getExtras().getString(EXTRA_FLAIR); + boolean isSpoiler = intent.getExtras().getBoolean(EXTRA_IS_SPOILER); + boolean isNSFW = intent.getExtras().getBoolean(EXTRA_IS_NSFW); + int postType = intent.getExtras().getInt(EXTRA_POST_TYPE); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + NotificationChannel serviceChannel = new NotificationChannel( + NotificationUtils.CHANNEL_POST_MEDIA, + NotificationUtils.CHANNEL_POST_MEDIA, + NotificationManager.IMPORTANCE_LOW + ); + + NotificationManager manager = getSystemService(NotificationManager.class); + manager.createNotificationChannel(serviceChannel); + } + + if(postType == EXTRA_POST_TYPE_IMAGE) { + startForeground(1, createNotification(R.string.posting_image)); + submitImagePost(mediaUri, subredditName, title, flair, isSpoiler, isNSFW); + } else { + startForeground(1, createNotification(R.string.posting_video)); + submitVideoPost(mediaUri, subredditName, title, flair, isSpoiler, isNSFW); + } + + return START_NOT_STICKY; + } + + private Notification createNotification(int stringResId) { + return new NotificationCompat.Builder(this, NotificationUtils.CHANNEL_POST_MEDIA) + .setContentTitle(getString(stringResId)) + .setContentText(getString(R.string.please_wait)) + .setSmallIcon(R.mipmap.ic_launcher_round) + .build(); + } + + private void submitImagePost(Uri imageUri, String subredditName, String title, String flair, + boolean isSpoiler, boolean isNSFW) { + Glide.with(this) + .asBitmap() + .load(imageUri) + .into(new CustomTarget() { + + @Override + public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition transition) { + SubmitPost.submitImagePost(mOauthRetrofit, mUploadMediaRetrofit, sharedPreferences, + getResources().getConfiguration().locale, subredditName, title, resource, + flair, isSpoiler, isNSFW, new SubmitPost.SubmitPostListener() { + @Override + public void submitSuccessful(Post post) { + EventBus.getDefault().post(new SubmitImagePostEvent(true, null)); + Toast.makeText(PostMediaService.this, R.string.image_is_processing, Toast.LENGTH_SHORT).show(); + + stopForeground(true); + stopSelf(); + } + + @Override + public void submitFailed(@Nullable String errorMessage) { + EventBus.getDefault().post(new SubmitImagePostEvent(false, errorMessage)); + + stopForeground(true); + stopSelf(); + } + }); + } + + @Override + public void onLoadCleared(@Nullable Drawable placeholder) { + + } + }); + } + + private void submitVideoPost(Uri videoUri, String subredditName, String title, String flair, + boolean isSpoiler, boolean isNSFW) { + try (ParcelFileDescriptor pfd = getContentResolver().openFileDescriptor(videoUri, "r")) { + FileInputStream in = new FileInputStream(pfd.getFileDescriptor()); + byte[] buffer; + buffer = new byte[in.available()]; + while (in.read(buffer) != -1); + + Glide.with(this) + .asBitmap() + .load(videoUri) + .into(new CustomTarget() { + @Override + public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition transition) { + SubmitPost.submitVideoPost(mOauthRetrofit, mUploadMediaRetrofit, mUploadVideoRetrofit, + sharedPreferences, getResources().getConfiguration().locale, subredditName, title, + buffer, getContentResolver().getType(videoUri), resource, flair, isSpoiler, isNSFW, + new SubmitPost.SubmitPostListener() { + @Override + public void submitSuccessful(Post post) { + EventBus.getDefault().post(new SubmitVideoPostEvent(true, false, null)); + Toast.makeText(PostMediaService.this, R.string.video_is_processing, Toast.LENGTH_SHORT).show(); + + stopForeground(true); + stopSelf(); + } + + @Override + public void submitFailed(@Nullable String errorMessage) { + EventBus.getDefault().post(new SubmitVideoPostEvent(false, false, errorMessage)); + + stopForeground(true); + stopSelf(); + } + }); + } + + @Override + public void onLoadCleared(@Nullable Drawable placeholder) { + + } + }); + } catch (IOException e) { + e.printStackTrace(); + EventBus.getDefault().post(new SubmitVideoPostEvent(false, true, null)); + + stopForeground(true); + stopSelf(); + } + } +} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostVideoActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostVideoActivity.java index 349d1c46..9f3f14fb 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostVideoActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostVideoActivity.java @@ -2,11 +2,9 @@ package ml.docilealligator.infinityforreddit; import android.content.Intent; import android.content.SharedPreferences; -import android.graphics.Bitmap; -import android.graphics.drawable.Drawable; import android.net.Uri; +import android.os.Build; import android.os.Bundle; -import android.os.ParcelFileDescriptor; import android.provider.MediaStore; import android.view.Menu; import android.view.MenuItem; @@ -14,7 +12,6 @@ import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; -import android.widget.Toast; import android.widget.VideoView; import androidx.annotation.NonNull; @@ -27,15 +24,12 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout; import com.bumptech.glide.Glide; import com.bumptech.glide.RequestManager; import com.bumptech.glide.request.RequestOptions; -import com.bumptech.glide.request.target.CustomTarget; -import com.bumptech.glide.request.transition.Transition; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.snackbar.Snackbar; import com.libRG.CustomTextView; -import java.io.FileInputStream; -import java.io.IOException; -import java.util.Locale; +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; import javax.inject.Inject; import javax.inject.Named; @@ -57,6 +51,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS private static final String SUBREDDIT_IS_USER_STATE = "SIUS"; private static final String VIDEO_URI_STATE = "IUS"; private static final String LOAD_SUBREDDIT_ICON_STATE = "LSIS"; + private static final String IS_POSTING_STATE = "IPS"; private static final String FLAIR_STATE = "FS"; private static final String IS_SPOILER_STATE = "ISS"; private static final String IS_NSFW_STATE = "INS"; @@ -86,14 +81,16 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS private boolean subredditIsUser; private Uri videoUri; private boolean loadSubredditIconSuccessful = true; + private boolean isPosting; private String flair = null; private boolean isSpoiler = false; private boolean isNSFW = false; + private Menu mMemu; private RequestManager mGlide; - private Locale mLocale; - private FlairBottomSheetFragment flairSelectionBottomSheetFragment; + private FlairBottomSheetFragment mFlairSelectionBottomSheetFragment; + private Snackbar mPostingSnackbar; @Inject @Named("no_oauth") @@ -126,13 +123,14 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS ButterKnife.bind(this); + EventBus.getDefault().register(this); + ((Infinity) getApplication()).getmAppComponent().inject(this); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); mGlide = Glide.with(this); - mLocale = getResources().getConfiguration().locale; if(savedInstanceState != null) { subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE); @@ -140,13 +138,14 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS subredditSelected = savedInstanceState.getBoolean(SUBREDDIT_SELECTED_STATE); subredditIsUser = savedInstanceState.getBoolean(SUBREDDIT_IS_USER_STATE); loadSubredditIconSuccessful = savedInstanceState.getBoolean(LOAD_SUBREDDIT_ICON_STATE); + isPosting = savedInstanceState.getBoolean(IS_POSTING_STATE); flair = savedInstanceState.getString(FLAIR_STATE); isSpoiler = savedInstanceState.getBoolean(IS_SPOILER_STATE); isNSFW = savedInstanceState.getBoolean(IS_NSFW_STATE); if(savedInstanceState.getString(VIDEO_URI_STATE) != null) { videoUri = Uri.parse(savedInstanceState.getString(VIDEO_URI_STATE)); - loadImage(); + loadVideo(); } if(subredditName != null) { @@ -158,6 +157,11 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS } displaySubredditIcon(); + if(isPosting) { + mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE); + mPostingSnackbar.show(); + } + if(flair != null) { flairTextView.setText(flair); flairTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark)); @@ -169,6 +173,8 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS nsfwTextView.setBackgroundColor(getResources().getColor(R.color.colorAccent)); } } else { + isPosting = false; + if(getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) { subredditName = getIntent().getExtras().getString(EXTRA_SUBREDDIT_NAME); subreditNameTextView.setText(subredditName); @@ -206,11 +212,11 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS flairTextView.setOnClickListener(view -> { if(flair == null) { - flairSelectionBottomSheetFragment = new FlairBottomSheetFragment(); + mFlairSelectionBottomSheetFragment = new FlairBottomSheetFragment(); Bundle bundle = new Bundle(); bundle.putString(FlairBottomSheetFragment.EXTRA_SUBREDDIT_NAME, subredditName); - flairSelectionBottomSheetFragment.setArguments(bundle); - flairSelectionBottomSheetFragment.show(getSupportFragmentManager(), flairSelectionBottomSheetFragment.getTag()); + mFlairSelectionBottomSheetFragment.setArguments(bundle); + mFlairSelectionBottomSheetFragment.show(getSupportFragmentManager(), mFlairSelectionBottomSheetFragment.getTag()); } else { flairTextView.setBackgroundColor(getResources().getColor(android.R.color.transparent)); flairTextView.setText(getString(R.string.flair)); @@ -266,7 +272,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS }); } - private void loadImage() { + private void loadVideo() { constraintLayout.setVisibility(View.GONE); videoView.setVisibility(View.VISIBLE); selectAgainTextView.setVisibility(View.VISIBLE); @@ -299,7 +305,12 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS @Override public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.post_image_activity, menu); + getMenuInflater().inflate(R.menu.post_video_activity, menu); + mMemu = menu; + if(isPosting) { + mMemu.findItem(R.id.action_send_post_video_activity).setEnabled(false); + mMemu.findItem(R.id.action_send_post_video_activity).getIcon().setAlpha(130); + } return true; } @@ -309,7 +320,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS case android.R.id.home: finish(); return true; - case R.id.action_send_post_image_activity: + case R.id.action_send_post_video_activity: if(!subredditSelected) { Snackbar.make(coordinatorLayout, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show(); return true; @@ -320,10 +331,12 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS return true; } + isPosting = true; + item.setEnabled(false); item.getIcon().setAlpha(130); - Snackbar postingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE); - postingSnackbar.show(); + mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE); + mPostingSnackbar.show(); String subredditName; if(subredditIsUser) { @@ -332,55 +345,21 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS subredditName = subreditNameTextView.getText().toString(); } - try (ParcelFileDescriptor pfd = getContentResolver().openFileDescriptor(videoUri, "r")) { - FileInputStream in = new FileInputStream(pfd.getFileDescriptor()); - byte[] buffer; - buffer = new byte[in.available()]; - while (in.read(buffer) != -1); + Intent intent = new Intent(this, PostMediaService.class); + intent.setData(videoUri); + intent.putExtra(PostMediaService.EXTRA_SUBREDDIT_NAME, subredditName); + intent.putExtra(PostMediaService.EXTRA_TITLE, titleEditText.getText().toString()); + intent.putExtra(PostMediaService.EXTRA_FLAIR, flair); + intent.putExtra(PostMediaService.EXTRA_IS_SPOILER, isSpoiler); + intent.putExtra(PostMediaService.EXTRA_IS_NSFW, isNSFW); + intent.putExtra(PostMediaService.EXTRA_POST_TYPE, PostMediaService.EXTRA_POST_TYPE_VIDEO); - Glide.with(this) - .asBitmap() - .load(videoUri) - .into(new CustomTarget() { - @Override - public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition transition) { - SubmitPost.submitVideoPost(mOauthRetrofit, mUploadMediaRetrofit, mUploadVideoRetrofit, - sharedPreferences, mLocale, subredditName, titleEditText.getText().toString(), - buffer, getContentResolver().getType(videoUri), resource, flair, isSpoiler, isNSFW, - new SubmitPost.SubmitPostListener() { - @Override - public void submitSuccessful(Post post) { - Toast.makeText(PostVideoActivity.this, R.string.video_is_processing, Toast.LENGTH_SHORT).show(); - Intent intent = new Intent(PostVideoActivity.this, ViewUserDetailActivity.class); - intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, - mUserInfoSharedPreferences.getString(SharedPreferencesUtils.USER_KEY, "")); - startActivity(intent); - finish(); - } - - @Override - public void submitFailed(@Nullable String errorMessage) { - postingSnackbar.dismiss(); - item.setEnabled(true); - item.getIcon().setAlpha(255); - if (errorMessage == null || errorMessage.equals("")) { - Snackbar.make(coordinatorLayout, R.string.post_failed, Snackbar.LENGTH_SHORT).show(); - } else { - Snackbar.make(coordinatorLayout, errorMessage, Snackbar.LENGTH_SHORT).show(); - } - } - }); - } - - @Override - public void onLoadCleared(@Nullable Drawable placeholder) { - - } - }); - } catch (IOException e) { - e.printStackTrace(); - Snackbar.make(coordinatorLayout, R.string.error_processing_video, Snackbar.LENGTH_SHORT).show(); + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + startForegroundService(intent); + } else { + startService(intent); } + return true; } @@ -404,6 +383,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS outState.putString(VIDEO_URI_STATE, videoUri.toString()); } outState.putBoolean(LOAD_SUBREDDIT_ICON_STATE, loadSubredditIconSuccessful); + outState.putBoolean(IS_POSTING_STATE, isPosting); outState.putString(FLAIR_STATE, flair); outState.putBoolean(IS_SPOILER_STATE, isSpoiler); outState.putBoolean(IS_NSFW_STATE, isNSFW); @@ -436,19 +416,48 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS } videoUri = data.getData(); - loadImage(); + loadVideo(); } } else if (requestCode == CAPTURE_VIDEO_REQUEST_CODE) { videoUri = data.getData(); - loadImage(); + loadVideo(); } } + @Override + protected void onDestroy() { + EventBus.getDefault().unregister(this); + super.onDestroy(); + } + @Override public void flairSelected(String flair) { this.flair = flair; flairTextView.setText(flair); flairTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark)); - flairSelectionBottomSheetFragment.dismiss(); + mFlairSelectionBottomSheetFragment.dismiss(); + } + + @Subscribe + public void onSubmitVideoPostEvent(SubmitVideoPostEvent submitVideoPostEvent) { + isPosting = false; + if(submitVideoPostEvent.postSuccess) { + Intent intent = new Intent(this, ViewUserDetailActivity.class); + intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, + mUserInfoSharedPreferences.getString(SharedPreferencesUtils.USER_KEY, "")); + startActivity(intent); + finish(); + } else if(submitVideoPostEvent.errorProcessingVideo) { + Snackbar.make(coordinatorLayout, R.string.error_processing_video, Snackbar.LENGTH_SHORT).show(); + } else { + mPostingSnackbar.dismiss(); + mMemu.getItem(R.id.action_send_post_video_activity).setEnabled(true); + mMemu.getItem(R.id.action_send_post_video_activity).getIcon().setAlpha(255); + 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(); + } + } } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubmitImagePostEvent.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubmitImagePostEvent.java new file mode 100644 index 00000000..3432628c --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubmitImagePostEvent.java @@ -0,0 +1,11 @@ +package ml.docilealligator.infinityforreddit; + +public class SubmitImagePostEvent { + public boolean postSuccess; + public String errorMessage; + + public SubmitImagePostEvent(boolean postSuccess, String errorMessage) { + this.postSuccess = postSuccess; + this.errorMessage = errorMessage; + } +} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubmitPost.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubmitPost.java index 50a1107b..e2ce499c 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubmitPost.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubmitPost.java @@ -83,7 +83,6 @@ class SubmitPost { uploadImageParams.put(RedditUtils.FILEPATH_KEY, "post_video." + fileType); uploadImageParams.put(RedditUtils.MIMETYPE_KEY, mimeType); - Log.i("map", RedditUtils.getOAuthHeader(accessToken).toString()); Call uploadImageCall = api.uploadImage(RedditUtils.getOAuthHeader(accessToken), uploadImageParams); uploadImageCall.enqueue(new Callback() { @Override diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubmitVideoPostEvent.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubmitVideoPostEvent.java new file mode 100644 index 00000000..6699135f --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubmitVideoPostEvent.java @@ -0,0 +1,13 @@ +package ml.docilealligator.infinityforreddit; + +public class SubmitVideoPostEvent { + public boolean postSuccess; + public boolean errorProcessingVideo; + public String errorMessage; + + public SubmitVideoPostEvent(boolean postSuccess, boolean errorProcessingVideo, String errorMessage) { + this.postSuccess = postSuccess; + this.errorProcessingVideo = errorProcessingVideo; + this.errorMessage = errorMessage; + } +} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewUserDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewUserDetailActivity.java index d7799bfa..2381c59a 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewUserDetailActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewUserDetailActivity.java @@ -63,7 +63,6 @@ public class ViewUserDetailActivity extends AppCompatActivity { private SectionsPagerAdapter sectionsPagerAdapter; - private Fragment mFragment; private SubscribedUserDao subscribedUserDao; private RequestManager glide; private UserViewModel userViewModel; @@ -330,15 +329,12 @@ public class ViewUserDetailActivity extends AppCompatActivity { intent.putExtra(SearchActivity.EXTRA_SUBREDDIT_IS_USER, true); intent.putExtra(SearchActivity.EXTRA_SEARCH_ONLY_SUBREDDITS, false); startActivity(intent); - break; + return true; case R.id.action_refresh_view_user_detail_activity: - if (mFragment instanceof FragmentCommunicator) { - ((FragmentCommunicator) mFragment).refresh(); - return true; - } - break; + sectionsPagerAdapter.refresh(); + return true; case R.id.action_lazy_mode_view_user_detail_activity: - MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_view_user_detail_activity); + /*MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_view_user_detail_activity); if(isInLazyMode) { isInLazyMode = false; ((FragmentCommunicator) mFragment).stopLazyMode(); @@ -354,7 +350,7 @@ public class ViewUserDetailActivity extends AppCompatActivity { params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED); collapsingToolbarLayout.setLayoutParams(params); } - return true; + return true;*/ } return false; } @@ -484,11 +480,10 @@ public class ViewUserDetailActivity extends AppCompatActivity { } public void refresh() { - if(postFragment != null) { - ((FragmentCommunicator) postFragment).refresh(); - } - if(commentsListingFragment != null) { - ((FragmentCommunicator) commentsListingFragment).refresh(); + if(viewPager.getCurrentItem() == 0) { + postFragment.refresh(); + } else { + commentsListingFragment.refresh(); } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dbe1d6c2..93de5843 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -160,4 +160,8 @@ GIF Best Search + + Posting video + Posting image + Please wait.