Share+Delete Button
This commit is contained in:
@@ -100,7 +100,5 @@ public class SCNApp extends Application implements LifecycleObserver
|
||||
}
|
||||
}
|
||||
|
||||
//TODO: Share button on expand
|
||||
//TODO: Delete button on expand
|
||||
//TODO: Config for collapsed line count
|
||||
//TODO: Sometimes ads but promode
|
||||
|
||||
@@ -52,7 +52,7 @@ public class SCNSettings
|
||||
|
||||
public boolean Enabled = true;
|
||||
public int LocalCacheSize = 500;
|
||||
public boolean EnableDeleteSwipe = true;
|
||||
public boolean EnableDeleteSwipe = false;
|
||||
|
||||
public final NotificationSettings PriorityLow = new NotificationSettings(PriorityEnum.LOW);
|
||||
public final NotificationSettings PriorityNorm = new NotificationSettings(PriorityEnum.NORMAL);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.blackforestbytes.simplecloudnotifier.view;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.graphics.Color;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
@@ -9,8 +10,10 @@ import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.blackforestbytes.simplecloudnotifier.R;
|
||||
import com.blackforestbytes.simplecloudnotifier.SCNApp;
|
||||
import com.blackforestbytes.simplecloudnotifier.model.CMessage;
|
||||
import com.blackforestbytes.simplecloudnotifier.model.CMessageList;
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.Collections;
|
||||
@@ -53,7 +56,7 @@ public class MessageAdapter extends RecyclerView.Adapter
|
||||
{
|
||||
CMessage msg = CMessageList.inst().tryGetFromBack(position);
|
||||
MessagePresenter view = (MessagePresenter) holder;
|
||||
view.setMessage(msg);
|
||||
view.setMessage(msg, position);
|
||||
|
||||
viewHolders.put(view, true);
|
||||
}
|
||||
@@ -110,7 +113,11 @@ public class MessageAdapter extends RecyclerView.Adapter
|
||||
public RelativeLayout viewForeground;
|
||||
public RelativeLayout viewBackground;
|
||||
|
||||
public MaterialButton btnShare;
|
||||
public MaterialButton btnDelete;
|
||||
|
||||
private CMessage data;
|
||||
private int datapos;
|
||||
|
||||
MessagePresenter(View itemView)
|
||||
{
|
||||
@@ -121,6 +128,8 @@ public class MessageAdapter extends RecyclerView.Adapter
|
||||
ivPriority = itemView.findViewById(R.id.ivPriority);
|
||||
viewForeground = itemView.findViewById(R.id.layoutFront);
|
||||
viewBackground = itemView.findViewById(R.id.layoutBack);
|
||||
btnShare = itemView.findViewById(R.id.btnShare);
|
||||
btnDelete = itemView.findViewById(R.id.btnDelete);
|
||||
|
||||
itemView.setOnClickListener(this);
|
||||
tvTimestamp.setOnClickListener(this);
|
||||
@@ -128,16 +137,27 @@ public class MessageAdapter extends RecyclerView.Adapter
|
||||
tvMessage.setOnClickListener(this);
|
||||
ivPriority.setOnClickListener(this);
|
||||
viewForeground.setOnClickListener(this);
|
||||
|
||||
btnShare.setOnClickListener(v ->
|
||||
{
|
||||
if (data == null) return;
|
||||
Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
|
||||
sharingIntent.setType("text/plain");
|
||||
sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, data.Title);
|
||||
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, data.Content);
|
||||
SCNApp.getMainActivity().startActivity(Intent.createChooser(sharingIntent, "Share message"));
|
||||
|
||||
});
|
||||
btnDelete.setOnClickListener(v -> { if (data != null) SCNApp.getMainActivity().adpTabs.tab1.deleteMessage(datapos); });
|
||||
|
||||
}
|
||||
|
||||
void setMessage(CMessage msg)
|
||||
void setMessage(CMessage msg, int pos)
|
||||
{
|
||||
tvTimestamp.setText(msg.formatTimestamp());
|
||||
tvTitle.setText(msg.Title);
|
||||
tvMessage.setText(msg.Content);
|
||||
|
||||
tvMessage.setMaxLines(msg.IsExpandedInAdapter ? 999 : 6);
|
||||
|
||||
switch (msg.Priority)
|
||||
{
|
||||
case LOW:
|
||||
@@ -157,6 +177,28 @@ public class MessageAdapter extends RecyclerView.Adapter
|
||||
}
|
||||
|
||||
data = msg;
|
||||
datapos = pos;
|
||||
|
||||
if (msg.IsExpandedInAdapter) expand(true); else collapse(true);
|
||||
}
|
||||
|
||||
private void expand(boolean force)
|
||||
{
|
||||
if (data != null && data.IsExpandedInAdapter && !force) return;
|
||||
if (data != null) data.IsExpandedInAdapter = true;
|
||||
if (tvMessage != null) tvMessage.setMaxLines(999);
|
||||
if (btnDelete != null) btnDelete.setVisibility(View.VISIBLE);
|
||||
if (btnShare != null) btnShare.setVisibility(View.VISIBLE);
|
||||
|
||||
}
|
||||
|
||||
private void collapse(boolean force)
|
||||
{
|
||||
if (data != null && !data.IsExpandedInAdapter && !force) return;
|
||||
if (data != null) data.IsExpandedInAdapter = false;
|
||||
if (tvMessage != null) tvMessage.setMaxLines(6);
|
||||
if (btnDelete != null) btnDelete.setVisibility(View.GONE);
|
||||
if (btnShare != null) btnShare.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -164,8 +206,7 @@ public class MessageAdapter extends RecyclerView.Adapter
|
||||
{
|
||||
if (data.IsExpandedInAdapter)
|
||||
{
|
||||
data.IsExpandedInAdapter=false;
|
||||
tvMessage.setMaxLines(6);
|
||||
collapse(false);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -173,15 +214,10 @@ public class MessageAdapter extends RecyclerView.Adapter
|
||||
{
|
||||
if (holder == null) continue;
|
||||
if (holder == this) continue;
|
||||
if (holder.tvMessage == null) continue;
|
||||
if (!holder.data.IsExpandedInAdapter) continue;
|
||||
|
||||
holder.data.IsExpandedInAdapter=false;
|
||||
holder.tvMessage.setMaxLines(6);
|
||||
holder.collapse(false);
|
||||
}
|
||||
|
||||
data.IsExpandedInAdapter=true;
|
||||
tvMessage.setMaxLines(9999);
|
||||
expand(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,18 +66,23 @@ public class NotificationsFragment extends Fragment implements MessageAdapterTou
|
||||
{
|
||||
if (viewHolder instanceof MessageAdapter.MessagePresenter)
|
||||
{
|
||||
final int deletedIndex = viewHolder.getAdapterPosition();
|
||||
|
||||
final CMessage deletedItem = adpMessages.removeItem(viewHolder.getAdapterPosition());
|
||||
String name = deletedItem.Title;
|
||||
|
||||
Snackbar snackbar = Snackbar.make(SCNApp.getMainActivity().layoutRoot, name + " removed", Snackbar.LENGTH_LONG);
|
||||
snackbar.setAction("UNDO", view -> adpMessages.restoreItem(deletedItem, deletedIndex));
|
||||
snackbar.setActionTextColor(Color.YELLOW);
|
||||
snackbar.show();
|
||||
deleteMessage(viewHolder.getAdapterPosition());
|
||||
}
|
||||
}
|
||||
|
||||
public void deleteMessage(int pos)
|
||||
{
|
||||
final int deletedIndex = pos;
|
||||
|
||||
final CMessage deletedItem = adpMessages.removeItem(pos);
|
||||
String name = deletedItem.Title;
|
||||
|
||||
Snackbar snackbar = Snackbar.make(SCNApp.getMainActivity().layoutRoot, name + " removed", Snackbar.LENGTH_LONG);
|
||||
snackbar.setAction("UNDO", view -> adpMessages.restoreItem(deletedItem, deletedIndex));
|
||||
snackbar.setActionTextColor(Color.YELLOW);
|
||||
snackbar.show();
|
||||
}
|
||||
|
||||
public void updateDeleteSwipeEnabled()
|
||||
{
|
||||
if (touchHelper != null) touchHelper.updateEnabled();
|
||||
|
||||
Reference in New Issue
Block a user