I'm working to display share button when long press on a claim #1133.
(https://github.com/lbryio/lbry-android/issues/1133) So far, I've got it working pretty well. Now, there's quite a few ways to implement a menu after a long press. Signal Messenger has a cool UI for when users long click on a message. But other apps like NewPipe just use a dialog to display other options. To keep things simple, I used a popup menu. Now, I added other menu items that you'd see in the FileViewFragment (download, repost, etc.). I added these because only putting "share" in the menu didn't seem like much of a menu. "Share" is the only menu item that actually works right now.
This commit is contained in:
parent
7c0ad62a98
commit
ad31ff758c
2 changed files with 86 additions and 13 deletions
|
@ -1,9 +1,12 @@
|
||||||
package io.lbry.browser.adapter;
|
package io.lbry.browser.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
import android.text.format.DateUtils;
|
import android.text.format.DateUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.view.Gravity;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
@ -11,6 +14,7 @@ import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.appcompat.widget.PopupMenu;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.Glide;
|
||||||
|
@ -23,6 +27,7 @@ import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import io.lbry.browser.MainActivity;
|
||||||
import io.lbry.browser.R;
|
import io.lbry.browser.R;
|
||||||
import io.lbry.browser.exceptions.LbryUriException;
|
import io.lbry.browser.exceptions.LbryUriException;
|
||||||
import io.lbry.browser.listener.SelectionModeListener;
|
import io.lbry.browser.listener.SelectionModeListener;
|
||||||
|
@ -374,19 +379,8 @@ public class ClaimListAdapter extends RecyclerView.Adapter<ClaimListAdapter.View
|
||||||
@Override
|
@Override
|
||||||
public boolean onLongClick(View view) {
|
public boolean onLongClick(View view) {
|
||||||
|
|
||||||
//THIS IS FOR SHARING THE VIDEO ON LONG PRESS
|
if (original != null) {
|
||||||
Toast.makeText(context, "LONG CLICKED: " + original.getTitle(), Toast.LENGTH_SHORT).show(); //Don't need, but it's nice to see it on the UI
|
showClaimPopupMenu(view, original);
|
||||||
Log.d(TAG, "LONG CLICKED: " + original.getTitle());
|
|
||||||
|
|
||||||
try{
|
|
||||||
String shareUrl = LbryUri.parse(
|
|
||||||
!Helper.isNullOrEmpty(original.getCanonicalUrl()) ? original.getCanonicalUrl() :
|
|
||||||
(!Helper.isNullOrEmpty(original.getShortUrl()) ? original.getShortUrl() : original.getPermanentUrl())).toTvString();
|
|
||||||
|
|
||||||
Log.d(TAG, "LONG CLICKED, SHARE " + shareUrl);
|
|
||||||
|
|
||||||
} catch (LbryUriException lbryUriException){
|
|
||||||
lbryUriException.printStackTrace();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!canEnterSelectionMode) {
|
if (!canEnterSelectionMode) {
|
||||||
|
@ -539,6 +533,79 @@ public class ClaimListAdapter extends RecyclerView.Adapter<ClaimListAdapter.View
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void showClaimPopupMenu(View view, Claim claim) {
|
||||||
|
|
||||||
|
Toast.makeText(context, "LONG CLICKED: " + claim.getTitle(), Toast.LENGTH_SHORT).show(); //Don't need, but it's nice to see it on the UI
|
||||||
|
Log.d(TAG, "LONG CLICKED: " + claim.getTitle());
|
||||||
|
|
||||||
|
//do I need to do a check if context is null?
|
||||||
|
PopupMenu popup = new PopupMenu(context, view);
|
||||||
|
|
||||||
|
popup.getMenuInflater().inflate(R.menu.menu_claim_popup, popup.getMenu());
|
||||||
|
popup.setGravity(Gravity.END);
|
||||||
|
|
||||||
|
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||||
|
public boolean onMenuItemClick(MenuItem item) {
|
||||||
|
int i = item.getItemId();
|
||||||
|
if (i == R.id.menu_claim_popup_share) {
|
||||||
|
//share the claim
|
||||||
|
Log.d(TAG, "Let's share: " + claim.getTitle());
|
||||||
|
try{
|
||||||
|
String shareUrl = LbryUri.parse(
|
||||||
|
!Helper.isNullOrEmpty(claim.getCanonicalUrl()) ? claim.getCanonicalUrl() :
|
||||||
|
(!Helper.isNullOrEmpty(claim.getShortUrl()) ? claim.getShortUrl() : claim.getPermanentUrl())).toTvString();
|
||||||
|
|
||||||
|
Intent shareIntent = new Intent();
|
||||||
|
shareIntent.setAction(Intent.ACTION_SEND);
|
||||||
|
shareIntent.setType("text/plain");
|
||||||
|
shareIntent.putExtra(Intent.EXTRA_TEXT, shareUrl);
|
||||||
|
|
||||||
|
MainActivity.startingShareActivity = true;
|
||||||
|
Intent shareUrlIntent = Intent.createChooser(shareIntent, context.getString(R.string.share_lbry_content));
|
||||||
|
shareUrlIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
|
||||||
|
context.startActivity(shareUrlIntent);
|
||||||
|
Log.d(TAG, "Sharing: " + shareUrl);
|
||||||
|
|
||||||
|
} catch (LbryUriException lbryUriException){
|
||||||
|
lbryUriException.printStackTrace();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (i == R.id.menu_claim_popup_support){
|
||||||
|
//support the claim
|
||||||
|
Log.d(TAG, "Let's support: " + claim.getTitle());
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (i == R.id.menu_claim_popup_repost) {
|
||||||
|
//repost the claim
|
||||||
|
Log.d(TAG, "Let's repost: " + claim.getTitle());
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (i == R.id.menu_claim_popup_download) {
|
||||||
|
//download the claim
|
||||||
|
Log.d(TAG, "Let's download: " + claim.getTitle());
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (i == R.id.menu_claim_popup_report) {
|
||||||
|
//report the claim
|
||||||
|
Log.d(TAG, "Let's report: " + claim.getTitle());
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return onMenuItemClick(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
popup.show();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public interface ClaimListItemListener {
|
public interface ClaimListItemListener {
|
||||||
void onClaimClicked(Claim claim);
|
void onClaimClicked(Claim claim);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
<item name="windowActionModeOverlay">true</item>
|
<item name="windowActionModeOverlay">true</item>
|
||||||
<item name="android:windowBackground">@color/colorPrimaryDark</item>
|
<item name="android:windowBackground">@color/colorPrimaryDark</item>
|
||||||
<item name="drawerArrowStyle">@style/AppTheme.DrawerArrowStyle</item>
|
<item name="drawerArrowStyle">@style/AppTheme.DrawerArrowStyle</item>
|
||||||
|
<item name="popupMenuStyle">@style/ClaimPopupMenu</item>
|
||||||
<!--item name="android:windowLightStatusBar">true</item-->
|
<!--item name="android:windowLightStatusBar">true</item-->
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
@ -32,4 +33,9 @@
|
||||||
<item name="color">@color/actionBarForeground</item>
|
<item name="color">@color/actionBarForeground</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="ClaimPopupMenu" parent="Widget.AppCompat.PopupMenu">
|
||||||
|
<item name="android:dropDownHorizontalOffset">-8dp</item>
|
||||||
|
<item name="android:dropDownVerticalOffset">8dp</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in a new issue