added save button to image preview

This commit is contained in:
nuclearfog 2020-06-19 21:48:22 +02:00
parent 2df5ddad6c
commit 073a761309
No known key found for this signature in database
GPG Key ID: ED35E22099354A64
10 changed files with 93 additions and 29 deletions

View File

@ -48,9 +48,10 @@ public class MediaViewer extends AppCompatActivity implements OnImageClickListen
/// Media Types
private static final int MEDIAVIEWER_NONE = 0;
public static final int MEDIAVIEWER_IMAGE = 1;
public static final int MEDIAVIEWER_VIDEO = 2;
public static final int MEDIAVIEWER_ANGIF = 3;
public static final int MEDIAVIEWER_IMG_S = 1;
public static final int MEDIAVIEWER_IMAGE = 2;
public static final int MEDIAVIEWER_VIDEO = 3;
public static final int MEDIAVIEWER_ANGIF = 4;
private static final SimpleDateFormat formatter = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss", Locale.GERMANY);
private static final String[] REQ_WRITE_SD = {WRITE_EXTERNAL_STORAGE};
@ -99,6 +100,8 @@ public class MediaViewer extends AppCompatActivity implements OnImageClickListen
if (link != null && link.length > 0) {
switch (type) {
case MEDIAVIEWER_IMG_S:
adapter.disableSaveButton();
case MEDIAVIEWER_IMAGE:
imageWindow.setVisibility(VISIBLE);
imageList.setLayoutManager(new LinearLayoutManager(this, HORIZONTAL, false));
@ -150,7 +153,7 @@ public class MediaViewer extends AppCompatActivity implements OnImageClickListen
@Override
public void onImageTouch(Bitmap image) {
public void onSaveClick(Bitmap image) {
boolean accessGranted = true;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int check = checkSelfPermission(WRITE_EXTERNAL_STORAGE);

View File

@ -38,7 +38,7 @@ import static android.view.Window.FEATURE_NO_TITLE;
import static android.widget.Toast.LENGTH_SHORT;
import static org.nuclearfog.twidda.activity.MediaViewer.KEY_MEDIA_LINK;
import static org.nuclearfog.twidda.activity.MediaViewer.KEY_MEDIA_TYPE;
import static org.nuclearfog.twidda.activity.MediaViewer.MEDIAVIEWER_IMAGE;
import static org.nuclearfog.twidda.activity.MediaViewer.MEDIAVIEWER_IMG_S;
public class MessagePopup extends AppCompatActivity implements OnClickListener, OnDismissListener {
@ -161,7 +161,7 @@ public class MessagePopup extends AppCompatActivity implements OnClickListener,
else {
Intent image = new Intent(this, MediaViewer.class);
image.putExtra(KEY_MEDIA_LINK, new String[]{mediaPath});
image.putExtra(KEY_MEDIA_TYPE, MEDIAVIEWER_IMAGE);
image.putExtra(KEY_MEDIA_TYPE, MEDIAVIEWER_IMG_S);
startActivity(image);
}
break;

View File

@ -48,7 +48,7 @@ import static android.widget.Toast.LENGTH_LONG;
import static android.widget.Toast.LENGTH_SHORT;
import static org.nuclearfog.twidda.activity.MediaViewer.KEY_MEDIA_LINK;
import static org.nuclearfog.twidda.activity.MediaViewer.KEY_MEDIA_TYPE;
import static org.nuclearfog.twidda.activity.MediaViewer.MEDIAVIEWER_IMAGE;
import static org.nuclearfog.twidda.activity.MediaViewer.MEDIAVIEWER_IMG_S;
import static org.nuclearfog.twidda.activity.MediaViewer.MEDIAVIEWER_VIDEO;
@ -267,7 +267,7 @@ public class TweetPopup extends AppCompatActivity implements OnClickListener, Lo
case GIF:
case IMAGE:
image.putExtra(KEY_MEDIA_TYPE, MEDIAVIEWER_IMAGE);
image.putExtra(KEY_MEDIA_TYPE, MEDIAVIEWER_IMG_S);
startActivity(image);
break;
}

View File

@ -1,8 +1,11 @@
package org.nuclearfog.twidda.adapter;
import android.graphics.Bitmap;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ProgressBar;
@ -12,11 +15,13 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView.Adapter;
import androidx.recyclerview.widget.RecyclerView.ViewHolder;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.backend.holder.ImageHolder;
import java.util.LinkedList;
import java.util.List;
import static android.view.View.VISIBLE;
import static android.widget.ListPopupWindow.MATCH_PARENT;
import static android.widget.ListPopupWindow.WRAP_CONTENT;
import static androidx.recyclerview.widget.RecyclerView.NO_POSITION;
@ -30,13 +35,13 @@ public class ImageAdapter extends Adapter<ViewHolder> {
private OnImageClickListener itemClickListener;
private List<ImageHolder> images;
private boolean loading;
private boolean loading = false;
private boolean saveImg = true;
public ImageAdapter(OnImageClickListener itemClickListener) {
this.itemClickListener = itemClickListener;
images = new LinkedList<>();
loading = false;
}
@ -58,6 +63,11 @@ public class ImageAdapter extends Adapter<ViewHolder> {
}
public void disableSaveButton() {
saveImg = false;
}
public boolean isEmpty() {
return images.isEmpty();
}
@ -83,11 +93,9 @@ public class ImageAdapter extends Adapter<ViewHolder> {
@Override
public ViewHolder onCreateViewHolder(@NonNull final ViewGroup parent, int viewType) {
if (viewType == PICTURE) {
ImageView preview = new ImageView(parent.getContext());
preview.setBackgroundColor(0xffffffff);
preview.setPadding(1, 1, 1, 1);
final ImageItem item = new ImageItem(preview);
preview.setOnClickListener(new View.OnClickListener() {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_image, parent, false);
final ImageItem item = new ImageItem(view);
item.preview.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int pos = item.getAdapterPosition();
@ -97,17 +105,19 @@ public class ImageAdapter extends Adapter<ViewHolder> {
}
}
});
preview.setOnLongClickListener(new View.OnLongClickListener() {
if (saveImg) {
item.saveButton.setVisibility(VISIBLE);
item.saveButton.setOnClickListener(new OnClickListener() {
@Override
public boolean onLongClick(View v) {
public void onClick(View v) {
int pos = item.getAdapterPosition();
if (pos != NO_POSITION) {
Bitmap img = images.get(pos).getOriginalImage();
itemClickListener.onImageTouch(img);
itemClickListener.onSaveClick(img);
}
return true;
}
});
}
return item;
} else {
ProgressBar circle = new ProgressBar(parent.getContext());
@ -132,10 +142,12 @@ public class ImageAdapter extends Adapter<ViewHolder> {
*/
class ImageItem extends ViewHolder {
final ImageView preview;
final ImageButton saveButton;
ImageItem(ImageView preview) {
super(preview);
this.preview = preview;
ImageItem(View view) {
super(view);
preview = view.findViewById(R.id.item_image_preview);
saveButton = view.findViewById(R.id.item_image_save);
}
}
@ -165,6 +177,6 @@ public class ImageAdapter extends Adapter<ViewHolder> {
*
* @param image selected image_add bitmap
*/
void onImageTouch(Bitmap image);
void onSaveClick(Bitmap image);
}
}

View File

@ -1048,6 +1048,7 @@ public class TwitterEngine {
* @return bitmap image
* @throws EngineException if image loading failed
*/
@Nullable
public Bitmap getImage(String link) throws EngineException {
try {
Proxy proxy;

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="16dp"
android:height="16dp"
android:viewportWidth="20"
android:viewportHeight="20">
<path
android:fillColor="#FFFFFF"
android:pathData="M15.173,2H4C2.899,2 2,2.9 2,4v12c0,1.1 0.899,2 2,2h12c1.101,0 2,-0.9 2,-2V5.127L15.173,2zM14,8c0,0.549 -0.45,1 -1,1H7C6.45,9 6,8.549 6,8V3h8V8zM13,4h-2v4h2V4z" />
</vector>

View File

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/item_image_margin"
style="@style/CardViewStyle">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/item_image_preview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/image_preview" />
<ImageButton
android:id="@+id/item_image_save"
android:layout_width="@dimen/item_image_button"
android:layout_height="@dimen/item_image_button"
android:layout_gravity="top|end"
android:layout_margin="@dimen/item_image_button_margin"
android:background="@drawable/button"
android:contentDescription="@string/item_image_save"
android:visibility="gone"
app:srcCompat="@drawable/save_img" />
</FrameLayout>
</androidx.cardview.widget.CardView>

View File

@ -147,4 +147,6 @@
<string name="error_file_not_found">Datei nicht gefunden!</string>
<string name="item_load_more">Mehr laden</string>
<string name="error_image_loading">Bild konnte nicht geladen werden!</string>
<string name="item_image_prev">Bildvorschau</string>
<string name="item_image_save">Bild speichern</string>
</resources>

View File

@ -67,4 +67,7 @@
<dimen name="settings_appinfo_text_padding">5dp</dimen>
<dimen name="settings_info_appname_font">18sp</dimen>
<dimen name="item_placeholder_margin">8dp</dimen>
<dimen name="item_image_button_margin">5dp</dimen>
<dimen name="item_image_button">30dp</dimen>
<dimen name="item_image_margin">2dp</dimen>
</resources>

View File

@ -150,4 +150,6 @@
<string name="error_file_not_found">File not found!</string>
<string name="item_load_more">Load more</string>
<string name="error_image_loading">Could not load image!</string>
<string name="item_image_prev">image preview</string>
<string name="item_image_save">save image</string>
</resources>