kopia lustrzana https://github.com/ryukoposting/Signal-Android
89 wiersze
3.6 KiB
Java
89 wiersze
3.6 KiB
Java
package org.thoughtcrime.securesms.wallpaper;
|
|
|
|
import android.Manifest;
|
|
import android.app.Activity;
|
|
import android.content.Intent;
|
|
import android.os.Bundle;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.widget.Toast;
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.appcompat.widget.Toolbar;
|
|
import androidx.fragment.app.Fragment;
|
|
import androidx.lifecycle.ViewModelProvider;
|
|
import androidx.navigation.Navigation;
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
|
|
import org.thoughtcrime.securesms.R;
|
|
import org.thoughtcrime.securesms.permissions.Permissions;
|
|
import org.thoughtcrime.securesms.wallpaper.crop.WallpaperImageSelectionActivity;
|
|
|
|
public class ChatWallpaperSelectionFragment extends Fragment {
|
|
|
|
private static final short CHOOSE_WALLPAPER = 1;
|
|
|
|
private ChatWallpaperViewModel viewModel;
|
|
|
|
@Override
|
|
public @Nullable View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
|
return inflater.inflate(R.layout.chat_wallpaper_selection_fragment, container, false);
|
|
}
|
|
|
|
@Override
|
|
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
|
Toolbar toolbar = view.findViewById(R.id.toolbar);
|
|
View chooseFromPhotos = view.findViewById(R.id.chat_wallpaper_choose_from_photos);
|
|
RecyclerView recyclerView = view.findViewById(R.id.chat_wallpaper_recycler);
|
|
|
|
chooseFromPhotos.setOnClickListener(unused -> {
|
|
askForPermissionIfNeededAndLaunchPhotoSelection();
|
|
});
|
|
|
|
toolbar.setTitle(R.string.preferences__chat_color_and_wallpaper);
|
|
toolbar.setNavigationOnClickListener(nav -> Navigation.findNavController(nav).popBackStack());
|
|
|
|
@SuppressWarnings("CodeBlock2Expr")
|
|
ChatWallpaperSelectionAdapter adapter = new ChatWallpaperSelectionAdapter(chatWallpaper -> {
|
|
startActivityForResult(ChatWallpaperPreviewActivity.create(requireActivity(), chatWallpaper, viewModel.getRecipientId(), viewModel.getDimInDarkTheme().getValue()), CHOOSE_WALLPAPER);
|
|
});
|
|
|
|
recyclerView.setAdapter(adapter);
|
|
|
|
viewModel = new ViewModelProvider(requireActivity()).get(ChatWallpaperViewModel.class);
|
|
viewModel.getWallpapers().observe(getViewLifecycleOwner(), adapter::submitList);
|
|
}
|
|
|
|
@Override
|
|
public void onResume() {
|
|
super.onResume();
|
|
viewModel.refreshWallpaper();
|
|
}
|
|
|
|
@Override
|
|
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
|
if (requestCode == CHOOSE_WALLPAPER && resultCode == Activity.RESULT_OK && data != null) {
|
|
ChatWallpaper chatWallpaper = data.getParcelableExtra(ChatWallpaperPreviewActivity.EXTRA_CHAT_WALLPAPER);
|
|
viewModel.setWallpaper(chatWallpaper);
|
|
viewModel.saveWallpaperSelection();
|
|
Navigation.findNavController(requireView()).popBackStack();
|
|
} else {
|
|
super.onActivityResult(requestCode, resultCode, data);
|
|
}
|
|
}
|
|
|
|
private void askForPermissionIfNeededAndLaunchPhotoSelection() {
|
|
Permissions.with(this)
|
|
.request(Manifest.permission.READ_EXTERNAL_STORAGE)
|
|
.ifNecessary()
|
|
.onAllGranted(() -> {
|
|
startActivityForResult(WallpaperImageSelectionActivity.getIntent(requireContext(), viewModel.getRecipientId()), CHOOSE_WALLPAPER);
|
|
})
|
|
.onAnyDenied(() -> Toast.makeText(requireContext(), R.string.ChatWallpaperPreviewActivity__viewing_your_gallery_requires_the_storage_permission, Toast.LENGTH_SHORT)
|
|
.show())
|
|
.execute();
|
|
}
|
|
}
|