From 9c9c0a48190f968ee7e847694e90c9cf1523c341 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 12 Feb 2014 20:53:54 -0500 Subject: [PATCH] setup main FDroid screen to NFC Beam the FDroid.apk This pre-configures a file:// URI that points to the installed location of the FDroid.apk. When users put two devices together, and touch the screen on the device with FDroid on it, it will "beam" over the APK, and prompt the user to install it. --- src/org/fdroid/fdroid/FDroid.java | 40 ++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/src/org/fdroid/fdroid/FDroid.java b/src/org/fdroid/fdroid/FDroid.java index e54b8ec25..eaf9db0ac 100644 --- a/src/org/fdroid/fdroid/FDroid.java +++ b/src/org/fdroid/fdroid/FDroid.java @@ -19,28 +19,31 @@ package org.fdroid.fdroid; +import android.annotation.TargetApi; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.NotificationManager; import android.content.*; +import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Configuration; import android.database.ContentObserver; import android.net.Uri; +import android.nfc.NfcAdapter; import android.os.Build; import android.os.Bundle; -import android.os.Handler; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.MenuItemCompat; +import android.support.v4.view.ViewPager; import android.util.Log; import android.view.ContextThemeWrapper; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.widget.*; - -import android.support.v4.app.FragmentActivity; -import android.support.v4.view.MenuItemCompat; -import android.support.v4.view.ViewPager; +import android.widget.TextView; import org.fdroid.fdroid.compat.TabManager; import org.fdroid.fdroid.data.AppProvider; @@ -100,6 +103,14 @@ public class FDroid extends FragmentActivity { getContentResolver().registerContentObserver(uri, true, new AppObserver()); } + @Override + protected void onResume() { + super.onResume(); + // RepoDetailsActivity sets a different beam, so reset here + if (Build.VERSION.SDK_INT >= 16) + setupAndroidBeam(); + } + @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); @@ -333,4 +344,21 @@ public class FDroid extends FragmentActivity { } + @TargetApi(16) + private void setupAndroidBeam() { + PackageManager pm = getPackageManager(); + NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this); + ApplicationInfo appInfo; + try { + appInfo = pm.getApplicationInfo("org.fdroid.fdroid", + PackageManager.GET_META_DATA); + // TODO can we send the repo here also, as a file? + Uri uris[] = { + Uri.parse("file://" + appInfo.publicSourceDir), + }; + nfcAdapter.setBeamPushUris(uris, this); + } catch (NameNotFoundException e1) { + e1.printStackTrace(); + } + } }