Skip to content

Commit

Permalink
I'm working to display share button when long press on a claim #1133.
Browse files Browse the repository at this point in the history
 (#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.
  • Loading branch information
pixel committed Oct 1, 2021
1 parent 7c0ad62 commit ad31ff7
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 13 deletions.
93 changes: 80 additions & 13 deletions app/src/main/java/io/lbry/browser/adapter/ClaimListAdapter.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
package io.lbry.browser.adapter;

import android.content.Context;
import android.content.Intent;
import android.text.format.DateUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.widget.PopupMenu;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
Expand All @@ -23,6 +27,7 @@
import java.util.List;
import java.util.Map;

import io.lbry.browser.MainActivity;
import io.lbry.browser.R;
import io.lbry.browser.exceptions.LbryUriException;
import io.lbry.browser.listener.SelectionModeListener;
Expand Down Expand Up @@ -374,19 +379,8 @@ public void onClick(View view) {
@Override
public boolean onLongClick(View view) {

//THIS IS FOR SHARING THE VIDEO ON LONG PRESS
Toast.makeText(context, "LONG CLICKED: " + original.getTitle(), Toast.LENGTH_SHORT).show(); //Don't need, but it's nice to see it on the UI
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 (original != null) {
showClaimPopupMenu(view, original);
}

if (!canEnterSelectionMode) {
Expand Down Expand Up @@ -539,6 +533,79 @@ private void toggleSelectedClaim(Claim claim) {
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 {
void onClaimClicked(Claim claim);
}
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/res/values/styles.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<item name="windowActionModeOverlay">true</item>
<item name="android:windowBackground">@color/colorPrimaryDark</item>
<item name="drawerArrowStyle">@style/AppTheme.DrawerArrowStyle</item>
<item name="popupMenuStyle">@style/ClaimPopupMenu</item>
<!--item name="android:windowLightStatusBar">true</item-->
</style>

Expand All @@ -32,4 +33,9 @@
<item name="color">@color/actionBarForeground</item>
</style>

<style name="ClaimPopupMenu" parent="Widget.AppCompat.PopupMenu">
<item name="android:dropDownHorizontalOffset">-8dp</item>
<item name="android:dropDownVerticalOffset">8dp</item>
</style>

</resources>

0 comments on commit ad31ff7

Please sign in to comment.