diff options
4 files changed, 48 insertions, 31 deletions
diff --git a/cmds/svc/src/com/android/commands/svc/NfcCommand.java b/cmds/svc/src/com/android/commands/svc/NfcCommand.java index 020ca3387555..870e0078450f 100644 --- a/cmds/svc/src/com/android/commands/svc/NfcCommand.java +++ b/cmds/svc/src/com/android/commands/svc/NfcCommand.java @@ -16,10 +16,10 @@ package com.android.commands.svc; +import android.app.ActivityThread; import android.content.Context; -import android.nfc.INfcAdapter; -import android.os.RemoteException; -import android.os.ServiceManager; +import android.nfc.NfcAdapter; +import android.nfc.NfcManager; public class NfcCommand extends Svc.Command { @@ -42,27 +42,24 @@ public class NfcCommand extends Svc.Command { @Override public void run(String[] args) { - INfcAdapter adapter = INfcAdapter.Stub.asInterface( - ServiceManager.getService(Context.NFC_SERVICE)); - + Context context = ActivityThread.systemMain().getSystemContext(); + NfcManager nfcManager = context.getSystemService(NfcManager.class); + if (nfcManager == null) { + System.err.println("Got a null NfcManager, is the system running?"); + return; + } + NfcAdapter adapter = nfcManager.getDefaultAdapter(); if (adapter == null) { System.err.println("Got a null NfcAdapter, is the system running?"); return; } - - try { - if (args.length == 2 && "enable".equals(args[1])) { - adapter.enable(); - return; - } else if (args.length == 2 && "disable".equals(args[1])) { - adapter.disable(true); - return; - } - } catch (RemoteException e) { - System.err.println("NFC operation failed: " + e); + if (args.length == 2 && "enable".equals(args[1])) { + adapter.enable(); + return; + } else if (args.length == 2 && "disable".equals(args[1])) { + adapter.disable(true); return; } - System.err.println(longHelp()); } diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index da5e40aedbd2..f3cc59428a30 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -16111,11 +16111,6 @@ public class DevicePolicyManager { * Called by a profile owner of an organization-owned managed profile to suspend personal * apps on the device. When personal apps are suspended the device can only be used for calls. * - * <p>When personal apps are suspended, an ongoing notification about that is shown to the user. - * When the user taps the notification, system invokes {@link #ACTION_CHECK_POLICY_COMPLIANCE} - * in the profile owner package. Profile owner implementation that uses personal apps suspension - * must handle this intent. - * * @param admin Which {@link DeviceAdminReceiver} this request is associated with * @param suspended Whether personal apps should be suspended. * @throws IllegalStateException if the profile owner doesn't have an activity that handles diff --git a/core/java/android/app/contentsuggestions/OWNERS b/core/java/android/app/contentsuggestions/OWNERS index cf54c2a6fcbc..5f8de77c9dda 100644 --- a/core/java/android/app/contentsuggestions/OWNERS +++ b/core/java/android/app/contentsuggestions/OWNERS @@ -1,7 +1,4 @@ # Bug component: 643919 -augale@google.com -joannechung@google.com -markpun@google.com -lpeter@google.com -tymtsai@google.com +hackz@google.com +volnov@google.com diff --git a/nfc-extras/java/com/android/nfc_extras/NfcAdapterExtras.java b/nfc-extras/java/com/android/nfc_extras/NfcAdapterExtras.java index ffed80479662..a7c6c690f852 100644 --- a/nfc-extras/java/com/android/nfc_extras/NfcAdapterExtras.java +++ b/nfc-extras/java/com/android/nfc_extras/NfcAdapterExtras.java @@ -16,6 +16,8 @@ package com.android.nfc_extras; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.HashMap; import android.content.Context; @@ -30,6 +32,8 @@ import android.util.Log; * * There is a 1-1 relationship between an {@link NfcAdapterExtras} object and * a {@link NfcAdapter} object. + * + * TODO(b/303286040): Deprecate this API surface since this is no longer supported (see ag/443092) */ public final class NfcAdapterExtras { private static final String TAG = "NfcAdapterExtras"; @@ -81,6 +85,18 @@ public final class NfcAdapterExtras { } } + private static Context getContextFromNfcAdapter(NfcAdapter adapter) { + try { + Method method = NfcAdapter.class.getDeclaredMethod("getContext"); + method.setAccessible(true); + return (Context) method.invoke(adapter); + } catch (SecurityException | NoSuchMethodException | IllegalArgumentException + | IllegalAccessException | IllegalAccessError | InvocationTargetException e) { + Log.e(TAG, "Unable to get context from NfcAdapter"); + } + return null; + } + /** * Get the {@link NfcAdapterExtras} for the given {@link NfcAdapter}. * @@ -91,7 +107,7 @@ public final class NfcAdapterExtras { * @return the {@link NfcAdapterExtras} object for the given {@link NfcAdapter} */ public static NfcAdapterExtras get(NfcAdapter adapter) { - Context context = adapter.getContext(); + Context context = getContextFromNfcAdapter(adapter); if (context == null) { throw new UnsupportedOperationException( "You must pass a context to your NfcAdapter to use the NFC extras APIs"); @@ -112,7 +128,7 @@ public final class NfcAdapterExtras { private NfcAdapterExtras(NfcAdapter adapter) { mAdapter = adapter; - mPackageName = adapter.getContext().getPackageName(); + mPackageName = getContextFromNfcAdapter(adapter).getPackageName(); mEmbeddedEe = new NfcExecutionEnvironment(this); mRouteOnWhenScreenOn = new CardEmulationRoute(CardEmulationRoute.ROUTE_ON_WHEN_SCREEN_ON, mEmbeddedEe); @@ -156,12 +172,24 @@ public final class NfcAdapterExtras { } } + private static void attemptDeadServiceRecoveryOnNfcAdapter(NfcAdapter adapter, Exception e) { + try { + Method method = NfcAdapter.class.getDeclaredMethod( + "attemptDeadServiceRecovery", Exception.class); + method.setAccessible(true); + method.invoke(adapter, e); + } catch (SecurityException | NoSuchMethodException | IllegalArgumentException + | IllegalAccessException | IllegalAccessError | InvocationTargetException ex) { + Log.e(TAG, "Unable to attempt dead service recovery on NfcAdapter"); + } + } + /** * NFC service dead - attempt best effort recovery */ void attemptDeadServiceRecovery(Exception e) { Log.e(TAG, "NFC Adapter Extras dead - attempting to recover"); - mAdapter.attemptDeadServiceRecovery(e); + attemptDeadServiceRecoveryOnNfcAdapter(mAdapter, e); initService(mAdapter); } |