diff options
30 files changed, 460 insertions, 141 deletions
diff --git a/CleanSpec.mk b/CleanSpec.mk index 1f6860b2b226..96aa055cc9e9 100644 --- a/CleanSpec.mk +++ b/CleanSpec.mk @@ -245,6 +245,7 @@ $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framew $(call add-clean-step, rm -rf $(OUT_DIR)/host/common/obj/JAVA_LIBRARIES/platformprotos_intermediates) $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/framework/com.android.mediadrm.signer.jar) $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/framework/com.android.location.provider.jar) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/framework/com.android.future.usb.accessory.jar) # ****************************************************************** # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST ABOVE THIS BANNER # ****************************************************************** diff --git a/api/current.txt b/api/current.txt index da5addc63c3c..1ae46d5d8a0e 100644 --- a/api/current.txt +++ b/api/current.txt @@ -40176,6 +40176,7 @@ package android.telephony { field public static final java.lang.String KEY_SMS_REQUIRES_DESTINATION_NUMBER_CONVERSION_BOOL = "sms_requires_destination_number_conversion_bool"; field public static final java.lang.String KEY_SUPPORT_3GPP_CALL_FORWARDING_WHILE_ROAMING_BOOL = "support_3gpp_call_forwarding_while_roaming_bool"; field public static final java.lang.String KEY_SUPPORT_CONFERENCE_CALL_BOOL = "support_conference_call_bool"; + field public static final java.lang.String KEY_SUPPORT_EMERGENCY_SMS_OVER_IMS_BOOL = "support_emergency_sms_over_ims_bool"; field public static final java.lang.String KEY_SUPPORT_PAUSE_IMS_VIDEO_CALLS_BOOL = "support_pause_ims_video_calls_bool"; field public static final java.lang.String KEY_SUPPORT_SWAP_AFTER_MERGE_BOOL = "support_swap_after_merge_bool"; field public static final java.lang.String KEY_TREAT_DOWNGRADED_VIDEO_CALLS_AS_VIDEO_CALLS_BOOL = "treat_downgraded_video_calls_as_video_calls_bool"; diff --git a/core/java/android/util/Half.java b/core/java/android/util/Half.java index 84c2e8302e89..5718d994620d 100644 --- a/core/java/android/util/Half.java +++ b/core/java/android/util/Half.java @@ -20,8 +20,6 @@ import android.annotation.HalfFloat; import android.annotation.NonNull; import android.annotation.Nullable; -import sun.misc.FloatingDecimal; - /** * <p>The {@code Half} class is a wrapper and a utility class to manipulate half-precision 16-bit * <a href="https://en.wikipedia.org/wiki/Half-precision_floating-point_format">IEEE 754</a> @@ -1026,7 +1024,7 @@ public final class Half extends Number implements Comparable<Half> { * half-precision float value */ public static @HalfFloat short parseHalf(@NonNull String s) throws NumberFormatException { - return toHalf(FloatingDecimal.parseFloat(s)); + return toHalf(Float.parseFloat(s)); } /** diff --git a/core/java/com/android/internal/net/NetworkStatsFactory.java b/core/java/com/android/internal/net/NetworkStatsFactory.java index 41802cc60617..fb54e6940056 100644 --- a/core/java/com/android/internal/net/NetworkStatsFactory.java +++ b/core/java/com/android/internal/net/NetworkStatsFactory.java @@ -192,7 +192,7 @@ public class NetworkStatsFactory { reader.finishLine(); } } catch (NullPointerException|NumberFormatException e) { - throw new ProtocolException("problem parsing stats", e); + throw protocolExceptionWithCause("problem parsing stats", e); } finally { IoUtils.closeQuietly(reader); StrictMode.setThreadPolicy(savedPolicy); @@ -242,7 +242,7 @@ public class NetworkStatsFactory { reader.finishLine(); } } catch (NullPointerException|NumberFormatException e) { - throw new ProtocolException("problem parsing stats", e); + throw protocolExceptionWithCause("problem parsing stats", e); } finally { IoUtils.closeQuietly(reader); StrictMode.setThreadPolicy(savedPolicy); @@ -339,7 +339,7 @@ public class NetworkStatsFactory { reader.finishLine(); } } catch (NullPointerException|NumberFormatException e) { - throw new ProtocolException("problem parsing idx " + idx, e); + throw protocolExceptionWithCause("problem parsing idx " + idx, e); } finally { IoUtils.closeQuietly(reader); StrictMode.setThreadPolicy(savedPolicy); @@ -376,4 +376,10 @@ public class NetworkStatsFactory { @VisibleForTesting public static native int nativeReadNetworkStatsDev(NetworkStats stats); + + private static ProtocolException protocolExceptionWithCause(String message, Throwable cause) { + ProtocolException pe = new ProtocolException(message); + pe.initCause(cause); + return pe; + } } diff --git a/core/tests/coretests/AndroidTest.xml b/core/tests/coretests/AndroidTest.xml index 23d70b8dedd4..4b70cda87055 100644 --- a/core/tests/coretests/AndroidTest.xml +++ b/core/tests/coretests/AndroidTest.xml @@ -23,5 +23,6 @@ <test class="com.android.tradefed.testtype.AndroidJUnitTest" > <option name="package" value="com.android.frameworks.coretests" /> <option name="runner" value="android.support.test.runner.AndroidJUnitRunner" /> + <option name="hidden-api-checks" value="false"/> </test> </configuration> diff --git a/libs/usb/Android.bp b/libs/usb/Android.bp index b8f29043e597..027a7488f723 100644 --- a/libs/usb/Android.bp +++ b/libs/usb/Android.bp @@ -1 +1,23 @@ +// +// Copyright (C) 2018 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. +// + +java_sdk_library { + name: "com.android.future.usb.accessory", + srcs: ["src/**/*.java"], + api_packages: ["com.android.future.usb"], +} + subdirs = ["tests/*"] diff --git a/libs/usb/Android.mk b/libs/usb/Android.mk deleted file mode 100644 index 129828fd463b..000000000000 --- a/libs/usb/Android.mk +++ /dev/null @@ -1,27 +0,0 @@ -# -# 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. -# - -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-java-files-under,src) - -LOCAL_MODULE_TAGS := optional - -LOCAL_MODULE:= com.android.future.usb.accessory - -include $(BUILD_JAVA_LIBRARY) diff --git a/libs/usb/api/current.txt b/libs/usb/api/current.txt new file mode 100644 index 000000000000..8488db5b0f86 --- /dev/null +++ b/libs/usb/api/current.txt @@ -0,0 +1,25 @@ +package com.android.future.usb { + + public class UsbAccessory { + method public java.lang.String getDescription(); + method public java.lang.String getManufacturer(); + method public java.lang.String getModel(); + method public java.lang.String getSerial(); + method public java.lang.String getUri(); + method public java.lang.String getVersion(); + } + + public class UsbManager { + method public static com.android.future.usb.UsbAccessory getAccessory(android.content.Intent); + method public com.android.future.usb.UsbAccessory[] getAccessoryList(); + method public static com.android.future.usb.UsbManager getInstance(android.content.Context); + method public boolean hasPermission(com.android.future.usb.UsbAccessory); + method public android.os.ParcelFileDescriptor openAccessory(com.android.future.usb.UsbAccessory); + method public void requestPermission(com.android.future.usb.UsbAccessory, android.app.PendingIntent); + field public static final java.lang.String ACTION_USB_ACCESSORY_ATTACHED = "android.hardware.usb.action.USB_ACCESSORY_ATTACHED"; + field public static final java.lang.String ACTION_USB_ACCESSORY_DETACHED = "android.hardware.usb.action.USB_ACCESSORY_DETACHED"; + field public static final java.lang.String EXTRA_PERMISSION_GRANTED = "permission"; + } + +} + diff --git a/libs/usb/api/removed.txt b/libs/usb/api/removed.txt new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/libs/usb/api/removed.txt diff --git a/libs/usb/api/system-current.txt b/libs/usb/api/system-current.txt new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/libs/usb/api/system-current.txt diff --git a/libs/usb/api/system-removed.txt b/libs/usb/api/system-removed.txt new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/libs/usb/api/system-removed.txt diff --git a/libs/usb/api/test-current.txt b/libs/usb/api/test-current.txt new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/libs/usb/api/test-current.txt diff --git a/libs/usb/api/test-removed.txt b/libs/usb/api/test-removed.txt new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/libs/usb/api/test-removed.txt diff --git a/libs/usb/tests/AccessoryChat/Android.mk b/libs/usb/tests/AccessoryChat/Android.mk index ecb455a90e29..cfe2da1eb471 100644 --- a/libs/usb/tests/AccessoryChat/Android.mk +++ b/libs/usb/tests/AccessoryChat/Android.mk @@ -23,4 +23,6 @@ LOCAL_SRC_FILES := $(call all-subdir-java-files) LOCAL_PACKAGE_NAME := AccessoryChat +LOCAL_PRIVATE_PLATFORM_APIS := true + include $(BUILD_PACKAGE) diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java b/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java index 851b78cfcd49..ecbcb406666d 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java @@ -27,7 +27,6 @@ import com.android.systemui.util.AlarmTimeout; import com.android.systemui.util.wakelock.WakeLock; import java.util.Calendar; -import java.util.GregorianCalendar; /** * The policy controlling doze. @@ -139,7 +138,7 @@ public class DozeUi implements DozeMachine.Part { } private long roundToNextMinute(long timeInMillis) { - Calendar calendar = GregorianCalendar.getInstance(); + Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(timeInMillis); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); diff --git a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java index 2d2869d8817b..5a6a1c26caf5 100644..100755 --- a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java +++ b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java @@ -251,12 +251,13 @@ public class PipManager implements BasePipManager { entry = Pair.<String, String>create(packageAndClassName[0], null); break; case 2: - if (packageAndClassName[1] != null - && packageAndClassName[1].startsWith(".")) { - entry = Pair.<String, String>create( - packageAndClassName[0], - packageAndClassName[0] + packageAndClassName[1]); + if (packageAndClassName[1] != null) { + entry = Pair.<String, String>create(packageAndClassName[0], + packageAndClassName[1].startsWith(".") + ? packageAndClassName[0] + packageAndClassName[1] + : packageAndClassName[1]); } + break; } if (entry != null) { sSettingsPackageAndClassNamePairList.add(entry); diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 0b24db00368f..28ac78493793 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -2191,6 +2191,7 @@ public class ConnectivityService extends IConnectivityManager.Stub updateCapabilities(oldScore, nai, nai.networkCapabilities); // If score has changed, rebroadcast to NetworkFactories. b/17726566 if (oldScore != nai.getCurrentScore()) sendUpdatedScoreToFactories(nai); + if (valid) handleFreshlyValidatedNetwork(nai); } updateInetCondition(nai); // Let the NetworkAgent know the state of its network @@ -2285,6 +2286,16 @@ public class ConnectivityService extends IConnectivityManager.Stub mDefaultRequest.networkCapabilities, nai.networkCapabilities); } + private void handleFreshlyValidatedNetwork(NetworkAgentInfo nai) { + if (nai == null) return; + // If the Private DNS mode is opportunistic, reprogram the DNS servers + // in order to restart a validation pass from within netd. + final PrivateDnsConfig cfg = mDnsManager.getPrivateDnsConfig(); + if (cfg.useTls && TextUtils.isEmpty(cfg.hostname)) { + updateDnses(nai.linkProperties, null, nai.network.netId); + } + } + private void handlePrivateDnsSettingsChanged() { final PrivateDnsConfig cfg = mDnsManager.getPrivateDnsConfig(); diff --git a/services/core/java/com/android/server/connectivity/tethering/TetherInterfaceStateMachine.java b/services/core/java/com/android/server/connectivity/tethering/TetherInterfaceStateMachine.java index fbee86a84f85..9e6b659dbf93 100644 --- a/services/core/java/com/android/server/connectivity/tethering/TetherInterfaceStateMachine.java +++ b/services/core/java/com/android/server/connectivity/tethering/TetherInterfaceStateMachine.java @@ -379,7 +379,7 @@ public class TetherInterfaceStateMachine extends StateMachine { // that adding routes that already exist does not cause an // error (EEXIST is silently ignored). mNMService.addInterfaceToLocalNetwork(mIfaceName, toBeAdded); - } catch (RemoteException e) { + } catch (Exception e) { mLog.e("Failed to add IPv6 routes to local table: " + e); } diff --git a/services/net/java/android/net/netlink/NetlinkSocket.java b/services/net/java/android/net/netlink/NetlinkSocket.java index 5af3c299bfc1..cfcba3a84f51 100644 --- a/services/net/java/android/net/netlink/NetlinkSocket.java +++ b/services/net/java/android/net/netlink/NetlinkSocket.java @@ -59,10 +59,9 @@ public class NetlinkSocket { final String errPrefix = "Error in NetlinkSocket.sendOneShotKernelMessage"; final long IO_TIMEOUT = 300L; - FileDescriptor fd; + final FileDescriptor fd = forProto(nlProto); try { - fd = forProto(nlProto); connectToKernel(fd); sendMessage(fd, msg, 0, msg.length, IO_TIMEOUT); final ByteBuffer bytes = recvMessage(fd, DEFAULT_RECV_BUFSIZE, IO_TIMEOUT); @@ -96,9 +95,9 @@ public class NetlinkSocket { } catch (SocketException e) { Log.e(TAG, errPrefix, e); throw new ErrnoException(errPrefix, EIO, e); + } finally { + IoUtils.closeQuietly(fd); } - - IoUtils.closeQuietly(fd); } public static FileDescriptor forProto(int nlProto) throws ErrnoException { diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index b672e690d45f..102d0f7a86b7 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -113,6 +113,14 @@ public class CarrierConfigManager { public static final String KEY_SIM_NETWORK_UNLOCK_ALLOW_DISMISS_BOOL = "sim_network_unlock_allow_dismiss_bool"; + /** + * Flag indicating whether or not sending emergency SMS messages over IMS + * is supported when in LTE/limited LTE (Emergency only) service mode.. + * + */ + public static final String + KEY_SUPPORT_EMERGENCY_SMS_OVER_IMS_BOOL = "support_emergency_sms_over_ims_bool"; + /** Flag indicating if the phone is a world phone */ public static final String KEY_WORLD_PHONE_BOOL = "world_phone_bool"; @@ -1011,6 +1019,26 @@ public class CarrierConfigManager { public static final String KEY_CARRIER_NAME_STRING = "carrier_name_string"; /** + * Override the registered PLMN name using #KEY_CDMA_HOME_REGISTERED_PLMN_NAME_STRING. + * + * If true, then the registered PLMN name (only for CDMA/CDMA-LTE and only when not roaming) + * will be #KEY_CDMA_HOME_REGISTERED_PLMN_NAME_STRING. If false, or if phone type is not + * CDMA/CDMA-LTE or if roaming, then #KEY_CDMA_HOME_REGISTERED_PLMN_NAME_STRING will be ignored. + * @hide + */ + public static final String KEY_CDMA_HOME_REGISTERED_PLMN_NAME_OVERRIDE_BOOL = + "cdma_home_registered_plmn_name_override_bool"; + + /** + * String to identify registered PLMN name in CarrierConfig app. This string overrides + * registered PLMN name if #KEY_CDMA_HOME_REGISTERED_PLMN_NAME_OVERRIDE_BOOL is true, phone type + * is CDMA/CDMA-LTE and device is not in roaming state; otherwise, it will be ignored. + * @hide + */ + public static final String KEY_CDMA_HOME_REGISTERED_PLMN_NAME_STRING = + "cdma_home_registered_plmn_name_string"; + + /** * If this is true, the SIM card (through Customer Service Profile EF file) will be able to * prevent manual operator selection. If false, this SIM setting will be ignored and manual * operator selection will always be available. See CPHS4_2.WW6, CPHS B.4.7.1 for more @@ -1528,7 +1556,7 @@ public class CarrierConfigManager { public static final String KEY_EDITABLE_WFC_ROAMING_MODE_BOOL = "editable_wfc_roaming_mode_bool"; - /** + /** * Determine whether current lpp_mode used for E-911 needs to be kept persistently. * {@code false} - not keeping the lpp_mode means using default configuration of gps.conf * when sim is not presented. @@ -1967,6 +1995,7 @@ public class CarrierConfigManager { sDefaults.putBoolean(KEY_SHOW_APN_SETTING_CDMA_BOOL, false); sDefaults.putBoolean(KEY_SHOW_CDMA_CHOICES_BOOL, false); sDefaults.putBoolean(KEY_SMS_REQUIRES_DESTINATION_NUMBER_CONVERSION_BOOL, false); + sDefaults.putBoolean(KEY_SUPPORT_EMERGENCY_SMS_OVER_IMS_BOOL, false); sDefaults.putBoolean(KEY_SHOW_ONSCREEN_DIAL_BUTTON_BOOL, true); sDefaults.putBoolean(KEY_SIM_NETWORK_UNLOCK_ALLOW_DISMISS_BOOL, true); sDefaults.putBoolean(KEY_SUPPORT_PAUSE_IMS_VIDEO_CALLS_BOOL, false); @@ -2069,6 +2098,8 @@ public class CarrierConfigManager { sDefaults.putBoolean(KEY_CONFIG_WIFI_DISABLE_IN_ECBM, false); sDefaults.putBoolean(KEY_CARRIER_NAME_OVERRIDE_BOOL, false); sDefaults.putString(KEY_CARRIER_NAME_STRING, ""); + sDefaults.putBoolean(KEY_CDMA_HOME_REGISTERED_PLMN_NAME_OVERRIDE_BOOL, false); + sDefaults.putString(KEY_CDMA_HOME_REGISTERED_PLMN_NAME_STRING, ""); sDefaults.putBoolean(KEY_SUPPORT_DIRECT_FDN_DIALING_BOOL, false); sDefaults.putBoolean(KEY_CARRIER_DEFAULT_DATA_ROAMING_ENABLED_BOOL, false); sDefaults.putBoolean(KEY_SKIP_CF_FAIL_TO_DISABLE_DIALOG_BOOL, false); diff --git a/telephony/java/android/telephony/CellSignalStrengthLte.java b/telephony/java/android/telephony/CellSignalStrengthLte.java index 7e86966e2c1b..2b6928e2e4f1 100644 --- a/telephony/java/android/telephony/CellSignalStrengthLte.java +++ b/telephony/java/android/telephony/CellSignalStrengthLte.java @@ -121,6 +121,8 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P /** * Get reference signal received quality + * + * @return the RSRQ if available or Integer.MAX_VALUE if unavailable. */ public int getRsrq() { return mRsrq; @@ -128,13 +130,17 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P /** * Get reference signal signal-to-noise ratio + * + * @return the RSSNR if available or Integer.MAX_VALUE if unavailable. */ public int getRssnr() { return mRssnr; } /** - * Get reference signal received power + * Get reference signal received power in dBm + * + * @return the RSRP of the measured cell. */ public int getRsrp() { return mRsrp; @@ -142,13 +148,17 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P /** * Get channel quality indicator + * + * @return the CQI if available or Integer.MAX_VALUE if unavailable. */ public int getCqi() { return mCqi; } /** - * Get signal strength as dBm + * Get signal strength in dBm + * + * @return the RSRP of the measured cell. */ @Override public int getDbm() { @@ -175,7 +185,8 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P * Get the timing advance value for LTE, as a value in range of 0..1282. * Integer.MAX_VALUE is reported when there is no active RRC * connection. Refer to 3GPP 36.213 Sec 4.2.3 - * @return the LTE timing advance, if available. + * + * @return the LTE timing advance if available or Integer.MAX_VALUE if unavailable. */ public int getTimingAdvance() { return mTimingAdvance; diff --git a/telephony/java/android/telephony/LocationAccessPolicy.java b/telephony/java/android/telephony/LocationAccessPolicy.java index 26ffe3216bdc..19b3d0d41a0d 100644 --- a/telephony/java/android/telephony/LocationAccessPolicy.java +++ b/telephony/java/android/telephony/LocationAccessPolicy.java @@ -21,31 +21,27 @@ import android.annotation.NonNull; import android.annotation.UserIdInt; import android.app.ActivityManager; import android.app.AppOpsManager; -import android.content.BroadcastReceiver; import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; import android.content.pm.PackageManager; import android.content.pm.UserInfo; -import android.location.LocationManager; import android.os.Binder; -import android.os.Build; import android.os.Process; import android.os.Trace; import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings; -import android.util.SparseBooleanArray; +import android.util.Log; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** * Helper for performing location access checks. * @hide */ public final class LocationAccessPolicy { + private static final String TAG = "LocationAccessPolicy"; + private static final boolean DBG = false; + /** * API to determine if the caller has permissions to get cell location. * @@ -58,10 +54,11 @@ public final class LocationAccessPolicy { int uid, int pid) throws SecurityException { Trace.beginSection("TelephonyLocationCheck"); try { - // Always allow the phone process to access location. This avoid breaking legacy code - // that rely on public-facing APIs to access cell location, and it doesn't create a - // info leak risk because the cell location is stored in the phone process anyway. - if (uid == Process.PHONE_UID) { + // Always allow the phone process and system server to access location. This avoid + // breaking legacy code that rely on public-facing APIs to access cell location, and + // it doesn't create an info leak risk because the cell location is stored in the phone + // process anyway, and the system server already has location access. + if (uid == Process.PHONE_UID || uid == Process.SYSTEM_UID || uid == Process.ROOT_UID) { return true; } @@ -74,15 +71,18 @@ public final class LocationAccessPolicy { if (context.checkPermission(Manifest.permission.ACCESS_COARSE_LOCATION, pid, uid) == PackageManager.PERMISSION_DENIED) { + if (DBG) Log.w(TAG, "Permission checked failed (" + pid + "," + uid + ")"); return false; } final int opCode = AppOpsManager.permissionToOpCode( Manifest.permission.ACCESS_COARSE_LOCATION); if (opCode != AppOpsManager.OP_NONE && context.getSystemService(AppOpsManager.class) .noteOpNoThrow(opCode, uid, pkgName) != AppOpsManager.MODE_ALLOWED) { + if (DBG) Log.w(TAG, "AppOp check failed (" + uid + "," + pkgName + ")"); return false; } if (!isLocationModeEnabled(context, UserHandle.getUserId(uid))) { + if (DBG) Log.w(TAG, "Location disabled, failed, (" + uid + ")"); return false; } // If the user or profile is current, permission is granted. diff --git a/telephony/java/android/telephony/NetworkRegistrationState.java b/telephony/java/android/telephony/NetworkRegistrationState.java index bba779d0c175..e881549489a3 100644 --- a/telephony/java/android/telephony/NetworkRegistrationState.java +++ b/telephony/java/android/telephony/NetworkRegistrationState.java @@ -85,12 +85,12 @@ public class NetworkRegistrationState implements Parcelable { public static final int SERVICE_TYPE_VIDEO = 4; public static final int SERVICE_TYPE_EMERGENCY = 5; - /** {@link AccessNetworkConstants.TransportType}*/ - private final int mTransportType; - @Domain private final int mDomain; + /** {@link AccessNetworkConstants.TransportType}*/ + private final int mTransportType; + @RegState private final int mRegState; @@ -112,19 +112,19 @@ public class NetworkRegistrationState implements Parcelable { private DataSpecificRegistrationStates mDataSpecificStates; /** - * @param transportType Transport type. Must be {@link AccessNetworkConstants.TransportType} * @param domain Network domain. Must be DOMAIN_CS or DOMAIN_PS. + * @param transportType Transport type. Must be {@link AccessNetworkConstants.TransportType} * @param regState Network registration state. * @param accessNetworkTechnology See TelephonyManager NETWORK_TYPE_XXXX. * @param reasonForDenial Reason for denial if the registration state is DENIED. * @param availableServices The supported service. * @param cellIdentity The identity representing a unique cell */ - public NetworkRegistrationState(int transportType, int domain, int regState, + public NetworkRegistrationState(int domain, int transportType, int regState, int accessNetworkTechnology, int reasonForDenial, boolean emergencyOnly, int[] availableServices, @Nullable CellIdentity cellIdentity) { - mTransportType = transportType; mDomain = domain; + mTransportType = transportType; mRegState = regState; mAccessNetworkTechnology = accessNetworkTechnology; mReasonForDenial = reasonForDenial; @@ -137,11 +137,11 @@ public class NetworkRegistrationState implements Parcelable { * Constructor for voice network registration states. * @hide */ - public NetworkRegistrationState(int transportType, int domain, int regState, + public NetworkRegistrationState(int domain, int transportType, int regState, int accessNetworkTechnology, int reasonForDenial, boolean emergencyOnly, int[] availableServices, @Nullable CellIdentity cellIdentity, boolean cssSupported, int roamingIndicator, int systemIsInPrl, int defaultRoamingIndicator) { - this(transportType, domain, regState, accessNetworkTechnology, + this(domain, transportType, regState, accessNetworkTechnology, reasonForDenial, emergencyOnly, availableServices, cellIdentity); mVoiceSpecificStates = new VoiceSpecificRegistrationStates(cssSupported, roamingIndicator, @@ -152,18 +152,18 @@ public class NetworkRegistrationState implements Parcelable { * Constructor for data network registration states. * @hide */ - public NetworkRegistrationState(int transportType, int domain, int regState, + public NetworkRegistrationState(int domain, int transportType, int regState, int accessNetworkTechnology, int reasonForDenial, boolean emergencyOnly, int[] availableServices, @Nullable CellIdentity cellIdentity, int maxDataCalls) { - this(transportType, domain, regState, accessNetworkTechnology, + this(domain, transportType, regState, accessNetworkTechnology, reasonForDenial, emergencyOnly, availableServices, cellIdentity); mDataSpecificStates = new DataSpecificRegistrationStates(maxDataCalls); } protected NetworkRegistrationState(Parcel source) { - mTransportType = source.readInt(); mDomain = source.readInt(); + mTransportType = source.readInt(); mRegState = source.readInt(); mAccessNetworkTechnology = source.readInt(); mReasonForDenial = source.readInt(); @@ -260,8 +260,8 @@ public class NetworkRegistrationState implements Parcelable { @Override public String toString() { return new StringBuilder("NetworkRegistrationState{") - .append("transportType=").append(mTransportType) .append(" domain=").append((mDomain == DOMAIN_CS) ? "CS" : "PS") + .append("transportType=").append(mTransportType) .append(" regState=").append(regStateToString(mRegState)) .append(" accessNetworkTechnology=") .append(TelephonyManager.getNetworkTypeName(mAccessNetworkTechnology)) @@ -290,8 +290,8 @@ public class NetworkRegistrationState implements Parcelable { } NetworkRegistrationState other = (NetworkRegistrationState) o; - return mTransportType == other.mTransportType - && mDomain == other.mDomain + return mDomain == other.mDomain + && mTransportType == other.mTransportType && mRegState == other.mRegState && mAccessNetworkTechnology == other.mAccessNetworkTechnology && mReasonForDenial == other.mReasonForDenial @@ -305,8 +305,8 @@ public class NetworkRegistrationState implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { - dest.writeInt(mTransportType); dest.writeInt(mDomain); + dest.writeInt(mTransportType); dest.writeInt(mRegState); dest.writeInt(mAccessNetworkTechnology); dest.writeInt(mReasonForDenial); diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java index e971d08aae7a..caf1d6676d04 100644 --- a/telephony/java/android/telephony/ServiceState.java +++ b/telephony/java/android/telephony/ServiceState.java @@ -30,6 +30,7 @@ import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Objects; /** * Contains phone state and service related information. @@ -723,38 +724,40 @@ public class ServiceState implements Parcelable { @Override public int hashCode() { - return ((mVoiceRegState * 31) - + (mDataRegState * 37) - + mVoiceRoamingType - + mDataRoamingType - + mChannelNumber - + Arrays.hashCode(mCellBandwidths) - + (mIsManualNetworkSelection ? 1 : 0) - + ((null == mVoiceOperatorAlphaLong) ? 0 : mVoiceOperatorAlphaLong.hashCode()) - + ((null == mVoiceOperatorAlphaShort) ? 0 : mVoiceOperatorAlphaShort.hashCode()) - + ((null == mVoiceOperatorNumeric) ? 0 : mVoiceOperatorNumeric.hashCode()) - + ((null == mDataOperatorAlphaLong) ? 0 : mDataOperatorAlphaLong.hashCode()) - + ((null == mDataOperatorAlphaShort) ? 0 : mDataOperatorAlphaShort.hashCode()) - + ((null == mDataOperatorNumeric) ? 0 : mDataOperatorNumeric.hashCode()) - + mCdmaRoamingIndicator - + mCdmaDefaultRoamingIndicator - + (mIsEmergencyOnly ? 1 : 0) - + (mIsDataRoamingFromRegistration ? 1 : 0)); + return Objects.hash( + mVoiceRegState, + mDataRegState, + mVoiceRoamingType, + mDataRoamingType, + mChannelNumber, + mCellBandwidths, + mVoiceOperatorAlphaLong, + mVoiceOperatorAlphaShort, + mVoiceOperatorNumeric, + mDataOperatorAlphaLong, + mDataOperatorAlphaShort, + mDataOperatorNumeric, + mIsManualNetworkSelection, + mRilVoiceRadioTechnology, + mRilDataRadioTechnology, + mCssIndicator, + mNetworkId, + mSystemId, + mCdmaRoamingIndicator, + mCdmaDefaultRoamingIndicator, + mCdmaEriIconIndex, + mCdmaEriIconMode, + mIsEmergencyOnly, + mIsDataRoamingFromRegistration, + mIsUsingCarrierAggregation, + mLteEarfcnRsrpBoost, + mNetworkRegistrationStates); } @Override public boolean equals (Object o) { - ServiceState s; - - try { - s = (ServiceState) o; - } catch (ClassCastException ex) { - return false; - } - - if (o == null) { - return false; - } + if (!(o instanceof ServiceState)) return false; + ServiceState s = (ServiceState) o; return (mVoiceRegState == s.mVoiceRegState && mDataRegState == s.mDataRegState @@ -1562,13 +1565,14 @@ public class ServiceState implements Parcelable { /** * Get the network registration states with given transport type and domain. * + * @param domain The network domain. Must be {@link NetworkRegistrationState#DOMAIN_CS} or + * {@link NetworkRegistrationState#DOMAIN_PS}. * @param transportType The transport type. See {@link AccessNetworkConstants.TransportType} - * @param domain The network domain. Must be DOMAIN_CS or DOMAIN_PS. * @return The matching NetworkRegistrationState. * @hide */ @SystemApi - public NetworkRegistrationState getNetworkRegistrationStates(int transportType, int domain) { + public NetworkRegistrationState getNetworkRegistrationStates(int domain, int transportType) { synchronized (mNetworkRegistrationStates) { for (NetworkRegistrationState networkRegistrationState : mNetworkRegistrationStates) { if (networkRegistrationState.getTransportType() == transportType diff --git a/telephony/java/android/telephony/data/ApnSetting.java b/telephony/java/android/telephony/data/ApnSetting.java index bb181e680d86..296e1de1b135 100644 --- a/telephony/java/android/telephony/data/ApnSetting.java +++ b/telephony/java/android/telephony/data/ApnSetting.java @@ -70,7 +70,12 @@ public class ApnSetting implements Parcelable { private static final String UNSPECIFIED_STRING = ""; /** - * All APN types. + * APN type for none. Should only be used for initialization. + * @hide + */ + public static final int TYPE_NONE = ApnTypes.NONE; + /** + * APN type for all APNs. * @hide */ public static final int TYPE_ALL = ApnTypes.ALL; diff --git a/telephony/java/android/telephony/ims/ImsExternalCallState.java b/telephony/java/android/telephony/ims/ImsExternalCallState.java index e82c115cb4b3..e158fa84e34e 100644 --- a/telephony/java/android/telephony/ims/ImsExternalCallState.java +++ b/telephony/java/android/telephony/ims/ImsExternalCallState.java @@ -45,6 +45,7 @@ public final class ImsExternalCallState implements Parcelable { private int mCallId; // Number private Uri mAddress; + private Uri mLocalAddress; private boolean mIsPullable; // CALL_STATE_CONFIRMED / CALL_STATE_TERMINATED private int mCallState; @@ -69,10 +70,24 @@ public final class ImsExternalCallState implements Parcelable { } /** @hide */ + public ImsExternalCallState(int callId, Uri address, Uri localAddress, + boolean isPullable, int callState, int callType, boolean isCallheld) { + mCallId = callId; + mAddress = address; + mLocalAddress = localAddress; + mIsPullable = isPullable; + mCallState = callState; + mCallType = callType; + mIsHeld = isCallheld; + Rlog.d(TAG, "ImsExternalCallState = " + this); + } + + /** @hide */ public ImsExternalCallState(Parcel in) { mCallId = in.readInt(); ClassLoader classLoader = ImsExternalCallState.class.getClassLoader(); mAddress = in.readParcelable(classLoader); + mLocalAddress = in.readParcelable(classLoader); mIsPullable = (in.readInt() != 0); mCallState = in.readInt(); mCallType = in.readInt(); @@ -89,6 +104,7 @@ public final class ImsExternalCallState implements Parcelable { public void writeToParcel(Parcel out, int flags) { out.writeInt(mCallId); out.writeParcelable(mAddress, 0); + out.writeParcelable(mLocalAddress, 0); out.writeInt(mIsPullable ? 1 : 0); out.writeInt(mCallState); out.writeInt(mCallType); @@ -117,6 +133,11 @@ public final class ImsExternalCallState implements Parcelable { return mAddress; } + /** @hide */ + public Uri getLocalAddress() { + return mLocalAddress; + } + public boolean isCallPullable() { return mIsPullable; } @@ -137,6 +158,7 @@ public final class ImsExternalCallState implements Parcelable { public String toString() { return "ImsExternalCallState { mCallId = " + mCallId + ", mAddress = " + Log.pii(mAddress) + + ", mLocalAddress = " + Log.pii(mLocalAddress) + ", mIsPullable = " + mIsPullable + ", mCallState = " + mCallState + ", mCallType = " + mCallType + diff --git a/telephony/java/com/android/internal/telephony/DctConstants.java b/telephony/java/com/android/internal/telephony/DctConstants.java index e54691702776..86cb1b74abd3 100644 --- a/telephony/java/com/android/internal/telephony/DctConstants.java +++ b/telephony/java/com/android/internal/telephony/DctConstants.java @@ -103,19 +103,6 @@ public class DctConstants { /***** Constants *****/ - public static final int APN_INVALID_ID = -1; - public static final int APN_DEFAULT_ID = 0; - public static final int APN_MMS_ID = 1; - public static final int APN_SUPL_ID = 2; - public static final int APN_DUN_ID = 3; - public static final int APN_HIPRI_ID = 4; - public static final int APN_IMS_ID = 5; - public static final int APN_FOTA_ID = 6; - public static final int APN_CBS_ID = 7; - public static final int APN_IA_ID = 8; - public static final int APN_EMERGENCY_ID = 9; - public static final int APN_NUM_TYPES = 10; - public static final int INVALID = -1; public static final int DISABLED = 0; public static final int ENABLED = 1; diff --git a/telephony/java/com/android/internal/telephony/ISmsBaseImpl.java b/telephony/java/com/android/internal/telephony/ISmsBaseImpl.java new file mode 100644 index 000000000000..cc1d105ae29e --- /dev/null +++ b/telephony/java/com/android/internal/telephony/ISmsBaseImpl.java @@ -0,0 +1,199 @@ +/* Copyright (C) 2018 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.internal.telephony; + +import android.app.PendingIntent; +import android.net.Uri; +import java.lang.UnsupportedOperationException; +import java.util.List; + +public class ISmsBaseImpl extends ISms.Stub { + + @Override + public List<SmsRawData> getAllMessagesFromIccEfForSubscriber(int subId, String callingPkg) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean updateMessageOnIccEfForSubscriber(int subId, String callingPkg, + int messageIndex, int newStatus, byte[] pdu) throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public boolean copyMessageToIccEfForSubscriber(int subId, String callingPkg, int status, + byte[] pdu, byte[] smsc) throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public void sendDataForSubscriber(int subId, String callingPkg, String destAddr, + String scAddr, int destPort, byte[] data, PendingIntent sentIntent, + PendingIntent deliveryIntent) throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public void sendDataForSubscriberWithSelfPermissions(int subId, String callingPkg, + String destAddr, String scAddr, int destPort, byte[] data, + PendingIntent sentIntent, PendingIntent deliveryIntent) + throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public void sendTextForSubscriber(int subId, String callingPkg, String destAddr, + String scAddr, String text, PendingIntent sentIntent, + PendingIntent deliveryIntent, boolean persistMessageForNonDefaultSmsApp) + throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public void sendTextForSubscriberWithSelfPermissions(int subId, String callingPkg, + String destAddr, String scAddr, String text, PendingIntent sentIntent, + PendingIntent deliveryIntent, boolean persistMessage) + throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public void sendTextForSubscriberWithOptions(int subId, String callingPkg, String destAddr, + String scAddr, String text, PendingIntent sentIntent, + PendingIntent deliveryIntent, boolean persistMessageForNonDefaultSmsApp, + int priority, boolean expectMore, int validityPeriod) + throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public void injectSmsPduForSubscriber( + int subId, byte[] pdu, String format, PendingIntent receivedIntent) + throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public void sendMultipartTextForSubscriber(int subId, String callingPkg, + String destinationAddress, String scAddress, + List<String> parts, List<PendingIntent> sentIntents, + List<PendingIntent> deliveryIntents, boolean persistMessageForNonDefaultSmsApp) + throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public void sendMultipartTextForSubscriberWithOptions(int subId, String callingPkg, + String destinationAddress, String scAddress, + List<String> parts, List<PendingIntent> sentIntents, + List<PendingIntent> deliveryIntents, boolean persistMessageForNonDefaultSmsApp, + int priority, boolean expectMore, int validityPeriod) + throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public boolean enableCellBroadcastForSubscriber(int subId, int messageIdentifier, int ranType) + throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public boolean disableCellBroadcastForSubscriber(int subId, int messageIdentifier, int ranType) + throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public boolean enableCellBroadcastRangeForSubscriber(int subId, int startMessageId, + int endMessageId, int ranType) throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public boolean disableCellBroadcastRangeForSubscriber(int subId, int startMessageId, + int endMessageId, int ranType) throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public int getPremiumSmsPermission(String packageName) throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public int getPremiumSmsPermissionForSubscriber(int subId, String packageName) + throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public void setPremiumSmsPermission(String packageName, int permission) throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public void setPremiumSmsPermissionForSubscriber(int subId, String packageName, + int permission) throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public boolean isImsSmsSupportedForSubscriber(int subId) throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public boolean isSmsSimPickActivityNeeded(int subId) throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public int getPreferredSmsSubscription() throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public String getImsSmsFormatForSubscriber(int subId) throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public boolean isSMSPromptEnabled() throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public void sendStoredText(int subId, String callingPkg, Uri messageUri, String scAddress, + PendingIntent sentIntent, PendingIntent deliveryIntent) + throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public void sendStoredMultipartText(int subId, String callingPkg, Uri messageUri, + String scAddress, List<PendingIntent> sentIntents, + List<PendingIntent> deliveryIntents) throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public String createAppSpecificSmsToken(int subId, String callingPkg, PendingIntent intent) + throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } +} diff --git a/tests/TouchLatency/app/src/main/java/com/prefabulated/touchlatency/TouchLatencyActivity.java b/tests/TouchLatency/app/src/main/java/com/prefabulated/touchlatency/TouchLatencyActivity.java index b763c78207de..b4b5ca7161fc 100644 --- a/tests/TouchLatency/app/src/main/java/com/prefabulated/touchlatency/TouchLatencyActivity.java +++ b/tests/TouchLatency/app/src/main/java/com/prefabulated/touchlatency/TouchLatencyActivity.java @@ -30,6 +30,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; +import android.os.Trace; import java.util.ArrayList; import java.util.Collections; @@ -42,6 +43,7 @@ class TouchLatencyView extends View implements View.OnTouchListener { public TouchLatencyView(Context context, AttributeSet attrs) { super(context, attrs); + Trace.beginSection("TouchLatencyView constructor"); setOnTouchListener(this); setWillNotDraw(false); mBluePaint = new Paint(Paint.ANTI_ALIAS_FLAG); @@ -63,48 +65,56 @@ class TouchLatencyView extends View implements View.OnTouchListener { mBallY = 100.0f; mVelocityX = 7.0f; mVelocityY = 7.0f; + Trace.endSection(); } @Override public boolean onTouch(View view, MotionEvent event) { + Trace.beginSection("TouchLatencyView onTouch"); int action = event.getActionMasked(); if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_MOVE) { mTouching = true; invalidate(); + + mTouchX = event.getX(); + mTouchY = event.getY(); } else if (action == MotionEvent.ACTION_UP) { mTouching = false; invalidate(); - return true; - } else { - return true; } - mTouchX = event.getX(); - mTouchY = event.getY(); + Trace.endSection(); return true; } private void drawTouch(Canvas canvas) { - if (!mTouching) { - Log.d(LOG_TAG, "Filling background"); - canvas.drawColor(BACKGROUND_COLOR); - return; - } + Trace.beginSection("TouchLatencyView drawTouch"); - float deltaX = (mTouchX - mLastDrawnX); - float deltaY = (mTouchY - mLastDrawnY); - float scaleFactor = (float) Math.sqrt(deltaX * deltaX + deltaY * deltaY) * 1.5f; + try { + if (!mTouching) { + Log.d(LOG_TAG, "Filling background"); + canvas.drawColor(BACKGROUND_COLOR); + return; + } - mLastDrawnX = mTouchX; - mLastDrawnY = mTouchY; + float deltaX = (mTouchX - mLastDrawnX); + float deltaY = (mTouchY - mLastDrawnY); + float scaleFactor = (float) Math.sqrt(deltaX * deltaX + deltaY * deltaY) * 1.5f; - canvas.drawColor(BACKGROUND_COLOR); - canvas.drawCircle(mTouchX, mTouchY, INNER_RADIUS + 3 * scaleFactor, mRedPaint); - canvas.drawCircle(mTouchX, mTouchY, INNER_RADIUS + 2 * scaleFactor, mYellowPaint); - canvas.drawCircle(mTouchX, mTouchY, INNER_RADIUS + scaleFactor, mGreenPaint); - canvas.drawCircle(mTouchX, mTouchY, INNER_RADIUS, mBluePaint); + mLastDrawnX = mTouchX; + mLastDrawnY = mTouchY; + + canvas.drawColor(BACKGROUND_COLOR); + canvas.drawCircle(mTouchX, mTouchY, INNER_RADIUS + 3 * scaleFactor, mRedPaint); + canvas.drawCircle(mTouchX, mTouchY, INNER_RADIUS + 2 * scaleFactor, mYellowPaint); + canvas.drawCircle(mTouchX, mTouchY, INNER_RADIUS + scaleFactor, mGreenPaint); + canvas.drawCircle(mTouchX, mTouchY, INNER_RADIUS, mBluePaint); + } finally { + Trace.endSection(); + } } private void drawBall(Canvas canvas) { + Trace.beginSection("TouchLatencyView drawBall"); int width = canvas.getWidth(); int height = canvas.getHeight(); @@ -141,25 +151,29 @@ class TouchLatencyView extends View implements View.OnTouchListener { canvas.drawColor(BACKGROUND_COLOR); canvas.drawOval(left, top, right, bottom, mYellowPaint); invalidate(); + Trace.endSection(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - + Trace.beginSection("TouchLatencyView onDraw"); if (mMode == 0) { drawTouch(canvas); } else { drawBall(canvas); } + Trace.endSection(); } public void changeMode(MenuItem item) { + Trace.beginSection("TouchLatencyView changeMode"); final int NUM_MODES = 2; final String modes[] = {"Touch", "Ball"}; mMode = (mMode + 1) % NUM_MODES; invalidate(); item.setTitle(modes[mMode]); + Trace.endSection(); } private Paint mBluePaint, mGreenPaint, mYellowPaint, mRedPaint; @@ -178,21 +192,26 @@ public class TouchLatencyActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + Trace.beginSection("TouchLatencyActivity onCreate"); setContentView(R.layout.activity_touch_latency); mTouchView = findViewById(R.id.canvasView); + Trace.endSection(); } @Override public boolean onCreateOptionsMenu(Menu menu) { + Trace.beginSection("TouchLatencyActivity onCreateOptionsMenu"); // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_touch_latency, menu); + Trace.endSection(); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { + Trace.beginSection("TouchLatencyActivity onOptionsItemSelected"); // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. @@ -203,6 +222,7 @@ public class TouchLatencyActivity extends Activity { mTouchView.changeMode(item); } + Trace.endSection(); return super.onOptionsItemSelected(item); } diff --git a/tests/net/AndroidTest.xml b/tests/net/AndroidTest.xml index f8ecc6b80cce..6e020a3daa2b 100644 --- a/tests/net/AndroidTest.xml +++ b/tests/net/AndroidTest.xml @@ -23,5 +23,6 @@ <test class="com.android.tradefed.testtype.AndroidJUnitTest" > <option name="package" value="com.android.frameworks.tests.net" /> <option name="runner" value="android.support.test.runner.AndroidJUnitRunner" /> + <option name="hidden-api-checks" value="false"/> </test> </configuration> |