summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartijn Coenen <maco@google.com>2011-06-16 12:48:37 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-06-16 12:48:37 -0700
commita56822d654cc5776f810af3d9da23166dcacb8a1 (patch)
tree6778b0687fb065d54686f6e835ab815a0d8890a0
parent0ceeeae810cc78c45294ca3deeb80dd019d8cdb7 (diff)
parentb2f93556ac91fe06eb8f6acab05b6a6d1b2fdbe1 (diff)
downloadpackages_apps_Browser-a56822d654cc5776f810af3d9da23166dcacb8a1.zip
packages_apps_Browser-a56822d654cc5776f810af3d9da23166dcacb8a1.tar.gz
packages_apps_Browser-a56822d654cc5776f810af3d9da23166dcacb8a1.tar.bz2
Merge "Zero-click sharing for Browser using NFC."
-rw-r--r--AndroidManifest.xml1
-rw-r--r--src/com/android/browser/Controller.java13
-rw-r--r--src/com/android/browser/NfcHandler.java73
3 files changed, 87 insertions, 0 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 00354a4..9751f96 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -28,6 +28,7 @@
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.USE_CREDENTIALS"/>
<uses-permission android:name="android.permission.INTERNET" />
+ <uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS" />
<uses-permission android:name="android.permission.SET_WALLPAPER" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index faee0c7..911f724 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -38,6 +38,7 @@ import android.graphics.Canvas;
import android.graphics.Picture;
import android.net.Uri;
import android.net.http.SslError;
+import android.nfc.NfcAdapter;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
@@ -155,6 +156,7 @@ public class Controller
private IntentHandler mIntentHandler;
private PageDialogsHandler mPageDialogsHandler;
private NetworkStateHandler mNetworkHandler;
+ private NfcHandler mNfcHandler;
private Message mAutoFillSetupMessage;
@@ -233,6 +235,7 @@ public class Controller
mUrlHandler = new UrlHandler(this);
mIntentHandler = new IntentHandler(mActivity, this);
mPageDialogsHandler = new PageDialogsHandler(mActivity, this);
+ mNfcHandler = new NfcHandler(mActivity, this);
PowerManager pm = (PowerManager) mActivity
.getSystemService(Context.POWER_SERVICE);
@@ -531,6 +534,11 @@ public class Controller
}
+
+ public Tab getCurrentTab() {
+ return mTabControl.getCurrentTab();
+ }
+
@Override
public void shareCurrentPage() {
shareCurrentPage(mTabControl.getCurrentTab());
@@ -616,9 +624,11 @@ public class Controller
}
mUi.onPause();
mNetworkHandler.onPause();
+ mNfcHandler.onPause();
WebView.disablePlatformNotifications();
mCrashRecoveryHandler.backupState();
+
}
void onSaveInstanceState(Bundle outState, boolean saveImages) {
@@ -649,8 +659,10 @@ public class Controller
mHandler.removeMessages(RELEASE_WAKELOCK);
mWakeLock.release();
}
+
mUi.onResume();
mNetworkHandler.onResume();
+ mNfcHandler.onResume();
WebView.enablePlatformNotifications();
}
@@ -820,6 +832,7 @@ public class Controller
mWakeLock.release();
}
}
+
// Performance probe
if (false) {
Performance.onPageFinished(tab.getUrl());
diff --git a/src/com/android/browser/NfcHandler.java b/src/com/android/browser/NfcHandler.java
new file mode 100644
index 0000000..bdfe25e
--- /dev/null
+++ b/src/com/android/browser/NfcHandler.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.app.Activity;
+import android.nfc.NdefMessage;
+import android.nfc.NdefRecord;
+import android.nfc.NfcAdapter;
+
+/** This class implements sharing the URL of the currently
+ * shown browser page over NFC. Sharing is only active
+ * when the activity is in the foreground and resumed.
+ * Incognito tabs will not be shared over NFC.
+ */
+public class NfcHandler implements NfcAdapter.NdefPushCallback {
+ private NfcAdapter mNfcAdapter;
+ private Activity mActivity;
+ private Controller mController;
+
+ public NfcHandler(Activity browser, Controller controller) {
+ mActivity = browser;
+ mController = controller;
+ mNfcAdapter = NfcAdapter.getDefaultAdapter(mActivity);
+ }
+
+ void onPause() {
+ if (mNfcAdapter != null) {
+ mNfcAdapter.disableForegroundNdefPush(mActivity);
+ }
+ }
+
+ void onResume() {
+ if (mNfcAdapter != null) {
+ mNfcAdapter.enableForegroundNdefPush(mActivity, this);
+ }
+ }
+
+ @Override
+ public NdefMessage createMessage() {
+ Tab currentTab = mController.getCurrentTab();
+ if (currentTab == null) {
+ return null;
+ }
+ String currentUrl = currentTab.getUrl();
+ if (currentUrl != null && currentTab.getWebView() != null &&
+ !currentTab.getWebView().isPrivateBrowsingEnabled()) {
+ NdefRecord record = new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI,
+ NdefRecord.RTD_URI, new byte[] {}, currentUrl.getBytes());
+ NdefMessage msg = new NdefMessage(new NdefRecord[] { record });
+ return msg;
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public void onMessagePushed() {
+ }
+}