mirror of
				https://framagit.org/tom79/fedilab-tube
				synced 2025-06-05 21:09:11 +02:00 
			
		
		
		
	Change profile picture for channels
This commit is contained in:
		| @@ -142,6 +142,13 @@ public interface PeertubeService { | |||||||
|             @Field("nsfwPolicy") String nsfwPolicy |             @Field("nsfwPolicy") String nsfwPolicy | ||||||
|     ); |     ); | ||||||
|  |  | ||||||
|  |     @Multipart | ||||||
|  |     @POST("video-channels/{channelHandle}/avatar/pick") | ||||||
|  |     Call<UserMe.AvatarResponse> updateChannelProfilePicture( | ||||||
|  |             @Header("Authorization") String credentials, | ||||||
|  |             @Path("channelHandle") String channelHandle, | ||||||
|  |             @Part MultipartBody.Part avatarfile); | ||||||
|  |  | ||||||
|     @Multipart |     @Multipart | ||||||
|     @POST("users/me/avatar/pick") |     @POST("users/me/avatar/pick") | ||||||
|     Call<UserMe.AvatarResponse> updateProfilePicture( |     Call<UserMe.AvatarResponse> updateProfilePicture( | ||||||
|   | |||||||
| @@ -603,7 +603,7 @@ public class RetrofitPeertubeAPI { | |||||||
|         if (filename == null) { |         if (filename == null) { | ||||||
|             filename = "my_image." + mime; |             filename = "my_image." + mime; | ||||||
|         } |         } | ||||||
|         RequestBody requestFile = RequestBody.create(MediaType.parse("image/" + mime), imageBytes); |         RequestBody requestFile = RequestBody.create(imageBytes, MediaType.parse("image/" + mime)); | ||||||
|         return MultipartBody.Part.createFormData(paramName, filename, requestFile); |         return MultipartBody.Part.createFormData(paramName, filename, requestFile); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -976,7 +976,7 @@ public class RetrofitPeertubeAPI { | |||||||
|                 } |                 } | ||||||
|                 bodyThumbnail = createFile("avatarfile", thumbnail, thumbnailName); |                 bodyThumbnail = createFile("avatarfile", thumbnail, thumbnailName); | ||||||
|             } |             } | ||||||
|             if (previewfile != null) { |             if (previewfile != null && thumbnail != null) { | ||||||
|                 DocumentFile documentFile = DocumentFile.fromSingleUri(_context, thumbnail); |                 DocumentFile documentFile = DocumentFile.fromSingleUri(_context, thumbnail); | ||||||
|                 String previewfileName = null; |                 String previewfileName = null; | ||||||
|                 if (documentFile != null) { |                 if (documentFile != null) { | ||||||
| @@ -987,22 +987,22 @@ public class RetrofitPeertubeAPI { | |||||||
|         } catch (IOException e) { |         } catch (IOException e) { | ||||||
|             e.printStackTrace(); |             e.printStackTrace(); | ||||||
|         } |         } | ||||||
|         RequestBody channelId = RequestBody.create(MediaType.parse("text/plain"), videoParams.getChannelId()); |         RequestBody channelId = RequestBody.create(videoParams.getChannelId(), MediaType.parse("text/plain")); | ||||||
|         RequestBody description = RequestBody.create(MediaType.parse("text/plain"), videoParams.getDescription()); |         RequestBody description = RequestBody.create(videoParams.getDescription(), MediaType.parse("text/plain")); | ||||||
|         RequestBody language = RequestBody.create(MediaType.parse("text/plain"), videoParams.getLanguage()); |         RequestBody language = RequestBody.create(videoParams.getLanguage(), MediaType.parse("text/plain")); | ||||||
|         RequestBody license = RequestBody.create(MediaType.parse("text/plain"), videoParams.getLicence()); |         RequestBody license = RequestBody.create(videoParams.getLicence(), MediaType.parse("text/plain")); | ||||||
|         RequestBody name = RequestBody.create(MediaType.parse("text/plain"), videoParams.getName()); |         RequestBody name = RequestBody.create(videoParams.getName(), MediaType.parse("text/plain")); | ||||||
|  |  | ||||||
|         List<RequestBody> tags = null; |         List<RequestBody> tags = null; | ||||||
|         if (videoParams.getTags() != null && videoParams.getTags().size() > 0) { |         if (videoParams.getTags() != null && videoParams.getTags().size() > 0) { | ||||||
|             tags = new ArrayList<>(); |             tags = new ArrayList<>(); | ||||||
|             for (String tag : videoParams.getTags()) { |             for (String tag : videoParams.getTags()) { | ||||||
|                 tags.add(RequestBody.create(MediaType.parse("text/plain"), tag)); |                 tags.add(RequestBody.create(tag, MediaType.parse("text/plain"))); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         RequestBody support = null; |         RequestBody support = null; | ||||||
|         if (videoParams.getSupport() != null) { |         if (videoParams.getSupport() != null) { | ||||||
|             support = RequestBody.create(MediaType.parse("text/plain"), videoParams.getSupport()); |             support = RequestBody.create(videoParams.getSupport(), MediaType.parse("text/plain")); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -1213,7 +1213,7 @@ public class RetrofitPeertubeAPI { | |||||||
|      * @param channelParams PlaylistParams |      * @param channelParams PlaylistParams | ||||||
|      * @return APIResponse |      * @return APIResponse | ||||||
|      */ |      */ | ||||||
|     public APIResponse createOrUpdateChannel(ChannelsVM.action apiAction, String channelId, ChannelParams channelParams) { |     public APIResponse createOrUpdateChannel(ChannelsVM.action apiAction, String channelId, ChannelParams channelParams, Uri avatar) { | ||||||
|         PeertubeService peertubeService = init(); |         PeertubeService peertubeService = init(); | ||||||
|  |  | ||||||
|         APIResponse apiResponse = new APIResponse(); |         APIResponse apiResponse = new APIResponse(); | ||||||
| @@ -1236,6 +1236,21 @@ public class RetrofitPeertubeAPI { | |||||||
|                     setError(apiResponse, response.code(), response.errorBody()); |                     setError(apiResponse, response.code(), response.errorBody()); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |             if (avatar != null) { | ||||||
|  |                 DocumentFile documentFile = DocumentFile.fromSingleUri(_context, avatar); | ||||||
|  |                 String avatarfileName = null; | ||||||
|  |                 if (documentFile != null) { | ||||||
|  |                     avatarfileName = documentFile.getName(); | ||||||
|  |                 } | ||||||
|  |                 MultipartBody.Part bodyThumbnail = createFile("avatarfile", avatar, avatarfileName); | ||||||
|  |                 Call<UserMe.AvatarResponse> updateProfilePicture = peertubeService.updateChannelProfilePicture(getToken(), channelId, bodyThumbnail); | ||||||
|  |                 Response<UserMe.AvatarResponse> responseAvatar = updateProfilePicture.execute(); | ||||||
|  |                 if (responseAvatar.isSuccessful()) { | ||||||
|  |                     UserMe.AvatarResponse avatarResponse = responseAvatar.body(); | ||||||
|  |                 } else { | ||||||
|  |                     setError(apiResponse, responseAvatar.code(), responseAvatar.errorBody()); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|         } catch (IOException e) { |         } catch (IOException e) { | ||||||
|             Error error = new Error(); |             Error error = new Error(); | ||||||
|             error.setError(_context.getString(R.string.toast_error)); |             error.setError(_context.getString(R.string.toast_error)); | ||||||
| @@ -1365,13 +1380,13 @@ public class RetrofitPeertubeAPI { | |||||||
|         APIResponse apiResponse = new APIResponse(); |         APIResponse apiResponse = new APIResponse(); | ||||||
|         MultipartBody.Part body = null; |         MultipartBody.Part body = null; | ||||||
|         if (thumbnail != null) { |         if (thumbnail != null) { | ||||||
|             RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), thumbnail); |             RequestBody requestFile = RequestBody.create(thumbnail, MediaType.parse("multipart/form-data")); | ||||||
|             body = MultipartBody.Part.createFormData("image", thumbnail.getName(), requestFile); |             body = MultipartBody.Part.createFormData("image", thumbnail.getName(), requestFile); | ||||||
|         } |         } | ||||||
|         try { |         try { | ||||||
|             RequestBody displayName = RequestBody.create(MediaType.parse("text/plain"), playlistParams.getDisplayName()); |             RequestBody displayName = RequestBody.create(playlistParams.getDisplayName(), MediaType.parse("text/plain")); | ||||||
|             RequestBody description = RequestBody.create(MediaType.parse("text/plain"), playlistParams.getDescription()); |             RequestBody description = RequestBody.create(playlistParams.getDescription(), MediaType.parse("text/plain")); | ||||||
|             RequestBody channelId = RequestBody.create(MediaType.parse("text/plain"), playlistParams.getVideoChannelId()); |             RequestBody channelId = RequestBody.create(playlistParams.getVideoChannelId(), MediaType.parse("text/plain")); | ||||||
|             if (apiAction == PlaylistsVM.action.CREATE_PLAYLIST) { |             if (apiAction == PlaylistsVM.action.CREATE_PLAYLIST) { | ||||||
|                 Call<VideoPlaylistData.VideoPlaylistCreation> stringCall = peertubeService.addPlaylist(getToken(), displayName, description, playlistParams.getPrivacy(), channelId, body); |                 Call<VideoPlaylistData.VideoPlaylistCreation> stringCall = peertubeService.addPlaylist(getToken(), displayName, description, playlistParams.getPrivacy(), channelId, body); | ||||||
|                 Response<VideoPlaylistData.VideoPlaylistCreation> response = stringCall.execute(); |                 Response<VideoPlaylistData.VideoPlaylistCreation> response = stringCall.execute(); | ||||||
|   | |||||||
| @@ -14,8 +14,12 @@ package app.fedilab.fedilabtube.fragment; | |||||||
|  * You should have received a copy of the GNU General Public License along with TubeLab; if not, |  * You should have received a copy of the GNU General Public License along with TubeLab; if not, | ||||||
|  * see <http://www.gnu.org/licenses>. */ |  * see <http://www.gnu.org/licenses>. */ | ||||||
|  |  | ||||||
|  | import android.Manifest; | ||||||
| import android.app.Activity; | import android.app.Activity; | ||||||
| import android.content.Context; | import android.content.Context; | ||||||
|  | import android.content.Intent; | ||||||
|  | import android.content.pm.PackageManager; | ||||||
|  | import android.net.Uri; | ||||||
| import android.os.Bundle; | import android.os.Bundle; | ||||||
| import android.os.Handler; | import android.os.Handler; | ||||||
| import android.os.Looper; | import android.os.Looper; | ||||||
| @@ -25,20 +29,22 @@ import android.view.ViewGroup; | |||||||
| import android.view.WindowManager; | import android.view.WindowManager; | ||||||
| import android.view.inputmethod.InputMethodManager; | import android.view.inputmethod.InputMethodManager; | ||||||
| import android.widget.Button; | import android.widget.Button; | ||||||
| import android.widget.EditText; |  | ||||||
| import android.widget.LinearLayout; |  | ||||||
| import android.widget.RelativeLayout; | import android.widget.RelativeLayout; | ||||||
| import android.widget.Toast; | import android.widget.Toast; | ||||||
|  |  | ||||||
| import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||||
| import androidx.appcompat.app.AlertDialog; | import androidx.appcompat.app.AlertDialog; | ||||||
|  | import androidx.core.app.ActivityCompat; | ||||||
|  | import androidx.core.content.ContextCompat; | ||||||
| import androidx.fragment.app.Fragment; | import androidx.fragment.app.Fragment; | ||||||
| import androidx.lifecycle.ViewModelProvider; | import androidx.lifecycle.ViewModelProvider; | ||||||
| import androidx.recyclerview.widget.DividerItemDecoration; | import androidx.recyclerview.widget.DividerItemDecoration; | ||||||
| import androidx.recyclerview.widget.LinearLayoutManager; | import androidx.recyclerview.widget.LinearLayoutManager; | ||||||
| import androidx.recyclerview.widget.RecyclerView; |  | ||||||
| import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; |  | ||||||
|  |  | ||||||
|  | import com.bumptech.glide.Glide; | ||||||
|  | import com.bumptech.glide.load.resource.bitmap.CenterCrop; | ||||||
|  | import com.bumptech.glide.load.resource.bitmap.RoundedCorners; | ||||||
|  | import com.bumptech.glide.request.RequestOptions; | ||||||
| import com.google.android.material.floatingactionbutton.FloatingActionButton; | import com.google.android.material.floatingactionbutton.FloatingActionButton; | ||||||
|  |  | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
| @@ -49,30 +55,37 @@ import app.fedilab.fedilabtube.client.APIResponse; | |||||||
| import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI; | import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI; | ||||||
| import app.fedilab.fedilabtube.client.data.ChannelData; | import app.fedilab.fedilabtube.client.data.ChannelData; | ||||||
| import app.fedilab.fedilabtube.client.entities.ChannelParams; | import app.fedilab.fedilabtube.client.entities.ChannelParams; | ||||||
|  | import app.fedilab.fedilabtube.databinding.AddChannelBinding; | ||||||
|  | import app.fedilab.fedilabtube.databinding.FragmentRecyclerviewBinding; | ||||||
| import app.fedilab.fedilabtube.drawer.ChannelListAdapter; | import app.fedilab.fedilabtube.drawer.ChannelListAdapter; | ||||||
| import app.fedilab.fedilabtube.helper.Helper; | import app.fedilab.fedilabtube.helper.Helper; | ||||||
| import app.fedilab.fedilabtube.viewmodel.ChannelsVM; | import app.fedilab.fedilabtube.viewmodel.ChannelsVM; | ||||||
| import es.dmoral.toasty.Toasty; | import es.dmoral.toasty.Toasty; | ||||||
|  |  | ||||||
|  | import static app.fedilab.fedilabtube.PeertubeUploadActivity.MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE; | ||||||
|  |  | ||||||
|  |  | ||||||
| public class DisplayChannelsFragment extends Fragment implements ChannelListAdapter.AllChannelRemoved, ChannelListAdapter.EditAlertDialog { | public class DisplayChannelsFragment extends Fragment implements ChannelListAdapter.AllChannelRemoved, ChannelListAdapter.EditAlertDialog { | ||||||
|  |  | ||||||
|     private Context context; |     private Context context; | ||||||
|  |     private static final int PICK_AVATAR = 467; | ||||||
|     private ChannelListAdapter channelListAdapter; |     private ChannelListAdapter channelListAdapter; | ||||||
|     private List<ChannelData.Channel> channels; |     private List<ChannelData.Channel> channels; | ||||||
|     private RelativeLayout mainLoader, nextElementLoader, textviewNoAction; |     private RelativeLayout mainLoader, nextElementLoader, textviewNoAction; | ||||||
|     private SwipeRefreshLayout swipeRefreshLayout; |  | ||||||
|     private String name; |     private String name; | ||||||
|     private RecyclerView lv_channels; |  | ||||||
|     private View rootView; |     private View rootView; | ||||||
|     private FloatingActionButton action_button; |  | ||||||
|     private boolean myChannels; |     private boolean myChannels; | ||||||
|  |     private FloatingActionButton action_button; | ||||||
|  |     private FragmentRecyclerviewBinding binding; | ||||||
|  |     private AddChannelBinding bindingDialog; | ||||||
|  |     private Uri inputData; | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { |     public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { | ||||||
|  |  | ||||||
|         rootView = inflater.inflate(R.layout.fragment_recyclerview, container, false); |  | ||||||
|  |  | ||||||
|  |         binding = FragmentRecyclerviewBinding.inflate(LayoutInflater.from(context)); | ||||||
|  |         rootView = binding.getRoot(); | ||||||
|         context = getContext(); |         context = getContext(); | ||||||
|         Bundle bundle = this.getArguments(); |         Bundle bundle = this.getArguments(); | ||||||
|         channels = new ArrayList<>(); |         channels = new ArrayList<>(); | ||||||
| @@ -83,7 +96,6 @@ public class DisplayChannelsFragment extends Fragment implements ChannelListAdap | |||||||
|         } |         } | ||||||
|  |  | ||||||
|  |  | ||||||
|         swipeRefreshLayout = rootView.findViewById(R.id.swipeContainer); |  | ||||||
|  |  | ||||||
|         if (getActivity() != null) { |         if (getActivity() != null) { | ||||||
|             action_button = getActivity().findViewById(R.id.action_button); |             action_button = getActivity().findViewById(R.id.action_button); | ||||||
| @@ -93,8 +105,7 @@ public class DisplayChannelsFragment extends Fragment implements ChannelListAdap | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         lv_channels = rootView.findViewById(R.id.lv_elements); |         binding.lvElements.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); | ||||||
|         lv_channels.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); |  | ||||||
|         mainLoader = rootView.findViewById(R.id.loader); |         mainLoader = rootView.findViewById(R.id.loader); | ||||||
|         nextElementLoader = rootView.findViewById(R.id.loading_next); |         nextElementLoader = rootView.findViewById(R.id.loading_next); | ||||||
|         textviewNoAction = rootView.findViewById(R.id.no_action); |         textviewNoAction = rootView.findViewById(R.id.no_action); | ||||||
| @@ -103,13 +114,13 @@ public class DisplayChannelsFragment extends Fragment implements ChannelListAdap | |||||||
|         channelListAdapter = new ChannelListAdapter(this.channels, myChannels); |         channelListAdapter = new ChannelListAdapter(this.channels, myChannels); | ||||||
|         channelListAdapter.allChannelRemoved = this; |         channelListAdapter.allChannelRemoved = this; | ||||||
|         channelListAdapter.editAlertDialog = this; |         channelListAdapter.editAlertDialog = this; | ||||||
|         lv_channels.setAdapter(channelListAdapter); |         binding.lvElements.setAdapter(channelListAdapter); | ||||||
|  |  | ||||||
|         final LinearLayoutManager mLayoutManager; |         final LinearLayoutManager mLayoutManager; | ||||||
|         mLayoutManager = new LinearLayoutManager(context); |         mLayoutManager = new LinearLayoutManager(context); | ||||||
|         lv_channels.setLayoutManager(mLayoutManager); |         binding.lvElements.setLayoutManager(mLayoutManager); | ||||||
|  |  | ||||||
|         swipeRefreshLayout.setOnRefreshListener(this::pullToRefresh); |         binding.swipeContainer.setOnRefreshListener(this::pullToRefresh); | ||||||
|         ChannelsVM viewModel = new ViewModelProvider(this).get(ChannelsVM.class); |         ChannelsVM viewModel = new ViewModelProvider(this).get(ChannelsVM.class); | ||||||
|         if (name != null) { |         if (name != null) { | ||||||
|             viewModel.get(RetrofitPeertubeAPI.DataType.CHANNELS_FOR_ACCOUNT, name).observe(DisplayChannelsFragment.this.requireActivity(), this::manageViewChannels); |             viewModel.get(RetrofitPeertubeAPI.DataType.CHANNELS_FOR_ACCOUNT, name).observe(DisplayChannelsFragment.this.requireActivity(), this::manageViewChannels); | ||||||
| @@ -119,6 +130,25 @@ public class DisplayChannelsFragment extends Fragment implements ChannelListAdap | |||||||
|         return rootView; |         return rootView; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void onActivityResult(int requestCode, int resultCode, Intent data) { | ||||||
|  |         super.onActivityResult(requestCode, resultCode, data); | ||||||
|  |         if (requestCode == PICK_AVATAR && resultCode == Activity.RESULT_OK) { | ||||||
|  |             if (data == null || data.getData() == null) { | ||||||
|  |                 Toasty.error(context, getString(R.string.toot_select_image_error), Toast.LENGTH_LONG).show(); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |             inputData = data.getData(); | ||||||
|  |             Glide.with(context) | ||||||
|  |                     .load(inputData) | ||||||
|  |                     .thumbnail(0.1f) | ||||||
|  |                     .apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(10))) | ||||||
|  |                     .into(bindingDialog.profilePicture); | ||||||
|  |  | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public void onResume() { |     public void onResume() { | ||||||
|         super.onResume(); |         super.onResume(); | ||||||
| @@ -153,8 +183,7 @@ public class DisplayChannelsFragment extends Fragment implements ChannelListAdap | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void scrollToTop() { |     public void scrollToTop() { | ||||||
|         if (lv_channels != null) |         binding.lvElements.setAdapter(channelListAdapter); | ||||||
|             lv_channels.setAdapter(channelListAdapter); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void manageViewChannels(APIResponse apiResponse) { |     private void manageViewChannels(APIResponse apiResponse) { | ||||||
| @@ -162,7 +191,7 @@ public class DisplayChannelsFragment extends Fragment implements ChannelListAdap | |||||||
|         nextElementLoader.setVisibility(View.GONE); |         nextElementLoader.setVisibility(View.GONE); | ||||||
|         if (apiResponse.getError() != null) { |         if (apiResponse.getError() != null) { | ||||||
|             Toasty.error(context, apiResponse.getError().getError(), Toast.LENGTH_LONG).show(); |             Toasty.error(context, apiResponse.getError().getError(), Toast.LENGTH_LONG).show(); | ||||||
|             swipeRefreshLayout.setRefreshing(false); |             binding.swipeContainer.setRefreshing(false); | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         List<ChannelData.Channel> channels = apiResponse.getChannels(); |         List<ChannelData.Channel> channels = apiResponse.getChannels(); | ||||||
| @@ -178,18 +207,18 @@ public class DisplayChannelsFragment extends Fragment implements ChannelListAdap | |||||||
|                 channelListAdapter = new ChannelListAdapter(this.channels, myChannels); |                 channelListAdapter = new ChannelListAdapter(this.channels, myChannels); | ||||||
|                 channelListAdapter.allChannelRemoved = DisplayChannelsFragment.this; |                 channelListAdapter.allChannelRemoved = DisplayChannelsFragment.this; | ||||||
|                 channelListAdapter.editAlertDialog = DisplayChannelsFragment.this; |                 channelListAdapter.editAlertDialog = DisplayChannelsFragment.this; | ||||||
|                 lv_channels.setAdapter(channelListAdapter); |                 binding.lvElements.setAdapter(channelListAdapter); | ||||||
|             } else { |             } else { | ||||||
|                 channelListAdapter.notifyItemRangeChanged(currentPosition, channels.size()); |                 channelListAdapter.notifyItemRangeChanged(currentPosition, channels.size()); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         swipeRefreshLayout.setRefreshing(false); |         binding.swipeContainer.setRefreshing(false); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void pullToRefresh() { |     public void pullToRefresh() { | ||||||
|         channels = new ArrayList<>(); |         channels = new ArrayList<>(); | ||||||
|  |  | ||||||
|         swipeRefreshLayout.setRefreshing(true); |         binding.swipeContainer.setRefreshing(true); | ||||||
|         ChannelsVM viewModel = new ViewModelProvider(this).get(ChannelsVM.class); |         ChannelsVM viewModel = new ViewModelProvider(this).get(ChannelsVM.class); | ||||||
|         if (name != null) { |         if (name != null) { | ||||||
|             viewModel.get(RetrofitPeertubeAPI.DataType.CHANNELS_FOR_ACCOUNT, name).observe(DisplayChannelsFragment.this.requireActivity(), this::manageViewChannels); |             viewModel.get(RetrofitPeertubeAPI.DataType.CHANNELS_FOR_ACCOUNT, name).observe(DisplayChannelsFragment.this.requireActivity(), this::manageViewChannels); | ||||||
| @@ -206,48 +235,82 @@ public class DisplayChannelsFragment extends Fragment implements ChannelListAdap | |||||||
|  |  | ||||||
|     public void manageAlert(ChannelParams oldChannelValues) { |     public void manageAlert(ChannelParams oldChannelValues) { | ||||||
|  |  | ||||||
|  |  | ||||||
|         AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context); |         AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context); | ||||||
|         LayoutInflater inflater1 = ((Activity) context).getLayoutInflater(); |         bindingDialog = AddChannelBinding.inflate(LayoutInflater.from(context), null, false); | ||||||
|         View dialogView = inflater1.inflate(R.layout.add_channel, new LinearLayout(context), false); |         dialogBuilder.setView(bindingDialog.getRoot()); | ||||||
|         dialogBuilder.setView(dialogView); |  | ||||||
|         EditText display_name = dialogView.findViewById(R.id.display_name); |  | ||||||
|         EditText name = dialogView.findViewById(R.id.name); |  | ||||||
|         EditText description = dialogView.findViewById(R.id.description); |  | ||||||
|         if (oldChannelValues != null) { |         if (oldChannelValues != null) { | ||||||
|             display_name.setText(oldChannelValues.getDisplayName()); |             bindingDialog.displayName.setText(oldChannelValues.getDisplayName()); | ||||||
|             name.setText(oldChannelValues.getName()); |             bindingDialog.name.setText(oldChannelValues.getName()); | ||||||
|             description.setText(oldChannelValues.getDescription()); |             bindingDialog.description.setText(oldChannelValues.getDescription()); | ||||||
|             name.setEnabled(false); |             bindingDialog.name.setEnabled(false); | ||||||
|         } |         } | ||||||
|         dialogBuilder.setPositiveButton(R.string.validate, null); |         dialogBuilder.setPositiveButton(R.string.validate, null); | ||||||
|         dialogBuilder.setNegativeButton(R.string.cancel, (dialog, id) -> dialog.dismiss()); |         dialogBuilder.setNegativeButton(R.string.cancel, (dialog, id) -> dialog.dismiss()); | ||||||
|  |  | ||||||
|         AlertDialog alertDialog = dialogBuilder.create(); |         AlertDialog alertDialog = dialogBuilder.create(); | ||||||
|  |         int position; | ||||||
|  |         if (oldChannelValues == null) { | ||||||
|  |             position = -1; | ||||||
|  |         } else { | ||||||
|  |             position = 0; | ||||||
|  |             for (ChannelData.Channel channel : channels) { | ||||||
|  |                 if (channel.getName().compareTo(oldChannelValues.getName()) == 0) { | ||||||
|  |                     break; | ||||||
|  |                 } | ||||||
|  |                 position++; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         bindingDialog.selectFile.setOnClickListener(v -> { | ||||||
|  |             if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != | ||||||
|  |                     PackageManager.PERMISSION_GRANTED) { | ||||||
|  |                 ActivityCompat.requestPermissions((Activity) context, | ||||||
|  |                         new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, | ||||||
|  |                         MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             Intent intent = new Intent(Intent.ACTION_GET_CONTENT); | ||||||
|  |             intent.addCategory(Intent.CATEGORY_OPENABLE); | ||||||
|  |             intent.setType("*/*"); | ||||||
|  |             String[] mimetypes = {"image/*"}; | ||||||
|  |             intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes); | ||||||
|  |             startActivityForResult(intent, PICK_AVATAR); | ||||||
|  |         }); | ||||||
|  |         if (position >= 0) { | ||||||
|  |             Helper.loadGiF(context, channels.get(position).getAvatar() != null ? channels.get(position).getAvatar().getPath() : null, bindingDialog.profilePicture); | ||||||
|  |         } else { | ||||||
|  |             Glide.with(context) | ||||||
|  |                     .load(R.drawable.missing_peertube) | ||||||
|  |                     .thumbnail(0.1f) | ||||||
|  |                     .apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(10))) | ||||||
|  |                     .into(bindingDialog.profilePicture); | ||||||
|  |         } | ||||||
|  |         int finalPosition = position; | ||||||
|         alertDialog.setOnShowListener(dialogInterface -> { |         alertDialog.setOnShowListener(dialogInterface -> { | ||||||
|  |  | ||||||
|             Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); |             Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); | ||||||
|             button.setOnClickListener(view -> { |             button.setOnClickListener(view -> { | ||||||
|                 if (display_name.getText() != null && display_name.getText().toString().trim().length() > 0 && name.getText() != null && name.getText().toString().trim().length() > 0) { |                 if (bindingDialog.displayName.getText() != null && bindingDialog.displayName.getText().toString().trim().length() > 0 && bindingDialog.name.getText() != null && bindingDialog.name.getText().toString().trim().length() > 0) { | ||||||
|  |  | ||||||
|                     ChannelParams channelCreation = new ChannelParams(); |                     ChannelParams channelCreation = new ChannelParams(); | ||||||
|                     channelCreation.setDisplayName(display_name.getText().toString().trim()); |                     channelCreation.setDisplayName(bindingDialog.displayName.getText().toString().trim()); | ||||||
|                     channelCreation.setName(name.getText().toString().trim()); |                     channelCreation.setName(bindingDialog.name.getText().toString().trim()); | ||||||
|                     if (description.getText() != null && description.getText().toString().trim().length() > 0) { |                     if (bindingDialog.description.getText() != null && bindingDialog.description.getText().toString().trim().length() > 0) { | ||||||
|                         channelCreation.setDescription(description.getText().toString().trim()); |                         channelCreation.setDescription(bindingDialog.description.getText().toString().trim()); | ||||||
|                     } |                     } | ||||||
|                     new Thread(() -> { |                     new Thread(() -> { | ||||||
|                         APIResponse apiResponse; |                         APIResponse apiResponse; | ||||||
|                         if (oldChannelValues == null) { |                         if (oldChannelValues == null) { | ||||||
|                             apiResponse = new RetrofitPeertubeAPI(context).createOrUpdateChannel(ChannelsVM.action.CREATE_CHANNEL, null, channelCreation); |                             apiResponse = new RetrofitPeertubeAPI(context).createOrUpdateChannel(ChannelsVM.action.CREATE_CHANNEL, null, channelCreation, inputData); | ||||||
|                         } else { |                         } else { | ||||||
|                             apiResponse = new RetrofitPeertubeAPI(context).createOrUpdateChannel(ChannelsVM.action.UPDATE_CHANNEL, channelCreation.getName() + "@" + Helper.getLiveInstance(context), channelCreation); |                             apiResponse = new RetrofitPeertubeAPI(context).createOrUpdateChannel(ChannelsVM.action.UPDATE_CHANNEL, channelCreation.getName() + "@" + Helper.getLiveInstance(context), channelCreation, inputData); | ||||||
|                         } |                         } | ||||||
|                         Handler mainHandler = new Handler(Looper.getMainLooper()); |                         Handler mainHandler = new Handler(Looper.getMainLooper()); | ||||||
|                         Runnable myRunnable = () -> { |                         Runnable myRunnable = () -> { | ||||||
|  |  | ||||||
|                             if (getActivity() == null) |  | ||||||
|                                 return; |  | ||||||
|                             if (oldChannelValues == null) { |                             if (oldChannelValues == null) { | ||||||
|                                 ChannelData.Channel channel = new ChannelData.Channel(); |                                 ChannelData.Channel channel = new ChannelData.Channel(); | ||||||
|                                 channel.setId(apiResponse.getActionReturn()); |                                 channel.setId(apiResponse.getActionReturn()); | ||||||
| @@ -257,16 +320,10 @@ public class DisplayChannelsFragment extends Fragment implements ChannelListAdap | |||||||
|                                 channels.add(0, channel); |                                 channels.add(0, channel); | ||||||
|                                 channelListAdapter.notifyItemInserted(0); |                                 channelListAdapter.notifyItemInserted(0); | ||||||
|                             } else { |                             } else { | ||||||
|                                 int position = 0; |                                 channels.get(finalPosition).setName(channelCreation.getName()); | ||||||
|                                 for (ChannelData.Channel channel : channels) { |                                 channels.get(finalPosition).setDisplayName(channelCreation.getDisplayName()); | ||||||
|                                     if (channel.getName().compareTo(oldChannelValues.getName()) == 0) { |                                 channels.get(finalPosition).setDescription(channelCreation.getDescription()); | ||||||
|                                         channel.setDescription(channelCreation.getDescription()); |                                 channelListAdapter.notifyItemChanged(finalPosition); | ||||||
|                                         channel.setDisplayName(channelCreation.getDisplayName()); |  | ||||||
|                                         break; |  | ||||||
|                                     } |  | ||||||
|                                     position++; |  | ||||||
|                                 } |  | ||||||
|                                 channelListAdapter.notifyItemChanged(position); |  | ||||||
|                             } |                             } | ||||||
|                             if (action_button != null) { |                             if (action_button != null) { | ||||||
|                                 action_button.setEnabled(true); |                                 action_button.setEnabled(true); | ||||||
| @@ -292,7 +349,7 @@ public class DisplayChannelsFragment extends Fragment implements ChannelListAdap | |||||||
|             //Hide keyboard |             //Hide keyboard | ||||||
|             InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); |             InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); | ||||||
|             assert imm != null; |             assert imm != null; | ||||||
|             imm.hideSoftInputFromWindow(display_name.getWindowToken(), 0); |             imm.hideSoftInputFromWindow(bindingDialog.displayName.getWindowToken(), 0); | ||||||
|         }); |         }); | ||||||
|         if (alertDialog.getWindow() != null) |         if (alertDialog.getWindow() != null) | ||||||
|             alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); |             alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); | ||||||
|   | |||||||
| @@ -24,6 +24,30 @@ | |||||||
|         android:orientation="vertical" |         android:orientation="vertical" | ||||||
|         android:padding="15dp"> |         android:padding="15dp"> | ||||||
|  |  | ||||||
|  |         <LinearLayout | ||||||
|  |             android:layout_width="match_parent" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:orientation="horizontal"> | ||||||
|  |  | ||||||
|  |             <ImageView | ||||||
|  |                 android:id="@+id/profile_picture" | ||||||
|  |                 android:layout_width="80dp" | ||||||
|  |                 android:layout_height="80dp" | ||||||
|  |                 android:layout_marginStart="20dp" | ||||||
|  |                 android:contentDescription="@string/profile_picture" /> | ||||||
|  |  | ||||||
|  |             <Button | ||||||
|  |                 android:id="@+id/select_file" | ||||||
|  |                 style="@style/Widget.AppCompat.Button.Borderless" | ||||||
|  |                 android:layout_width="wrap_content" | ||||||
|  |                 android:layout_height="wrap_content" | ||||||
|  |                 android:layout_gravity="center_vertical" | ||||||
|  |                 android:layout_marginStart="10dp" | ||||||
|  |                 android:singleLine="true" | ||||||
|  |                 android:text="@string/change_profile_picture" | ||||||
|  |                 android:textColor="?attr/colorAccent" /> | ||||||
|  |         </LinearLayout> | ||||||
|  |  | ||||||
|         <TextView |         <TextView | ||||||
|             android:layout_width="match_parent" |             android:layout_width="match_parent" | ||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
| @@ -71,6 +95,8 @@ | |||||||
|             android:importantForAutofill="no" |             android:importantForAutofill="no" | ||||||
|             android:inputType="text" |             android:inputType="text" | ||||||
|             android:maxLines="5" /> |             android:maxLines="5" /> | ||||||
|  |  | ||||||
|  |  | ||||||
|     </LinearLayout> |     </LinearLayout> | ||||||
| </ScrollView> | </ScrollView> | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user