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.
This commit is contained in:
Hans-Christoph Steiner 2014-02-12 20:53:54 -05:00
parent ceed2c31d7
commit 9c9c0a4819

View File

@ -19,28 +19,31 @@
package org.fdroid.fdroid; package org.fdroid.fdroid;
import android.annotation.TargetApi;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.AlertDialog.Builder; import android.app.AlertDialog.Builder;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.content.*; import android.content.*;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.database.ContentObserver; import android.database.ContentObserver;
import android.net.Uri; import android.net.Uri;
import android.nfc.NfcAdapter;
import android.os.Build; import android.os.Build;
import android.os.Bundle; 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.util.Log;
import android.view.ContextThemeWrapper; import android.view.ContextThemeWrapper;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.*; import android.widget.TextView;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.MenuItemCompat;
import android.support.v4.view.ViewPager;
import org.fdroid.fdroid.compat.TabManager; import org.fdroid.fdroid.compat.TabManager;
import org.fdroid.fdroid.data.AppProvider; import org.fdroid.fdroid.data.AppProvider;
@ -100,6 +103,14 @@ public class FDroid extends FragmentActivity {
getContentResolver().registerContentObserver(uri, true, new AppObserver()); 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 @Override
public void onConfigurationChanged(Configuration newConfig) { public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(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();
}
}
} }