mirror of
				https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
				synced 2025-10-30 00:18:07 +01:00 
			
		
		
		
	Capture images and videos from camera when click capture fab in PostImageActivity and PostVideoActivity. Go to user's profile after sending image post.
This commit is contained in:
		| @@ -101,6 +101,17 @@ | ||||
|             android:name=".ViewUserDetailActivity" | ||||
|             android:parentActivityName=".MainActivity" | ||||
|             android:theme="@style/AppTheme.NoActionBarWithTranslucentWindow" /> | ||||
|  | ||||
|         <provider | ||||
|             android:name="androidx.core.content.FileProvider" | ||||
|             android:authorities="${applicationId}.provider" | ||||
|             android:exported="false" | ||||
|             android:grantUriPermissions="true"> | ||||
|             <meta-data | ||||
|                 android:name="android.support.FILE_PROVIDER_PATHS" | ||||
|                 android:resource="@xml/file_paths"> | ||||
|             </meta-data> | ||||
|         </provider> | ||||
|     </application> | ||||
|  | ||||
| </manifest> | ||||
| @@ -68,9 +68,11 @@ public class CommentDataSource extends PageKeyedDataSource<String, CommentData> | ||||
|         initialParams = params; | ||||
|         initialCallback = callback; | ||||
|  | ||||
|         initialLoadStateLiveData.postValue(NetworkState.LOADING); | ||||
|  | ||||
|         RedditAPI api = retrofit.create(RedditAPI.class); | ||||
|         Call<String> bestPost = api.getUserComments(username, null); | ||||
|         bestPost.enqueue(new Callback<String>() { | ||||
|         Call<String> commentsCall = api.getUserComments(username, null); | ||||
|         commentsCall.enqueue(new Callback<String>() { | ||||
|             @Override | ||||
|             public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { | ||||
|                 if(response.isSuccessful()) { | ||||
| @@ -117,6 +119,8 @@ public class CommentDataSource extends PageKeyedDataSource<String, CommentData> | ||||
|         this.params = params; | ||||
|         this.callback = callback; | ||||
|  | ||||
|         paginationNetworkStateLiveData.postValue(NetworkState.LOADING); | ||||
|  | ||||
|         RedditAPI api = retrofit.create(RedditAPI.class); | ||||
|         Call<String> bestPost = api.getUserComments(username, params.key); | ||||
|         bestPost.enqueue(new Callback<String>() { | ||||
|   | ||||
| @@ -113,7 +113,7 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni | ||||
|                 mProgressBar.setVisibility(View.GONE); | ||||
|             } else if(networkState.getStatus().equals(NetworkState.Status.FAILED)) { | ||||
|                 mFetchCommentInfoLinearLayout.setOnClickListener(view -> mCommentViewModel.retry()); | ||||
|                 showErrorView(R.string.load_posts_error); | ||||
|                 showErrorView(R.string.load_comments_failed); | ||||
|             } else { | ||||
|                 mFetchCommentInfoLinearLayout.setVisibility(View.GONE); | ||||
|                 mProgressBar.setVisibility(View.VISIBLE); | ||||
|   | ||||
| @@ -6,6 +6,8 @@ import android.graphics.Bitmap; | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.net.Uri; | ||||
| import android.os.Bundle; | ||||
| import android.os.Environment; | ||||
| import android.provider.MediaStore; | ||||
| import android.view.Menu; | ||||
| import android.view.MenuItem; | ||||
| import android.view.View; | ||||
| @@ -13,6 +15,7 @@ import android.widget.Button; | ||||
| import android.widget.EditText; | ||||
| import android.widget.ImageView; | ||||
| import android.widget.TextView; | ||||
| import android.widget.Toast; | ||||
|  | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.annotation.Nullable; | ||||
| @@ -20,6 +23,7 @@ import androidx.appcompat.app.ActionBar; | ||||
| import androidx.appcompat.app.AppCompatActivity; | ||||
| import androidx.constraintlayout.widget.ConstraintLayout; | ||||
| import androidx.coordinatorlayout.widget.CoordinatorLayout; | ||||
| import androidx.core.content.FileProvider; | ||||
|  | ||||
| import com.bumptech.glide.Glide; | ||||
| import com.bumptech.glide.RequestManager; | ||||
| @@ -30,7 +34,8 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton; | ||||
| import com.google.android.material.snackbar.Snackbar; | ||||
| import com.libRG.CustomTextView; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.util.Locale; | ||||
|  | ||||
| import javax.inject.Inject; | ||||
| @@ -61,6 +66,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS | ||||
|  | ||||
|     private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0; | ||||
|     private static final int PICK_IMAGE_REQUEST_CODE = 1; | ||||
|     private static final int CAPTURE_IMAGE_REQUEST_CODE = 2; | ||||
|  | ||||
|     @BindView(R.id.coordinator_layout_post_image_activity) CoordinatorLayout coordinatorLayout; | ||||
|     @BindView(R.id.subreddit_icon_gif_image_view_post_image_activity) GifImageView iconGifImageView; | ||||
| @@ -228,7 +234,19 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS | ||||
|         }); | ||||
|  | ||||
|         captureFab.setOnClickListener(view -> { | ||||
|  | ||||
|             Intent pictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); | ||||
|             if(pictureIntent.resolveActivity(getPackageManager()) != null) { | ||||
|                 try { | ||||
|                     imageUri = FileProvider.getUriForFile(this, "ml.docilealligator.infinityforreddit.provider", | ||||
|                             File.createTempFile("temp_img", ".jpg", getExternalFilesDir(Environment.DIRECTORY_PICTURES))); | ||||
|                     pictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); | ||||
|                     startActivityForResult(pictureIntent, CAPTURE_IMAGE_REQUEST_CODE); | ||||
|                 } catch (IOException ex) { | ||||
|                     Snackbar.make(coordinatorLayout, R.string.error_creating_temp_file, Snackbar.LENGTH_SHORT).show(); | ||||
|                 } | ||||
|             } else { | ||||
|                 Snackbar.make(coordinatorLayout, R.string.no_camera_available, Snackbar.LENGTH_SHORT).show(); | ||||
|             } | ||||
|         }); | ||||
|  | ||||
|         selectFromLibraryFab.setOnClickListener(view -> { | ||||
| @@ -330,21 +348,12 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS | ||||
|                                                     @Override | ||||
|                                                     public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) { | ||||
|                                                         if(response.isSuccessful()) { | ||||
|                                                             ParsePost.parsePosts(response.body(), mLocale, 1, | ||||
|                                                                     new ParsePost.ParsePostsListingListener() { | ||||
|                                                                         @Override | ||||
|                                                                         public void onParsePostsListingSuccess(ArrayList<Post> newPostData, String lastItem) { | ||||
|                                                                             Intent intent = new Intent(PostImageActivity.this, ViewPostDetailActivity.class); | ||||
|                                                                             intent.putExtra(ViewPostDetailActivity.EXTRA_POST_DATA, newPostData.get(0)); | ||||
|                                                                             startActivity(intent); | ||||
|                                                                             finish(); | ||||
|                                                                         } | ||||
|  | ||||
|                                                                         @Override | ||||
|                                                                         public void onParsePostsListingFail() { | ||||
|                                                                             startViewUserDetailActivity(); | ||||
|                                                                         } | ||||
|                                                                     }); | ||||
|                                                             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(); | ||||
|                                                         } | ||||
| @@ -435,6 +444,10 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS | ||||
|                 imageUri = data.getData(); | ||||
|                 loadImage(); | ||||
|             } | ||||
|         } else if(requestCode == CAPTURE_IMAGE_REQUEST_CODE) { | ||||
|             if(resultCode == RESULT_OK) { | ||||
|                 loadImage(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -7,6 +7,7 @@ import android.graphics.drawable.Drawable; | ||||
| import android.net.Uri; | ||||
| import android.os.Bundle; | ||||
| import android.os.ParcelFileDescriptor; | ||||
| import android.provider.MediaStore; | ||||
| import android.view.Menu; | ||||
| import android.view.MenuItem; | ||||
| import android.view.View; | ||||
| @@ -62,6 +63,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS | ||||
|  | ||||
|     private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0; | ||||
|     private static final int PICK_VIDEO_REQUEST_CODE = 1; | ||||
|     private static final int CAPTURE_VIDEO_REQUEST_CODE = 2; | ||||
|  | ||||
|     @BindView(R.id.coordinator_layout_post_video_activity) CoordinatorLayout coordinatorLayout; | ||||
|     @BindView(R.id.subreddit_icon_gif_image_view_post_video_activity) GifImageView iconGifImageView; | ||||
| @@ -233,7 +235,10 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS | ||||
|         }); | ||||
|  | ||||
|         captureFab.setOnClickListener(view -> { | ||||
|  | ||||
|             Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); | ||||
|             if (takeVideoIntent.resolveActivity(getPackageManager()) != null) { | ||||
|                 startActivityForResult(takeVideoIntent, CAPTURE_VIDEO_REQUEST_CODE); | ||||
|             } | ||||
|         }); | ||||
|  | ||||
|         selectFromLibraryFab.setOnClickListener(view -> { | ||||
| @@ -416,6 +421,9 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS | ||||
|                 videoUri = data.getData(); | ||||
|                 loadImage(); | ||||
|             } | ||||
|         } else if (requestCode == CAPTURE_VIDEO_REQUEST_CODE) { | ||||
|             videoUri = data.getData(); | ||||
|             loadImage(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -25,7 +25,8 @@ | ||||
|         android:id="@+id/progress_bar_view_post_detail_activity" | ||||
|         android:layout_width="wrap_content" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_gravity="center" /> | ||||
|         android:layout_gravity="center" | ||||
|         android:visibility="gone" /> | ||||
|  | ||||
|     <androidx.recyclerview.widget.RecyclerView | ||||
|         android:id="@+id/recycler_view_view_post_detail" | ||||
|   | ||||
| @@ -117,8 +117,11 @@ | ||||
|     <string name="select_from_gallery">Select a picture</string> | ||||
|     <string name="select_again">Select again</string> | ||||
|     <string name="error_getting_image">Error getting the image</string> | ||||
|     <string name="no_camera_available">No camera app available</string> | ||||
|     <string name="error_creating_temp_file">Error creating temp file</string> | ||||
|  | ||||
|     <string name="video_is_processing">Video is processing. Please wait.</string> | ||||
|     <string name="image_is_processing">Image is processing. Please wait.</string> | ||||
|  | ||||
|     <string name="flair">Flair</string> | ||||
|     <string name="spoiler">Spoiler</string> | ||||
|   | ||||
							
								
								
									
										5
									
								
								app/src/main/res/xml/file_paths.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								app/src/main/res/xml/file_paths.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <paths xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
|     <external-path name="image_temp" | ||||
|         path="Android/data/ml.docilealligator.infinityforreddit/files/Pictures" /> | ||||
| </paths> | ||||
		Reference in New Issue
	
	Block a user