Add Nearby to share (if applicable)

This commit is contained in:
mvp76 2016-11-16 14:42:59 +01:00
parent 46308dcbde
commit 5a0b625dc0
2 changed files with 60 additions and 27 deletions

View File

@ -3,6 +3,7 @@ package org.fdroid.fdroid;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.PendingIntent;
import android.bluetooth.BluetoothAdapter;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
import android.content.Context;
@ -35,6 +36,7 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
@ -68,13 +70,15 @@ import java.util.ArrayList;
import static android.support.v7.widget.RecyclerView.NO_POSITION;
public class AppDetails2 extends AppCompatActivity {
public class AppDetails2 extends AppCompatActivity implements ShareChooserDialog.ShareChooserDialogListener {
private static final String TAG = "AppDetails2";
private static final int REQUEST_ENABLE_BLUETOOTH = 2;
private static final int REQUEST_PERMISSION_DIALOG = 3;
private static final int REQUEST_UNINSTALL_DIALOG = 4;
private FDroidApp mFDroidApp;
private App mApp;
private RecyclerView mRecyclerView;
private AppDetailsRecyclerViewAdapter mAdapter;
@ -83,6 +87,8 @@ public class AppDetails2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
mFDroidApp = (FDroidApp) getApplication();
//mFDroidApp.applyTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.app_details2);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
@ -160,12 +166,31 @@ public class AppDetails2 extends AppCompatActivity {
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, mApp.name);
shareIntent.putExtra(Intent.EXTRA_TEXT, mApp.name + " (" + mApp.summary + ") - https://f-droid.org/app/" + mApp.packageName);
ShareChooserDialog.createChooser((CoordinatorLayout) findViewById(R.id.rootCoordinator), this, shareIntent);
boolean showNearbyItem = mApp.isInstalled() && mFDroidApp.bluetoothAdapter != null;
ShareChooserDialog.createChooser((CoordinatorLayout) findViewById(R.id.rootCoordinator), this, this, shareIntent, showNearbyItem);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onNearby() {
/*
* If Bluetooth has not been enabled/turned on, then
* enabling device discoverability will automatically enable Bluetooth
*/
Intent discoverBt = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverBt.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 121);
startActivityForResult(discoverBt, REQUEST_ENABLE_BLUETOOTH);
// if this is successful, the Bluetooth transfer is started
}
@Override
public void onResolvedShareIntent(Intent shareIntent) {
startActivity(shareIntent);
}
public class AppDetailsRecyclerViewAdapter
extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
@ -715,9 +740,9 @@ public class AppDetails2 extends AppCompatActivity {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
//case REQUEST_ENABLE_BLUETOOTH:
// fdroidApp.sendViaBluetooth(this, resultCode, app.packageName);
// break;
case REQUEST_ENABLE_BLUETOOTH:
mFDroidApp.sendViaBluetooth(this, resultCode, mApp.packageName);
break;
case REQUEST_PERMISSION_DIALOG:
if (resultCode == Activity.RESULT_OK) {
Uri uri = data.getData();

View File

@ -15,6 +15,7 @@ import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
@ -31,9 +32,12 @@ public class ShareChooserDialog extends BottomSheetDialogFragment {
private RecyclerView mRecyclerView;
private ArrayList<ResolveInfo> mTargets;
private int mParentWidth;
private Intent mShareIntent;
private boolean mShowNearby;
public interface ShareChooserDialogListener {
void onItemSelected(ResolveInfo ri);
void onNearby();
void onResolvedShareIntent(Intent shareIntent);
}
private ShareChooserDialogListener mListener;
@ -49,9 +53,10 @@ public class ShareChooserDialog extends BottomSheetDialogFragment {
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mParentWidth = getArguments().getInt("width", 640);
Intent intent = getArguments().getParcelable("intent");
mShareIntent = getArguments().getParcelable("intent");
mShowNearby = getArguments().getBoolean("showNearby", false);
mTargets = new ArrayList<>();
List<ResolveInfo> resInfo = getContext().getPackageManager().queryIntentActivities(intent, 0);
List<ResolveInfo> resInfo = getContext().getPackageManager().queryIntentActivities(mShareIntent, 0);
if (resInfo != null && resInfo.size() > 0) {
for (ResolveInfo resolveInfo : resInfo) {
String packageName = resolveInfo.activityInfo.packageName;
@ -123,7 +128,9 @@ public class ShareChooserDialog extends BottomSheetDialogFragment {
RecyclerView.Adapter init(List<ResolveInfo> targetedShareIntents) {
mIntents = new ArrayList<>();
mIntents.add("Nearby");
if (mShowNearby) {
mIntents.add("Nearby (string contents do not matter!)");
}
for (ResolveInfo ri : targetedShareIntents) {
mIntents.add(ri);
}
@ -146,7 +153,15 @@ public class ShareChooserDialog extends BottomSheetDialogFragment {
@Override
public void onBindViewHolder(VH holder, int position) {
if (getItemViewType(position) == 1) {
//holder.label.setText((CharSequence)mIntents.get(position));
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mListener != null) {
mListener.onNearby();
}
dismiss();
}
});
return;
}
final ResolveInfo ri = (ResolveInfo) mIntents.get(position);
@ -155,8 +170,13 @@ public class ShareChooserDialog extends BottomSheetDialogFragment {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mListener != null)
mListener.onItemSelected(ri);
if (mListener != null) {
Intent intent = new Intent(mShareIntent);
ComponentName name = new ComponentName(ri.activityInfo.applicationInfo.packageName,
ri.activityInfo.name);
intent.setComponent(name);
mListener.onResolvedShareIntent(intent);
}
dismiss();
}
});
@ -170,25 +190,13 @@ public class ShareChooserDialog extends BottomSheetDialogFragment {
}
public static void createChooser(CoordinatorLayout rootView, final AppCompatActivity parent, final Intent shareIntent) {
public static void createChooser(CoordinatorLayout rootView, ShareChooserDialog.ShareChooserDialogListener listener, final AppCompatActivity parent, final Intent shareIntent, boolean showNearbyItem) {
ShareChooserDialog d = new ShareChooserDialog();
d.setListener(new ShareChooserDialog.ShareChooserDialogListener() {
@Override
public void onItemSelected(final ResolveInfo ri) {
startActivityForResolveInfo(ri);
}
private void startActivityForResolveInfo(ResolveInfo ri) {
Intent intent = new Intent(shareIntent);
ComponentName name = new ComponentName(ri.activityInfo.applicationInfo.packageName,
ri.activityInfo.name);
intent.setComponent(name);
parent.startActivity(intent);
}
});
d.setListener(listener);
Bundle args = new Bundle();
args.putInt("width", rootView.getWidth());
args.putParcelable("intent", shareIntent);
args.putBoolean("showNearby", showNearbyItem);
d.setArguments(args);
d.show(parent.getSupportFragmentManager(), "Share");
}