diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 45a825d1..07a2a763 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -86,6 +86,9 @@ android:name=".activities.ScheduledActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:label="@string/scheduled" /> + 0) { + for (Attachment attachment : status.media_attachments) { + if (attachment.local_path.equalsIgnoreCase(imgpath)) { + composeAdapter.notifyItemChanged(position); + break; + } + } + } + position++; + } + } + } + }; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -272,6 +297,17 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana } MastodonHelper.loadPPMastodon(binding.profilePicture, account.mastodon_account); + LocalBroadcastManager.getInstance(this) + .registerReceiver(imageReceiver, + new IntentFilter(Helper.INTENT_SEND_MODIFIED_IMAGE)); + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + LocalBroadcastManager.getInstance(this) + .unregisterReceiver(imageReceiver); } @Override diff --git a/app/src/main/java/app/fedilab/android/imageeditor/EditImageActivity.java b/app/src/main/java/app/fedilab/android/imageeditor/EditImageActivity.java index cc02bb14..a4cffadd 100644 --- a/app/src/main/java/app/fedilab/android/imageeditor/EditImageActivity.java +++ b/app/src/main/java/app/fedilab/android/imageeditor/EditImageActivity.java @@ -1,34 +1,27 @@ package app.fedilab.android.imageeditor; -import static android.content.pm.PackageManager.PERMISSION_GRANTED; -import static app.fedilab.android.imageeditor.FileSaveHelper.isSdkHigherThan28; import android.Manifest; -import android.annotation.SuppressLint; import android.content.Intent; +import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.Typeface; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; +import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.animation.AnticipateOvershootInterpolator; -import android.widget.Button; -import android.widget.ImageView; -import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.VisibleForTesting; import androidx.appcompat.app.AlertDialog; -import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintSet; +import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; -import androidx.core.content.FileProvider; import androidx.exifinterface.media.ExifInterface; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import androidx.transition.ChangeBounds; import androidx.transition.TransitionManager; @@ -40,6 +33,8 @@ import java.io.IOException; import java.io.InputStream; import app.fedilab.android.R; +import app.fedilab.android.databinding.ActivityEditImageBinding; +import app.fedilab.android.helper.Helper; import app.fedilab.android.imageeditor.base.BaseActivity; import app.fedilab.android.imageeditor.filters.FilterListener; import app.fedilab.android.imageeditor.filters.FilterViewAdapter; @@ -48,7 +43,6 @@ import app.fedilab.android.imageeditor.tools.ToolType; import es.dmoral.toasty.Toasty; import ja.burhanrashid52.photoeditor.OnPhotoEditorListener; import ja.burhanrashid52.photoeditor.PhotoEditor; -import ja.burhanrashid52.photoeditor.PhotoEditorView; import ja.burhanrashid52.photoeditor.PhotoFilter; import ja.burhanrashid52.photoeditor.SaveSettings; import ja.burhanrashid52.photoeditor.TextStyleBuilder; @@ -60,35 +54,23 @@ public class EditImageActivity extends BaseActivity implements OnPhotoEditorList View.OnClickListener, PropertiesBSFragment.Properties, ShapeBSFragment.Properties, - EmojiBSFragment.EmojiListener, - StickerBSFragment.StickerListener, EditingToolsAdapter.OnItemSelected, FilterListener { + EmojiBSFragment.EmojiListener, EditingToolsAdapter.OnItemSelected, FilterListener { - public static final String FILE_PROVIDER_AUTHORITY = "com.burhanrashid52.photoeditor.fileprovider"; - public static final String ACTION_NEXTGEN_EDIT = "action_nextgen_edit"; - public static final String PINCH_TEXT_SCALABLE_INTENT_KEY = "PINCH_TEXT_SCALABLE"; private static final int CAMERA_REQUEST = 52; private static final int PICK_REQUEST = 53; + private final int STORE_REQUEST = 54; + private final EditingToolsAdapter mEditingToolsAdapter = new EditingToolsAdapter(this); private final FilterViewAdapter mFilterViewAdapter = new FilterViewAdapter(this); private final ConstraintSet mConstraintSet = new ConstraintSet(); PhotoEditor mPhotoEditor; - @Nullable - @VisibleForTesting - Uri mSaveImageUri; - private PhotoEditorView mPhotoEditorView; private PropertiesBSFragment mPropertiesBSFragment; private ShapeBSFragment mShapeBSFragment; private ShapeBuilder mShapeBuilder; private EmojiBSFragment mEmojiBSFragment; - private StickerBSFragment mStickerBSFragment; - private TextView mTxtCurrentTool; - private Typeface mWonderFont; - private RecyclerView mRvTools, mRvFilters; - private ConstraintLayout mRootView; private boolean mIsFilterVisible; private Uri uri; private boolean exit; - private FileSaveHelper mSaveFileHelper; private static int exifToDegrees(int exifOrientation) { if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_90) { @@ -101,59 +83,47 @@ public class EditImageActivity extends BaseActivity implements OnPhotoEditorList return 0; } + String path; + private ActivityEditImageBinding binding; + @Override protected void onCreate(Bundle savedInstanceState) { - makeFullScreen(); super.onCreate(savedInstanceState); - setContentView(R.layout.activity_edit_image); + binding = ActivityEditImageBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); Bundle b = getIntent().getExtras(); if (getSupportActionBar() != null) getSupportActionBar().hide(); - String path = null; + if (b != null) path = b.getString("imageUri", null); + if (path == null) { finish(); } - uri = Uri.parse(path); - - + uri = Uri.parse("file://" + path); exit = false; - - initViews(); - - handleIntentImage(mPhotoEditorView.getSource()); - - mWonderFont = Typeface.createFromAsset(getAssets(), "beyond_wonderland.ttf"); - mPropertiesBSFragment = new PropertiesBSFragment(); mEmojiBSFragment = new EmojiBSFragment(); - mStickerBSFragment = new StickerBSFragment(); mShapeBSFragment = new ShapeBSFragment(); - mStickerBSFragment.setStickerListener(this); mEmojiBSFragment.setEmojiListener(this); mPropertiesBSFragment.setPropertiesChangeListener(this); mShapeBSFragment.setPropertiesChangeListener(this); LinearLayoutManager llmTools = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false); - mRvTools.setLayoutManager(llmTools); - mRvTools.setAdapter(mEditingToolsAdapter); + binding.rvConstraintTools.setLayoutManager(llmTools); + binding.rvConstraintTools.setAdapter(mEditingToolsAdapter); LinearLayoutManager llmFilters = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false); - mRvFilters.setLayoutManager(llmFilters); - mRvFilters.setAdapter(mFilterViewAdapter); - - // NOTE(lucianocheng): Used to set integration testing parameters to PhotoEditor - boolean pinchTextScalable = getIntent().getBooleanExtra(PINCH_TEXT_SCALABLE_INTENT_KEY, true); + binding.rvFilterView.setLayoutManager(llmFilters); + binding.rvFilterView.setAdapter(mFilterViewAdapter); //Typeface mTextRobotoTf = ResourcesCompat.getFont(this, R.font.roboto_medium); //Typeface mEmojiTypeFace = Typeface.createFromAsset(getAssets(), "emojione-android.ttf"); Typeface mEmojiTypeFace = Typeface.createFromAsset(getAssets(), "emojione-android.ttf"); - mPhotoEditor = new PhotoEditor.Builder(this, mPhotoEditorView) - .setPinchTextScalable(pinchTextScalable) // set flag to make text scalable when pinch - //.setDefaultTextTypeface(mTextRobotoTf) + mPhotoEditor = new PhotoEditor.Builder(this, binding.photoEditorView) .setPinchTextScalable(true) .setDefaultEmojiTypeface(mEmojiTypeFace) .build(); // build photo editor sdk @@ -163,93 +133,46 @@ public class EditImageActivity extends BaseActivity implements OnPhotoEditorList //Set Image Dynamically try { - mPhotoEditorView.getSource().setImageURI(uri); + binding.photoEditorView.getSource().setImageURI(uri); } catch (Exception e) { Toasty.error(EditImageActivity.this, getString(R.string.toast_error)).show(); } if (uri != null) { try (InputStream inputStream = getContentResolver().openInputStream(uri)) { - assert inputStream != null; ExifInterface exif = new ExifInterface(inputStream); int rotation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); int rotationInDegrees = exifToDegrees(rotation); - mPhotoEditorView.getSource().setRotation(rotationInDegrees); + binding.photoEditorView.getSource().setRotation(rotationInDegrees); } catch (Exception e) { e.printStackTrace(); } } - Button send = findViewById(R.id.send); - - send.setOnClickListener(v -> { + mPhotoEditor.setFilterEffect(PhotoFilter.NONE); + binding.send.setOnClickListener(v -> { exit = true; saveImage(); }); } - private void handleIntentImage(ImageView source) { - Intent intent = getIntent(); - if (intent != null) { - // NOTE(lucianocheng): Using "yoda conditions" here to guard against - // a null Action in the Intent. - if (Intent.ACTION_EDIT.equals(intent.getAction()) || - ACTION_NEXTGEN_EDIT.equals(intent.getAction())) { - try { - Uri uri = intent.getData(); - Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); - source.setImageBitmap(bitmap); - } catch (IOException e) { - e.printStackTrace(); - } - } else { - String intentType = intent.getType(); - if (intentType != null && intentType.startsWith("image/")) { - Uri imageUri = intent.getData(); - if (imageUri != null) { - source.setImageURI(imageUri); - } - } + @Override + public void onRequestPermissionsResult(int requestCode, + @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == STORE_REQUEST) {// If request is cancelled, the result arrays are empty. + if (grantResults.length > 0 + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + saveImage(); } } } + private void initViews() { - ImageView imgUndo; - ImageView imgRedo; - ImageView imgCamera; - ImageView imgGallery; - ImageView imgSave; - ImageView imgClose; - ImageView imgCrop; - - mPhotoEditorView = findViewById(R.id.photoEditorView); - mTxtCurrentTool = findViewById(R.id.txtCurrentTool); - mRvTools = findViewById(R.id.rvConstraintTools); - mRvFilters = findViewById(R.id.rvFilterView); - mRootView = findViewById(R.id.rootView); - - imgUndo = findViewById(R.id.imgUndo); - imgUndo.setOnClickListener(this); - - imgRedo = findViewById(R.id.imgRedo); - imgRedo.setOnClickListener(this); - - imgCamera = findViewById(R.id.imgCamera); - imgCamera.setOnClickListener(this); - - imgGallery = findViewById(R.id.imgGallery); - imgGallery.setOnClickListener(this); - - imgSave = findViewById(R.id.imgSave); - imgSave.setOnClickListener(this); - - imgClose = findViewById(R.id.imgClose); - imgClose.setOnClickListener(this); - - imgCrop = findViewById(R.id.imgCrop); - imgCrop.setOnClickListener(this); - + binding.imgUndo.setOnClickListener(this); + binding.imgRedo.setOnClickListener(this); + binding.imgClose.setOnClickListener(this); } @Override @@ -261,7 +184,7 @@ public class EditImageActivity extends BaseActivity implements OnPhotoEditorList styleBuilder.withTextColor(newColorCode); mPhotoEditor.editText(rootView, inputText, styleBuilder); - mTxtCurrentTool.setText(R.string.label_text); + binding.txtCurrentTool.setText(R.string.label_text); }); } @@ -285,100 +208,64 @@ public class EditImageActivity extends BaseActivity implements OnPhotoEditorList public void onTouchSourceImage(MotionEvent event) { } - @SuppressLint("NonConstantResourceId") @Override public void onClick(View view) { - switch (view.getId()) { - - case R.id.imgUndo: - mPhotoEditor.undo(); - break; - - case R.id.imgRedo: - mPhotoEditor.redo(); - break; - - case R.id.imgSave: - saveImage(); - break; - - case R.id.imgClose: - onBackPressed(); - break; - case R.id.imgCrop: - shareImage(); - break; - - case R.id.imgCamera: - Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); - startActivityForResult(cameraIntent, CAMERA_REQUEST); - break; - - case R.id.imgGallery: - Intent intent = new Intent(); - intent.setType("image/*"); - intent.setAction(Intent.ACTION_GET_CONTENT); - startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_REQUEST); - break; + int id = view.getId(); + if (id == R.id.imgUndo) { + mPhotoEditor.undo(); + } else if (id == R.id.imgRedo) { + mPhotoEditor.redo(); + } else if (id == R.id.imgClose) { + onBackPressed(); } } - private void shareImage() { - if (mSaveImageUri == null) { - //showSnackbar(getString(R.string.msg_save_image_to_share)); - return; - } - - Intent intent = new Intent(Intent.ACTION_SEND); - intent.setType("image/*"); - intent.putExtra(Intent.EXTRA_STREAM, buildFileProviderUri(mSaveImageUri)); - startActivity(Intent.createChooser(intent, getString(R.string.msg_share_image))); - } - - private Uri buildFileProviderUri(@NonNull Uri uri) { - return FileProvider.getUriForFile(this, - FILE_PROVIDER_AUTHORITY, - new File(uri.getPath())); - } - - private void saveImage() { - final String fileName = System.currentTimeMillis() + ".png"; - final boolean hasStoragePermission = - ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PERMISSION_GRANTED; - if (hasStoragePermission || isSdkHigherThan28()) { - showLoading("Saving..."); - mSaveFileHelper.createFile(fileName, (fileCreated, filePath, error, uri) -> { - if (fileCreated) { - SaveSettings saveSettings = new SaveSettings.Builder() - .setClearViewsEnabled(true) - .setTransparencyEnabled(true) - .build(); + if (requestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + showLoading(getString(R.string.saving)); + File file = new File(path); + try { + //noinspection ResultOfMethodCallIgnored + file.createNewFile(); - mPhotoEditor.saveAsFile(filePath, saveSettings, new PhotoEditor.OnSaveListener() { - @Override - public void onSuccess(@NonNull String imagePath) { - mSaveFileHelper.notifyThatFileIsNowPubliclyAvailable(getContentResolver()); - hideLoading(); - showSnackbar("Image Saved Successfully"); - mSaveImageUri = uri; - mPhotoEditorView.getSource().setImageURI(mSaveImageUri); - } - - @Override - public void onFailure(@NonNull Exception exception) { - hideLoading(); - showSnackbar("Failed to save Image"); - } - }); - - } else { - hideLoading(); - showSnackbar(error); + SaveSettings saveSettings = new SaveSettings.Builder() + .setClearViewsEnabled(true) + .setTransparencyEnabled(true) + .build(); + if (ContextCompat.checkSelfPermission(EditImageActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != + PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(EditImageActivity.this, + new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + STORE_REQUEST); + return; } - }); - } else { - requestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); + mPhotoEditor.saveAsFile(file.getAbsolutePath(), saveSettings, new PhotoEditor.OnSaveListener() { + @Override + public void onSuccess(@NonNull String imagePath) { + hideLoading(); + showSnackbar(getString(R.string.image_saved)); + binding.photoEditorView.getSource().setImageURI(Uri.fromFile(new File(imagePath))); + if (exit) { + Intent intentImage = new Intent(Helper.INTENT_SEND_MODIFIED_IMAGE); + intentImage.putExtra("imgpath", imagePath); + LocalBroadcastManager.getInstance(EditImageActivity.this).sendBroadcast(intentImage); + finish(); + } + } + + @Override + public void onFailure(@NonNull Exception exception) { + hideLoading(); + showSnackbar(getString(R.string.save_image_failed)); + } + }); + } catch (IOException e) { + e.printStackTrace(); + hideLoading(); + if (e.getMessage() != null) { + showSnackbar(e.getMessage()); + } + } } } @@ -406,8 +293,8 @@ public class EditImageActivity extends BaseActivity implements OnPhotoEditorList if (data != null && data.getExtras() != null) { mPhotoEditor.clearAllViews(); Bitmap photo = (Bitmap) data.getExtras().get("data"); - mPhotoEditorView.getSource().setImageBitmap(photo); - mPhotoEditorView.getSource().setRotation(rotationInDegrees); + binding.photoEditorView.getSource().setImageBitmap(photo); + binding.photoEditorView.getSource().setRotation(rotationInDegrees); } break; case PICK_REQUEST: @@ -416,8 +303,8 @@ public class EditImageActivity extends BaseActivity implements OnPhotoEditorList mPhotoEditor.clearAllViews(); Uri uri = data.getData(); Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); - mPhotoEditorView.getSource().setImageBitmap(bitmap); - mPhotoEditorView.getSource().setRotation(rotationInDegrees); + binding.photoEditorView.getSource().setImageBitmap(bitmap); + binding.photoEditorView.getSource().setRotation(rotationInDegrees); } catch (IOException e) { e.printStackTrace(); } @@ -429,8 +316,8 @@ public class EditImageActivity extends BaseActivity implements OnPhotoEditorList if (result != null) { Uri resultUri = result.getUri(); if (resultUri != null) { - mPhotoEditorView.getSource().setImageURI(resultUri); - mPhotoEditorView.getSource().setRotation(rotationInDegrees); + binding.photoEditorView.getSource().setImageURI(resultUri); + binding.photoEditorView.getSource().setRotation(rotationInDegrees); if (uri != null && uri.getPath() != null) { File fdelete = new File(uri.getPath()); if (fdelete.exists()) { @@ -449,19 +336,19 @@ public class EditImageActivity extends BaseActivity implements OnPhotoEditorList @Override public void onColorChanged(int colorCode) { mPhotoEditor.setShape(mShapeBuilder.withShapeColor(colorCode)); - mTxtCurrentTool.setText(R.string.label_brush); + binding.txtCurrentTool.setText(R.string.label_brush); } @Override public void onOpacityChanged(int opacity) { mPhotoEditor.setShape(mShapeBuilder.withShapeOpacity(opacity)); - mTxtCurrentTool.setText(R.string.label_brush); + binding.txtCurrentTool.setText(R.string.label_brush); } @Override public void onShapeSizeChanged(int shapeSize) { mPhotoEditor.setShape(mShapeBuilder.withShapeSize(shapeSize)); - mTxtCurrentTool.setText(R.string.label_brush); + binding.txtCurrentTool.setText(R.string.label_brush); } @Override @@ -472,22 +359,14 @@ public class EditImageActivity extends BaseActivity implements OnPhotoEditorList @Override public void onEmojiClick(String emojiUnicode) { mPhotoEditor.addEmoji(emojiUnicode); - mTxtCurrentTool.setText(R.string.label_emoji); + binding.txtCurrentTool.setText(R.string.label_emoji); } - @Override - public void onStickerClick(Bitmap bitmap) { - mPhotoEditor.addImage(bitmap); - mTxtCurrentTool.setText(R.string.label_sticker); - } - - private void showSaveDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(getString(R.string.msg_save_image)); - builder.setPositiveButton("Save", (dialog, which) -> saveImage()); - builder.setNegativeButton("Cancel", (dialog, which) -> dialog.dismiss()); - builder.setNeutralButton("Discard", (dialog, which) -> finish()); + builder.setPositiveButton(R.string.cancel, (dialog, which) -> dialog.dismiss()); + builder.setNegativeButton(R.string.discard, (dialog, which) -> finish()); builder.create().show(); } @@ -504,7 +383,7 @@ public class EditImageActivity extends BaseActivity implements OnPhotoEditorList mPhotoEditor.setBrushDrawingMode(true); mShapeBuilder = new ShapeBuilder(); mPhotoEditor.setShape(mShapeBuilder); - mTxtCurrentTool.setText(R.string.label_shape); + binding.txtCurrentTool.setText(R.string.label_shape); showBottomSheetDialogFragment(mShapeBSFragment); break; case TEXT: @@ -514,28 +393,30 @@ public class EditImageActivity extends BaseActivity implements OnPhotoEditorList styleBuilder.withTextColor(colorCode); mPhotoEditor.addText(inputText, styleBuilder); - mTxtCurrentTool.setText(R.string.label_text); + binding.txtCurrentTool.setText(R.string.label_text); }); break; case ERASER: mPhotoEditor.brushEraser(); - mTxtCurrentTool.setText(R.string.label_eraser_mode); + binding.txtCurrentTool.setText(R.string.label_eraser_mode); break; case FILTER: - mTxtCurrentTool.setText(R.string.label_filter); + binding.txtCurrentTool.setText(R.string.label_filter); showFilter(true); break; case EMOJI: showBottomSheetDialogFragment(mEmojiBSFragment); break; - case STICKER: - showBottomSheetDialogFragment(mStickerBSFragment); - break; case BRUSH: mPhotoEditor.setBrushDrawingMode(true); - mTxtCurrentTool.setText(R.string.label_brush); + binding.txtCurrentTool.setText(R.string.label_brush); mPropertiesBSFragment.show(getSupportFragmentManager(), mPropertiesBSFragment.getTag()); break; + case CROP: + Log.v(Helper.TAG, "crop! " + uri); + CropImage.activity(uri) + .start(this); + break; } } @@ -549,33 +430,33 @@ public class EditImageActivity extends BaseActivity implements OnPhotoEditorList void showFilter(boolean isVisible) { mIsFilterVisible = isVisible; - mConstraintSet.clone(mRootView); + mConstraintSet.clone(binding.rootView); if (isVisible) { - mConstraintSet.clear(mRvFilters.getId(), ConstraintSet.START); - mConstraintSet.connect(mRvFilters.getId(), ConstraintSet.START, + mConstraintSet.clear(binding.rvFilterView.getId(), ConstraintSet.START); + mConstraintSet.connect(binding.rvFilterView.getId(), ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START); - mConstraintSet.connect(mRvFilters.getId(), ConstraintSet.END, + mConstraintSet.connect(binding.rvFilterView.getId(), ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END); } else { - mConstraintSet.connect(mRvFilters.getId(), ConstraintSet.START, + mConstraintSet.connect(binding.rvFilterView.getId(), ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.END); - mConstraintSet.clear(mRvFilters.getId(), ConstraintSet.END); + mConstraintSet.clear(binding.rvFilterView.getId(), ConstraintSet.END); } ChangeBounds changeBounds = new ChangeBounds(); changeBounds.setDuration(350); changeBounds.setInterpolator(new AnticipateOvershootInterpolator(1.0f)); - TransitionManager.beginDelayedTransition(mRootView, changeBounds); + TransitionManager.beginDelayedTransition(binding.rootView, changeBounds); - mConstraintSet.applyTo(mRootView); + mConstraintSet.applyTo(binding.rootView); } @Override public void onBackPressed() { if (mIsFilterVisible) { showFilter(false); - mTxtCurrentTool.setText(R.string.app_name); + binding.txtCurrentTool.setText(R.string.app_name); } else if (!mPhotoEditor.isCacheEmpty()) { showSaveDialog(); } else { diff --git a/app/src/main/java/app/fedilab/android/imageeditor/tools/EditingToolsAdapter.java b/app/src/main/java/app/fedilab/android/imageeditor/tools/EditingToolsAdapter.java index f994af1f..07c3ceb7 100644 --- a/app/src/main/java/app/fedilab/android/imageeditor/tools/EditingToolsAdapter.java +++ b/app/src/main/java/app/fedilab/android/imageeditor/tools/EditingToolsAdapter.java @@ -26,12 +26,12 @@ public class EditingToolsAdapter extends RecyclerView.Adapter + app:layout_constraintTop_toTopOf="parent" /> - - - - -