diff options
51 files changed, 522 insertions, 428 deletions
@@ -216,14 +216,6 @@ LOCAL_SRC_FILES += \ core/java/android/service/wallpaper/IWallpaperConnection.aidl \ core/java/android/service/wallpaper/IWallpaperEngine.aidl \ core/java/android/service/wallpaper/IWallpaperService.aidl \ - core/java/android/tv/ITvInputClient.aidl \ - core/java/android/tv/ITvInputHardware.aidl \ - core/java/android/tv/ITvInputHardwareCallback.aidl \ - core/java/android/tv/ITvInputManager.aidl \ - core/java/android/tv/ITvInputService.aidl \ - core/java/android/tv/ITvInputServiceCallback.aidl \ - core/java/android/tv/ITvInputSession.aidl \ - core/java/android/tv/ITvInputSessionCallback.aidl \ core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl\ core/java/android/view/accessibility/IAccessibilityInteractionConnectionCallback.aidl\ core/java/android/view/accessibility/IAccessibilityManager.aidl \ @@ -321,6 +313,14 @@ LOCAL_SRC_FILES += \ media/java/android/media/session/ISession.aidl \ media/java/android/media/session/ISessionCallback.aidl \ media/java/android/media/session/ISessionManager.aidl \ + media/java/android/media/tv/ITvInputClient.aidl \ + media/java/android/media/tv/ITvInputHardware.aidl \ + media/java/android/media/tv/ITvInputHardwareCallback.aidl \ + media/java/android/media/tv/ITvInputManager.aidl \ + media/java/android/media/tv/ITvInputService.aidl \ + media/java/android/media/tv/ITvInputServiceCallback.aidl \ + media/java/android/media/tv/ITvInputSession.aidl \ + media/java/android/media/tv/ITvInputSessionCallback.aidl \ telecomm/java/com/android/internal/telecomm/ICallService.aidl \ telecomm/java/com/android/internal/telecomm/ICallServiceAdapter.aidl \ telecomm/java/com/android/internal/telecomm/ICallServiceLookupResponse.aidl \ @@ -425,7 +425,6 @@ LOCAL_JAR_PACKAGES := \ android.test\* \ android.text\* \ android.transition\* \ - android.tv\* \ android.util\* \ android.view\* \ android.webkit\* \ diff --git a/CleanSpec.mk b/CleanSpec.mk index 48a20a4..f3bb9b6 100644 --- a/CleanSpec.mk +++ b/CleanSpec.mk @@ -192,6 +192,7 @@ $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framew $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/src/media/java/android/media/) $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/src/core/java/android/app) $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates/src/android/app/wearable) +$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/src/core/java/android/tv/ITv*) # ************************************************ # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST diff --git a/api/current.txt b/api/current.txt index 555af77..5a7fe64 100644 --- a/api/current.txt +++ b/api/current.txt @@ -15848,6 +15848,160 @@ package android.media.session { } +package android.media.tv { + + public final class TvContract { + method public static final android.net.Uri buildChannelUri(long); + method public static final android.net.Uri buildChannelsUriForInput(android.content.ComponentName); + method public static final android.net.Uri buildChannelsUriForInput(android.content.ComponentName, boolean); + method public static final android.net.Uri buildProgramUri(long); + method public static final android.net.Uri buildProgramsUriForChannel(android.net.Uri); + method public static final android.net.Uri buildProgramsUriForChannel(android.net.Uri, long, long); + field public static final java.lang.String AUTHORITY = "com.android.tv"; + } + + public static abstract interface TvContract.BaseTvColumns implements android.provider.BaseColumns { + field public static final java.lang.String COLUMN_PACKAGE_NAME = "package_name"; + } + + public static final class TvContract.Channels implements android.media.tv.TvContract.BaseTvColumns { + field public static final java.lang.String COLUMN_BROWSABLE = "browsable"; + field public static final java.lang.String COLUMN_DATA = "data"; + field public static final java.lang.String COLUMN_DESCRIPTION = "description"; + field public static final java.lang.String COLUMN_DISPLAY_NAME = "display_name"; + field public static final java.lang.String COLUMN_DISPLAY_NUMBER = "display_number"; + field public static final java.lang.String COLUMN_LOCKED = "locked"; + field public static final java.lang.String COLUMN_ORIGINAL_NETWORK_ID = "original_network_id"; + field public static final java.lang.String COLUMN_SEARCHABLE = "searchable"; + field public static final java.lang.String COLUMN_SERVICE_ID = "service_id"; + field public static final java.lang.String COLUMN_SERVICE_NAME = "service_name"; + field public static final java.lang.String COLUMN_SERVICE_TYPE = "service_type"; + field public static final java.lang.String COLUMN_TRANSPORT_STREAM_ID = "transport_stream_id"; + field public static final java.lang.String COLUMN_TYPE = "type"; + field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number"; + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.com.android.tv.channels"; + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.com.android.tv.channels"; + field public static final android.net.Uri CONTENT_URI; + field public static final int SERVICE_TYPE_OTHER = 0; // 0x0 + field public static final int SERVICE_TYPE_RADIO = 2; // 0x2 + field public static final int SERVICE_TYPE_TV = 1; // 0x1 + field public static final int TYPE_1SEG = 263168; // 0x40400 + field public static final int TYPE_ATSC_C = 197120; // 0x30200 + field public static final int TYPE_ATSC_M_H = 197120; // 0x30200 + field public static final int TYPE_ATSC_T = 196608; // 0x30000 + field public static final int TYPE_CMMB = 327936; // 0x50100 + field public static final int TYPE_DTMB = 327680; // 0x50000 + field public static final int TYPE_DVB_C = 131584; // 0x20200 + field public static final int TYPE_DVB_C2 = 131585; // 0x20201 + field public static final int TYPE_DVB_H = 131840; // 0x20300 + field public static final int TYPE_DVB_S = 131328; // 0x20100 + field public static final int TYPE_DVB_S2 = 131329; // 0x20101 + field public static final int TYPE_DVB_SH = 132096; // 0x20400 + field public static final int TYPE_DVB_T = 131072; // 0x20000 + field public static final int TYPE_DVB_T2 = 131073; // 0x20001 + field public static final int TYPE_ISDB_C = 262912; // 0x40300 + field public static final int TYPE_ISDB_S = 262656; // 0x40200 + field public static final int TYPE_ISDB_T = 262144; // 0x40000 + field public static final int TYPE_ISDB_TB = 262400; // 0x40100 + field public static final int TYPE_OTHER = 0; // 0x0 + field public static final int TYPE_PASSTHROUGH = 65536; // 0x10000 + field public static final int TYPE_S_DMB = 393472; // 0x60100 + field public static final int TYPE_T_DMB = 393216; // 0x60000 + } + + public static final class TvContract.Programs implements android.media.tv.TvContract.BaseTvColumns { + field public static final java.lang.String COLUMN_AUDIO_LANGUAGE = "audio_language"; + field public static final java.lang.String COLUMN_CHANNEL_ID = "channel_id"; + field public static final java.lang.String COLUMN_DATA = "data"; + field public static final java.lang.String COLUMN_DESCRIPTION = "description"; + field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis"; + field public static final java.lang.String COLUMN_GENRE = "genre"; + field public static final java.lang.String COLUMN_LONG_DESCRIPTION = "long_description"; + field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis"; + field public static final java.lang.String COLUMN_TITLE = "title"; + field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number"; + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.com.android.tv.programs"; + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.com.android.tv.programs"; + field public static final android.net.Uri CONTENT_URI; + } + + public final class TvInputInfo implements android.os.Parcelable { + method public int describeContents(); + method public android.content.ComponentName getComponent(); + method public java.lang.String getId(); + method public java.lang.String getPackageName(); + method public java.lang.String getServiceName(); + method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager); + method public void writeToParcel(android.os.Parcel, int); + } + + public final class TvInputManager { + method public void createSession(java.lang.String, android.media.tv.TvInputManager.SessionCallback, android.os.Handler); + method public boolean getAvailability(java.lang.String); + method public java.util.List<android.media.tv.TvInputInfo> getTvInputList(); + method public void registerListener(java.lang.String, android.media.tv.TvInputManager.TvInputListener, android.os.Handler); + method public void unregisterListener(java.lang.String, android.media.tv.TvInputManager.TvInputListener); + } + + public static final class TvInputManager.Session { + method public void release(); + method public void setVolume(float); + method public void tune(android.net.Uri); + } + + public static abstract class TvInputManager.SessionCallback { + ctor public TvInputManager.SessionCallback(); + method public void onSessionCreated(android.media.tv.TvInputManager.Session); + method public void onSessionReleased(android.media.tv.TvInputManager.Session); + } + + public static abstract class TvInputManager.TvInputListener { + ctor public TvInputManager.TvInputListener(); + method public void onAvailabilityChanged(java.lang.String, boolean); + } + + public abstract class TvInputService extends android.app.Service { + ctor public TvInputService(); + method public final android.os.IBinder onBind(android.content.Intent); + method public abstract android.media.tv.TvInputService.TvInputSessionImpl onCreateSession(); + method public final void setAvailable(boolean); + field public static final java.lang.String SERVICE_INTERFACE = "android.media.tv.TvInputService"; + } + + public abstract class TvInputService.TvInputSessionImpl implements android.view.KeyEvent.Callback { + ctor public TvInputService.TvInputSessionImpl(); + method public android.view.View onCreateOverlayView(); + method public boolean onGenericMotionEvent(android.view.MotionEvent); + method public boolean onKeyDown(int, android.view.KeyEvent); + method public boolean onKeyLongPress(int, android.view.KeyEvent); + method public boolean onKeyMultiple(int, int, android.view.KeyEvent); + method public boolean onKeyUp(int, android.view.KeyEvent); + method public abstract void onRelease(); + method public abstract boolean onSetSurface(android.view.Surface); + method public abstract void onSetVolume(float); + method public boolean onTouchEvent(android.view.MotionEvent); + method public boolean onTrackballEvent(android.view.MotionEvent); + method public abstract boolean onTune(android.net.Uri); + method public void setOverlayViewEnabled(boolean); + } + + public class TvView extends android.view.SurfaceView { + ctor public TvView(android.content.Context); + ctor public TvView(android.content.Context, android.util.AttributeSet); + ctor public TvView(android.content.Context, android.util.AttributeSet, int); + method public void bindTvInput(java.lang.String, android.media.tv.TvInputManager.SessionCallback); + method public boolean dispatchUnhandledInputEvent(android.view.InputEvent); + method public boolean onUnhandledInputEvent(android.view.InputEvent); + method public void setOnUnhandledInputEventListener(android.media.tv.TvView.OnUnhandledInputEventListener); + method public void unbindTvInput(); + } + + public static abstract interface TvView.OnUnhandledInputEventListener { + method public abstract boolean onUnhandledInputEvent(android.view.InputEvent); + } + +} + package android.mtp { public final class MtpConstants { @@ -17149,86 +17303,6 @@ package android.net.wifi { method public void setWorkSource(android.os.WorkSource); } - public class WifiScanner { - method public void configureWifiChange(int, int, int, int, int, android.net.wifi.WifiScanner.HotspotInfo[]); - method public void resetHotlist(android.net.wifi.WifiScanner.HotlistListener); - method public void retrieveScanResults(boolean, android.net.wifi.WifiScanner.ScanListener); - method public void setHotlist(android.net.wifi.WifiScanner.HotspotInfo[], int, android.net.wifi.WifiScanner.HotlistListener); - method public void startBackgroundScan(android.net.wifi.WifiScanner.ScanSettings, android.net.wifi.WifiScanner.ScanListener); - method public void startTrackingWifiChange(android.net.wifi.WifiScanner.WifiChangeListener); - method public void stopBackgroundScan(android.net.wifi.WifiScanner.ScanListener); - method public void stopTrackingWifiChange(android.net.wifi.WifiScanner.WifiChangeListener); - field public static final int MAX_SCAN_PERIOD_MS = 1024000; // 0xfa000 - field public static final int MIN_SCAN_PERIOD_MS = 2000; // 0x7d0 - field public static final int REASON_CONFLICTING_REQUEST = -4; // 0xfffffffc - field public static final int REASON_INVALID_LISTENER = -2; // 0xfffffffe - field public static final int REASON_INVALID_REQUEST = -3; // 0xfffffffd - field public static final int REASON_SUCCEEDED = 0; // 0x0 - field public static final int REASON_UNSPECIFIED = -1; // 0xffffffff - field public static final int REPORT_EVENT_AFTER_BUFFER_FULL = 0; // 0x0 - field public static final int REPORT_EVENT_AFTER_EACH_SCAN = 1; // 0x1 - field public static final int REPORT_EVENT_FULL_SCAN_RESULT = 2; // 0x2 - field public static final int WIFI_BAND_24_GHZ = 1; // 0x1 - field public static final int WIFI_BAND_5_GHZ = 2; // 0x2 - field public static final int WIFI_BAND_5_GHZ_DFS_ONLY = 4; // 0x4 - field public static final int WIFI_BAND_5_GHZ_WITH_DFS = 6; // 0x6 - field public static final int WIFI_BAND_BOTH = 3; // 0x3 - field public static final int WIFI_BAND_BOTH_WITH_DFS = 7; // 0x7 - field public static final int WIFI_BAND_UNSPECIFIED = 0; // 0x0 - } - - public static class WifiScanner.ChannelSpec { - ctor public WifiScanner.ChannelSpec(int); - field public int frequency; - } - - public static class WifiScanner.FullScanResult implements android.os.Parcelable { - ctor public WifiScanner.FullScanResult(); - method public int describeContents(); - method public void writeToParcel(android.os.Parcel, int); - field public android.net.wifi.WifiScanner.InformationElement[] informationElements; - field public android.net.wifi.ScanResult result; - } - - public static abstract interface WifiScanner.HotlistListener { - method public abstract void onFound(android.net.wifi.ScanResult[]); - } - - public static class WifiScanner.HotspotInfo { - ctor public WifiScanner.HotspotInfo(); - field public java.lang.String bssid; - field public int frequencyHint; - field public int high; - field public int low; - } - - public static class WifiScanner.InformationElement { - ctor public WifiScanner.InformationElement(); - field public byte[] bytes; - field public int id; - } - - public static abstract interface WifiScanner.ScanListener { - method public abstract void onFullResult(android.net.wifi.WifiScanner.FullScanResult); - method public abstract void onPeriodChanged(int); - method public abstract void onResults(android.net.wifi.ScanResult[]); - } - - public static class WifiScanner.ScanSettings implements android.os.Parcelable { - ctor public WifiScanner.ScanSettings(); - method public int describeContents(); - method public void writeToParcel(android.os.Parcel, int); - field public int band; - field public android.net.wifi.WifiScanner.ChannelSpec[] channels; - field public int periodInMs; - field public int reportEvents; - } - - public static abstract interface WifiScanner.WifiChangeListener { - method public abstract void onChanging(android.net.wifi.ScanResult[]); - method public abstract void onQuiescence(android.net.wifi.ScanResult[]); - } - public class WpsInfo implements android.os.Parcelable { ctor public WpsInfo(); ctor public WpsInfo(android.net.wifi.WpsInfo); @@ -24865,81 +24939,6 @@ package android.provider { field public static final java.lang.String TYPE = "type"; } - public final class TvContract { - method public static final android.net.Uri buildChannelUri(long); - method public static final android.net.Uri buildChannelsUriForInput(android.content.ComponentName); - method public static final android.net.Uri buildChannelsUriForInput(android.content.ComponentName, boolean); - method public static final android.net.Uri buildProgramUri(long); - method public static final android.net.Uri buildProgramsUriForChannel(android.net.Uri); - method public static final android.net.Uri buildProgramsUriForChannel(android.net.Uri, long, long); - field public static final java.lang.String AUTHORITY = "com.android.tv"; - } - - public static abstract interface TvContract.BaseTvColumns implements android.provider.BaseColumns { - field public static final java.lang.String COLUMN_PACKAGE_NAME = "package_name"; - } - - public static final class TvContract.Channels implements android.provider.TvContract.BaseTvColumns { - field public static final java.lang.String COLUMN_BROWSABLE = "browsable"; - field public static final java.lang.String COLUMN_DATA = "data"; - field public static final java.lang.String COLUMN_DESCRIPTION = "description"; - field public static final java.lang.String COLUMN_DISPLAY_NAME = "display_name"; - field public static final java.lang.String COLUMN_DISPLAY_NUMBER = "display_number"; - field public static final java.lang.String COLUMN_LOCKED = "locked"; - field public static final java.lang.String COLUMN_ORIGINAL_NETWORK_ID = "original_network_id"; - field public static final java.lang.String COLUMN_SEARCHABLE = "searchable"; - field public static final java.lang.String COLUMN_SERVICE_ID = "service_id"; - field public static final java.lang.String COLUMN_SERVICE_NAME = "service_name"; - field public static final java.lang.String COLUMN_SERVICE_TYPE = "service_type"; - field public static final java.lang.String COLUMN_TRANSPORT_STREAM_ID = "transport_stream_id"; - field public static final java.lang.String COLUMN_TYPE = "type"; - field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number"; - field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.com.android.tv.channels"; - field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.com.android.tv.channels"; - field public static final android.net.Uri CONTENT_URI; - field public static final int SERVICE_TYPE_OTHER = 0; // 0x0 - field public static final int SERVICE_TYPE_RADIO = 2; // 0x2 - field public static final int SERVICE_TYPE_TV = 1; // 0x1 - field public static final int TYPE_1SEG = 263168; // 0x40400 - field public static final int TYPE_ATSC_C = 197120; // 0x30200 - field public static final int TYPE_ATSC_M_H = 197120; // 0x30200 - field public static final int TYPE_ATSC_T = 196608; // 0x30000 - field public static final int TYPE_CMMB = 327936; // 0x50100 - field public static final int TYPE_DTMB = 327680; // 0x50000 - field public static final int TYPE_DVB_C = 131584; // 0x20200 - field public static final int TYPE_DVB_C2 = 131585; // 0x20201 - field public static final int TYPE_DVB_H = 131840; // 0x20300 - field public static final int TYPE_DVB_S = 131328; // 0x20100 - field public static final int TYPE_DVB_S2 = 131329; // 0x20101 - field public static final int TYPE_DVB_SH = 132096; // 0x20400 - field public static final int TYPE_DVB_T = 131072; // 0x20000 - field public static final int TYPE_DVB_T2 = 131073; // 0x20001 - field public static final int TYPE_ISDB_C = 262912; // 0x40300 - field public static final int TYPE_ISDB_S = 262656; // 0x40200 - field public static final int TYPE_ISDB_T = 262144; // 0x40000 - field public static final int TYPE_ISDB_TB = 262400; // 0x40100 - field public static final int TYPE_OTHER = 0; // 0x0 - field public static final int TYPE_PASSTHROUGH = 65536; // 0x10000 - field public static final int TYPE_S_DMB = 393472; // 0x60100 - field public static final int TYPE_T_DMB = 393216; // 0x60000 - } - - public static final class TvContract.Programs implements android.provider.TvContract.BaseTvColumns { - field public static final java.lang.String COLUMN_AUDIO_LANGUAGE = "audio_language"; - field public static final java.lang.String COLUMN_CHANNEL_ID = "channel_id"; - field public static final java.lang.String COLUMN_DATA = "data"; - field public static final java.lang.String COLUMN_DESCRIPTION = "description"; - field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis"; - field public static final java.lang.String COLUMN_GENRE = "genre"; - field public static final java.lang.String COLUMN_LONG_DESCRIPTION = "long_description"; - field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis"; - field public static final java.lang.String COLUMN_TITLE = "title"; - field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number"; - field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.com.android.tv.programs"; - field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.com.android.tv.programs"; - field public static final android.net.Uri CONTENT_URI; - } - public class UserDictionary { ctor public UserDictionary(); field public static final java.lang.String AUTHORITY = "user_dictionary"; @@ -30106,85 +30105,6 @@ package android.transition { } -package android.tv { - - public final class TvInputInfo implements android.os.Parcelable { - method public int describeContents(); - method public android.content.ComponentName getComponent(); - method public java.lang.String getId(); - method public java.lang.String getPackageName(); - method public java.lang.String getServiceName(); - method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager); - method public void writeToParcel(android.os.Parcel, int); - } - - public final class TvInputManager { - method public void createSession(java.lang.String, android.tv.TvInputManager.SessionCallback, android.os.Handler); - method public boolean getAvailability(java.lang.String); - method public java.util.List<android.tv.TvInputInfo> getTvInputList(); - method public void registerListener(java.lang.String, android.tv.TvInputManager.TvInputListener, android.os.Handler); - method public void unregisterListener(java.lang.String, android.tv.TvInputManager.TvInputListener); - } - - public static final class TvInputManager.Session { - method public void release(); - method public void setVolume(float); - method public void tune(android.net.Uri); - } - - public static abstract class TvInputManager.SessionCallback { - ctor public TvInputManager.SessionCallback(); - method public void onSessionCreated(android.tv.TvInputManager.Session); - method public void onSessionReleased(android.tv.TvInputManager.Session); - } - - public static abstract class TvInputManager.TvInputListener { - ctor public TvInputManager.TvInputListener(); - method public void onAvailabilityChanged(java.lang.String, boolean); - } - - public abstract class TvInputService extends android.app.Service { - ctor public TvInputService(); - method public final android.os.IBinder onBind(android.content.Intent); - method public abstract android.tv.TvInputService.TvInputSessionImpl onCreateSession(); - method public final void setAvailable(boolean); - field public static final java.lang.String SERVICE_INTERFACE = "android.tv.TvInputService"; - } - - public abstract class TvInputService.TvInputSessionImpl implements android.view.KeyEvent.Callback { - ctor public TvInputService.TvInputSessionImpl(); - method public android.view.View onCreateOverlayView(); - method public boolean onGenericMotionEvent(android.view.MotionEvent); - method public boolean onKeyDown(int, android.view.KeyEvent); - method public boolean onKeyLongPress(int, android.view.KeyEvent); - method public boolean onKeyMultiple(int, int, android.view.KeyEvent); - method public boolean onKeyUp(int, android.view.KeyEvent); - method public abstract void onRelease(); - method public abstract boolean onSetSurface(android.view.Surface); - method public abstract void onSetVolume(float); - method public boolean onTouchEvent(android.view.MotionEvent); - method public boolean onTrackballEvent(android.view.MotionEvent); - method public abstract boolean onTune(android.net.Uri); - method public void setOverlayViewEnabled(boolean); - } - - public class TvView extends android.view.SurfaceView { - ctor public TvView(android.content.Context); - ctor public TvView(android.content.Context, android.util.AttributeSet); - ctor public TvView(android.content.Context, android.util.AttributeSet, int); - method public void bindTvInput(java.lang.String, android.tv.TvInputManager.SessionCallback); - method public boolean dispatchUnhandledInputEvent(android.view.InputEvent); - method public boolean onUnhandledInputEvent(android.view.InputEvent); - method public void setOnUnhandledInputEventListener(android.tv.TvView.OnUnhandledInputEventListener); - method public void unbindTvInput(); - } - - public static abstract interface TvView.OnUnhandledInputEventListener { - method public abstract boolean onUnhandledInputEvent(android.view.InputEvent); - } - -} - package android.util { public class AndroidException extends java.lang.Exception { diff --git a/core/java/android/app/ActivityTransitionCoordinator.java b/core/java/android/app/ActivityTransitionCoordinator.java index 5e4ddd0..b739387 100644 --- a/core/java/android/app/ActivityTransitionCoordinator.java +++ b/core/java/android/app/ActivityTransitionCoordinator.java @@ -129,8 +129,8 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { protected static final String KEY_SCALE_TYPE = "shared_element:scaleType"; protected static final String KEY_IMAGE_MATRIX = "shared_element:imageMatrix"; - // The background fade in/out duration. 150ms is pretty quick, but not abrupt. - public static final int FADE_BACKGROUND_DURATION_MS = 150; + // The background fade in/out duration. TODO: Enable tuning this. + public static final int FADE_BACKGROUND_DURATION_MS = 300; protected static final ImageView.ScaleType[] SCALE_TYPE_VALUES = ImageView.ScaleType.values(); @@ -195,6 +195,11 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { */ public static final int MSG_SHARED_ELEMENT_DESTINATION = 107; + /** + * Send the shared element positions. + */ + public static final int MSG_SEND_SHARED_ELEMENT_DESTINATION = 108; + final private Window mWindow; final protected ArrayList<String> mAllSharedElementNames; final protected ArrayList<View> mSharedElements = new ArrayList<View>(); diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index e66534b..ac25a53 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -73,6 +73,8 @@ import android.location.LocationManager; import android.media.AudioManager; import android.media.MediaRouter; import android.media.session.MediaSessionManager; +import android.media.tv.ITvInputManager; +import android.media.tv.TvInputManager; import android.net.ConnectivityManager; import android.net.IConnectivityManager; import android.net.EthernetManager; @@ -117,8 +119,6 @@ import android.service.fingerprint.FingerprintManager; import android.service.fingerprint.FingerprintManagerReceiver; import android.service.fingerprint.FingerprintService; import android.telephony.TelephonyManager; -import android.tv.ITvInputManager; -import android.tv.TvInputManager; import android.content.ClipboardManager; import android.util.AndroidRuntimeException; import android.util.ArrayMap; diff --git a/core/java/android/app/EnterTransitionCoordinator.java b/core/java/android/app/EnterTransitionCoordinator.java index a8617b8..4b052e7 100644 --- a/core/java/android/app/EnterTransitionCoordinator.java +++ b/core/java/android/app/EnterTransitionCoordinator.java @@ -29,6 +29,7 @@ import android.transition.TransitionManager; import android.util.ArrayMap; import android.util.Pair; import android.view.View; +import android.view.ViewGroup; import android.view.ViewGroupOverlay; import android.view.ViewTreeObserver; import android.widget.ImageView; @@ -72,8 +73,24 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } }; mHandler.sendEmptyMessageDelayed(MSG_CANCEL, MAX_WAIT_MS); + send(MSG_SEND_SHARED_ELEMENT_DESTINATION, null); + } + } + + private void sendSharedElementDestination() { + ViewGroup decor = getDecor(); + if (!decor.isLayoutRequested()) { Bundle state = captureSharedElementState(); mResultReceiver.send(MSG_SHARED_ELEMENT_DESTINATION, state); + } else { + getDecor().getViewTreeObserver() + .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { + @Override + public boolean onPreDraw() { + getDecor().getViewTreeObserver().removeOnPreDrawListener(this); + return true; + } + }); } } @@ -105,6 +122,9 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { case MSG_CANCEL: cancel(); break; + case MSG_SEND_SHARED_ELEMENT_DESTINATION: + sendSharedElementDestination(); + break; } } diff --git a/core/java/android/app/ExitTransitionCoordinator.java b/core/java/android/app/ExitTransitionCoordinator.java index a71d649..ba1638f 100644 --- a/core/java/android/app/ExitTransitionCoordinator.java +++ b/core/java/android/app/ExitTransitionCoordinator.java @@ -294,7 +294,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { } private void finishIfNecessary() { - if (mIsReturning && mExitNotified && (mSharedElements.isEmpty() + if (mIsReturning && mExitNotified && mActivity != null && (mSharedElements.isEmpty() || mSharedElements.get(0).getVisibility() == View.INVISIBLE)) { mActivity.finish(); mActivity.overridePendingTransition(0, 0); diff --git a/core/java/android/app/VoiceInteractor.java b/core/java/android/app/VoiceInteractor.java index f332c9d..85e970c 100644 --- a/core/java/android/app/VoiceInteractor.java +++ b/core/java/android/app/VoiceInteractor.java @@ -43,7 +43,7 @@ import java.util.ArrayList; * {@link Request} subclass describing the type of operation to perform -- currently the * possible requests are {@link ConfirmationRequest} and {@link CommandRequest}. * - * <p>Once a request is submitted, the voice system will process it and evetually deliver + * <p>Once a request is submitted, the voice system will process it and eventually deliver * the result to the request object. The application can cancel a pending request at any * time. * @@ -51,7 +51,7 @@ import java.util.ArrayList; * if an activity is being restarted with retained state, it will retain the current * VoiceInteractor and any outstanding requests. Because of this, you should always use * {@link Request#getActivity() Request.getActivity} to get back to the activity of a - * request, rather than holding on to the actvitity instance yourself, either explicitly + * request, rather than holding on to the activity instance yourself, either explicitly * or implicitly through a non-static inner class. */ public class VoiceInteractor { @@ -236,7 +236,7 @@ public class VoiceInteractor { * Reports that the current interaction can not be complete with voice, so the * application will need to switch to a traditional input UI. Applications should * only use this when they need to completely bail out of the voice interaction - * and switch to a traditional UI. When the resonsponse comes back, the voice + * and switch to a traditional UI. When the response comes back, the voice * system has handled the request and is ready to switch; at that point the application * can start a new non-voice activity. Be sure when starting the new activity * to use {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index d3a979c..e8885bf 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -2742,11 +2742,11 @@ public abstract class Context { /** * Use with {@link #getSystemService} to retrieve a - * {@link android.tv.TvInputManager} for interacting with TV inputs on the - * device. + * {@link android.media.tv.TvInputManager} for interacting with TV inputs + * on the device. * * @see #getSystemService - * @see android.tv.TvInputManager + * @see android.media.tv.TvInputManager */ public static final String TV_INPUT_SERVICE = "tv_input"; diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index bc57b33..e627d49 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -931,6 +931,14 @@ public abstract class BatteryStats implements Parcelable { } } + /** + * Don't allow any more batching in to the current history event. This + * is called when printing partial histories, so to ensure that the next + * history event will go in to a new batch after what was printed in the + * last partial history. + */ + public abstract void commitCurrentHistoryBatchLocked(); + public abstract int getHistoryTotalSize(); public abstract int getHistoryUsedSize(); @@ -3366,6 +3374,7 @@ public abstract class BatteryStats implements Parcelable { } } if (histStart >= 0) { + commitCurrentHistoryBatchLocked(); pw.print(checkin ? "NEXT: " : " NEXT: "); pw.println(lastTime+1); } } diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 025cf69..c7c007e 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -16173,6 +16173,20 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } /** + * Set this view's optical insets. + * + * <p>This method should be treated similarly to setMeasuredDimension and not as a general + * property. Views that compute their own optical insets should call it as part of measurement. + * This method does not request layout. If you are setting optical insets outside of + * measure/layout itself you will want to call requestLayout() yourself. + * </p> + * @hide + */ + public void setOpticalInsets(Insets insets) { + mLayoutInsets = insets; + } + + /** * Changes the selection state of this view. A view can be selected or not. * Note that selection is not the same as focus. Views are typically * selected in the context of an AdapterView like ListView or GridView; diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index ed9f9bc..240d520 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -2006,6 +2006,11 @@ public final class BatteryStatsImpl extends BatteryStats { } } + @Override + public void commitCurrentHistoryBatchLocked() { + mHistoryLastWritten.cmd = HistoryItem.CMD_NULL; + } + void addHistoryBufferLocked(long elapsedRealtimeMs, long uptimeMs, HistoryItem cur) { if (!mHaveBatteryLevel || !mRecordingHistory) { return; @@ -2342,13 +2347,16 @@ public final class BatteryStatsImpl extends BatteryStats { // Only care about partial wake locks, since full wake locks // will be canceled when the user puts the screen to sleep. aggregateLastWakeupUptimeLocked(uptime); + if (historyName == null) { + historyName = name; + } if (mRecordAllWakeLocks) { - if (mActiveEvents.updateState(HistoryItem.EVENT_WAKE_LOCK_START, name, uid, 0)) { + if (mActiveEvents.updateState(HistoryItem.EVENT_WAKE_LOCK_START, historyName, + uid, 0)) { addHistoryEventLocked(elapsedRealtime, uptime, - HistoryItem.EVENT_WAKE_LOCK_START, name, uid); + HistoryItem.EVENT_WAKE_LOCK_START, historyName, uid); } } - historyName = historyName == null ? name : historyName; if (mWakeLockNesting == 0) { mHistoryCur.states |= HistoryItem.STATE_WAKE_LOCK_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Start wake lock to: " @@ -2358,7 +2366,8 @@ public final class BatteryStatsImpl extends BatteryStats { mHistoryCur.wakelockTag.uid = mInitialAcquireWakeUid = uid; mWakeLockImportant = !unimportantForLogging; addHistoryRecordLocked(elapsedRealtime, uptime); - } else if (!mWakeLockImportant && !unimportantForLogging) { + } else if (!mWakeLockImportant && !unimportantForLogging + && mHistoryLastWritten.cmd == HistoryItem.CMD_UPDATE) { if (mHistoryLastWritten.wakelockTag != null) { // We'll try to update the last tag. mHistoryLastWritten.wakelockTag = null; @@ -2386,9 +2395,13 @@ public final class BatteryStatsImpl extends BatteryStats { if (type == WAKE_TYPE_PARTIAL) { mWakeLockNesting--; if (mRecordAllWakeLocks) { - if (mActiveEvents.updateState(HistoryItem.EVENT_WAKE_LOCK_FINISH, name, uid, 0)) { + if (historyName == null) { + historyName = name; + } + if (mActiveEvents.updateState(HistoryItem.EVENT_WAKE_LOCK_FINISH, historyName, + uid, 0)) { addHistoryEventLocked(elapsedRealtime, uptime, - HistoryItem.EVENT_WAKE_LOCK_FINISH, name, uid); + HistoryItem.EVENT_WAKE_LOCK_FINISH, historyName, uid); } } if (mWakeLockNesting == 0) { diff --git a/core/jni/android/graphics/FontFamily.cpp b/core/jni/android/graphics/FontFamily.cpp index 3bab8a2..dd6b36f 100644 --- a/core/jni/android/graphics/FontFamily.cpp +++ b/core/jni/android/graphics/FontFamily.cpp @@ -23,6 +23,9 @@ #include "GraphicsJNI.h" #include <ScopedPrimitiveArray.h> #include <ScopedUtfChars.h> +#include <android_runtime/android_util_AssetManager.h> +#include <androidfw/AssetManager.h> +#include "Utils.h" #ifdef USE_MINIKIN #include <minikin/FontFamily.h> @@ -51,19 +54,60 @@ static void FontFamily_unref(JNIEnv* env, jobject clazz, jlong familyPtr) { #endif } +#ifdef USE_MINIKIN +static jboolean addSkTypeface(FontFamily* family, SkTypeface* face) { + MinikinFont* minikinFont = new MinikinFontSkia(face); + bool result = family->addFont(minikinFont); + minikinFont->Unref(); + return result; +} +#endif + static jboolean FontFamily_addFont(JNIEnv* env, jobject clazz, jlong familyPtr, jstring path) { #ifdef USE_MINIKIN NPE_CHECK_RETURN_ZERO(env, path); ScopedUtfChars str(env, path); - ALOGD("addFont %s", str.c_str()); SkTypeface* face = SkTypeface::CreateFromFile(str.c_str()); if (face == NULL) { ALOGE("addFont failed to create font %s", str.c_str()); return false; } - MinikinFont* minikinFont = new MinikinFontSkia(face); FontFamily* fontFamily = (FontFamily*)familyPtr; - return fontFamily->addFont(minikinFont); + return addSkTypeface(fontFamily, face); +#else + return false; +#endif +} + +static jboolean FontFamily_addFontFromAsset(JNIEnv* env, jobject, jlong familyPtr, + jobject jassetMgr, jstring jpath) { +#ifdef USE_MINIKIN + NPE_CHECK_RETURN_ZERO(env, jassetMgr); + NPE_CHECK_RETURN_ZERO(env, jpath); + + AssetManager* mgr = assetManagerForJavaObject(env, jassetMgr); + if (NULL == mgr) { + return false; + } + + ScopedUtfChars str(env, jpath); + Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER); + if (NULL == asset) { + return false; + } + + SkStream* stream = new AssetStreamAdaptor(asset, + AssetStreamAdaptor::kYes_OwnAsset, + AssetStreamAdaptor::kYes_HasMemoryBase); + SkTypeface* face = SkTypeface::CreateFromStream(stream); + // Note: SkTypeface::CreateFromStream holds its own reference to the stream + stream->unref(); + if (face == NULL) { + ALOGE("addFontFromAsset failed to create font %s", str.c_str()); + return false; + } + FontFamily* fontFamily = (FontFamily*)familyPtr; + return addSkTypeface(fontFamily, face); #else return false; #endif @@ -75,6 +119,8 @@ static JNINativeMethod gFontFamilyMethods[] = { { "nCreateFamily", "(Ljava/lang/String;I)J", (void*)FontFamily_create }, { "nUnrefFamily", "(J)V", (void*)FontFamily_unref }, { "nAddFont", "(JLjava/lang/String;)Z", (void*)FontFamily_addFont }, + { "nAddFontFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;)Z", + (void*)FontFamily_addFontFromAsset }, }; int register_android_graphics_FontFamily(JNIEnv* env) diff --git a/core/jni/android/graphics/MinikinSkia.h b/core/jni/android/graphics/MinikinSkia.h index 7a8954d..1cc2c51 100644 --- a/core/jni/android/graphics/MinikinSkia.h +++ b/core/jni/android/graphics/MinikinSkia.h @@ -18,6 +18,7 @@ namespace android { class MinikinFontSkia : public MinikinFont { public: + // Note: this takes ownership of the reference (will unref on dtor) explicit MinikinFontSkia(SkTypeface *typeface); ~MinikinFontSkia(); diff --git a/core/jni/android/graphics/TypefaceImpl.cpp b/core/jni/android/graphics/TypefaceImpl.cpp index 958cd85..ff52b07 100644 --- a/core/jni/android/graphics/TypefaceImpl.cpp +++ b/core/jni/android/graphics/TypefaceImpl.cpp @@ -171,7 +171,9 @@ TypefaceImpl* TypefaceImpl_createFromFamilies(const jlong* families, size_t size } void TypefaceImpl_unref(TypefaceImpl* face) { - face->fFontCollection->Unref(); + if (face != NULL) { + face->fFontCollection->Unref(); + } delete face; } diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 14141d7..6d0b325 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -2070,7 +2070,7 @@ android:description="@string/permdesc_bindRemoteDisplay" android:protectionLevel="signature" /> - <!-- Must be required by a {@link android.tv.TvInputService} + <!-- Must be required by a {@link android.media.tv.TvInputService} to ensure that only the system can bind to it. --> <permission android:name="android.permission.BIND_TV_INPUT" android:label="@string/permlab_bindTvInput" diff --git a/core/res/res/anim/voice_activity_open_enter.xml b/core/res/res/anim/voice_activity_open_enter.xml index 57fba2a..ce7a4f9 100644 --- a/core/res/res/anim/voice_activity_open_enter.xml +++ b/core/res/res/anim/voice_activity_open_enter.xml @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!-- -/* //device/apps/common/res/anim/fade_in.xml ** ** Copyright 2007, The Android Open Source Project ** diff --git a/core/res/res/anim/voice_layer_enter.xml b/core/res/res/anim/voice_layer_enter.xml index 57fba2a..ce7a4f9 100644 --- a/core/res/res/anim/voice_layer_enter.xml +++ b/core/res/res/anim/voice_layer_enter.xml @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!-- -/* //device/apps/common/res/anim/fade_in.xml ** ** Copyright 2007, The Android Open Source Project ** diff --git a/graphics/java/android/graphics/FontFamily.java b/graphics/java/android/graphics/FontFamily.java index 6802b9a..11d3165 100644 --- a/graphics/java/android/graphics/FontFamily.java +++ b/graphics/java/android/graphics/FontFamily.java @@ -16,6 +16,8 @@ package android.graphics; +import android.content.res.AssetManager; + import java.io.File; /** @@ -58,11 +60,17 @@ public class FontFamily { } } - public boolean addFont(File path) { - return nAddFont(mNativePtr, path.getAbsolutePath()); + public boolean addFont(String path) { + return nAddFont(mNativePtr, path); + } + + public boolean addFontFromAsset(AssetManager mgr, String path) { + return nAddFontFromAsset(mNativePtr, mgr, path); } - static native long nCreateFamily(String lang, int variant); - static native void nUnrefFamily(long nativePtr); - static native boolean nAddFont(long nativeFamily, String path); + private static native long nCreateFamily(String lang, int variant); + private static native void nUnrefFamily(long nativePtr); + private static native boolean nAddFont(long nativeFamily, String path); + private static native boolean nAddFontFromAsset(long nativeFamily, AssetManager mgr, + String path); } diff --git a/graphics/java/android/graphics/Typeface.java b/graphics/java/android/graphics/Typeface.java index 2b07c3f..cb48de2 100644 --- a/graphics/java/android/graphics/Typeface.java +++ b/graphics/java/android/graphics/Typeface.java @@ -178,6 +178,15 @@ public class Typeface { * @return The new typeface. */ public static Typeface createFromAsset(AssetManager mgr, String path) { + if (sFallbackFonts != null) { + FontFamily fontFamily = new FontFamily(); + if (fontFamily.addFontFromAsset(mgr, path)) { + FontFamily[] families = { fontFamily }; + return createFromFamiliesWithDefault(families); + } else { + return null; + } + } return new Typeface(nativeCreateFromAsset(mgr, path)); } @@ -188,7 +197,7 @@ public class Typeface { * @return The new typeface. */ public static Typeface createFromFile(File path) { - return new Typeface(nativeCreateFromFile(path.getAbsolutePath())); + return createFromFile(path.getAbsolutePath()); } /** @@ -198,6 +207,15 @@ public class Typeface { * @return The new typeface. */ public static Typeface createFromFile(String path) { + if (sFallbackFonts != null) { + FontFamily fontFamily = new FontFamily(); + if (fontFamily.addFont(path)) { + FontFamily[] families = { fontFamily }; + return createFromFamiliesWithDefault(families); + } else { + return null; + } + } return new Typeface(nativeCreateFromFile(path)); } @@ -247,7 +265,7 @@ public class Typeface { // TODO: expand to handle attributes like lang and variant FontFamily fontFamily = new FontFamily(family.lang, family.variant); for (String fontFile : family.fontFiles) { - fontFamily.addFont(new File(fontFile)); + fontFamily.addFont(fontFile); } return fontFamily; } diff --git a/core/java/android/tv/ITvInputClient.aidl b/media/java/android/media/tv/ITvInputClient.aidl index ef89c68..dc79a73 100644 --- a/core/java/android/tv/ITvInputClient.aidl +++ b/media/java/android/media/tv/ITvInputClient.aidl @@ -14,11 +14,11 @@ * limitations under the License. */ -package android.tv; +package android.media.tv; import android.content.ComponentName; +import android.media.tv.ITvInputSession; import android.os.Bundle; -import android.tv.ITvInputSession; import android.view.InputChannel; /** diff --git a/core/java/android/tv/ITvInputHardware.aidl b/media/java/android/media/tv/ITvInputHardware.aidl index 7250453..f35e8f3 100644 --- a/core/java/android/tv/ITvInputHardware.aidl +++ b/media/java/android/media/tv/ITvInputHardware.aidl @@ -14,9 +14,9 @@ * limitations under the License. */ -package android.tv; +package android.media.tv; -import android.tv.TvStreamConfig; +import android.media.tv.TvStreamConfig; import android.view.KeyEvent; import android.view.Surface; diff --git a/core/java/android/tv/ITvInputHardwareCallback.aidl b/media/java/android/media/tv/ITvInputHardwareCallback.aidl index 83041be..870883b 100644 --- a/core/java/android/tv/ITvInputHardwareCallback.aidl +++ b/media/java/android/media/tv/ITvInputHardwareCallback.aidl @@ -14,9 +14,9 @@ * limitations under the License. */ -package android.tv; +package android.media.tv; -import android.tv.TvStreamConfig; +import android.media.tv.TvStreamConfig; /** * @hide diff --git a/core/java/android/tv/ITvInputManager.aidl b/media/java/android/media/tv/ITvInputManager.aidl index c6f8d79..6db5a18 100644 --- a/core/java/android/tv/ITvInputManager.aidl +++ b/media/java/android/media/tv/ITvInputManager.aidl @@ -14,16 +14,16 @@ * limitations under the License. */ -package android.tv; +package android.media.tv; import android.content.ComponentName; import android.graphics.Rect; +import android.media.tv.ITvInputHardware; +import android.media.tv.ITvInputHardwareCallback; +import android.media.tv.ITvInputClient; +import android.media.tv.TvInputHardwareInfo; +import android.media.tv.TvInputInfo; import android.net.Uri; -import android.tv.ITvInputHardware; -import android.tv.ITvInputHardwareCallback; -import android.tv.ITvInputClient; -import android.tv.TvInputHardwareInfo; -import android.tv.TvInputInfo; import android.view.Surface; /** diff --git a/core/java/android/tv/ITvInputService.aidl b/media/java/android/media/tv/ITvInputService.aidl index 4f1bc2b..992e424 100644 --- a/core/java/android/tv/ITvInputService.aidl +++ b/media/java/android/media/tv/ITvInputService.aidl @@ -14,10 +14,10 @@ * limitations under the License. */ -package android.tv; +package android.media.tv; -import android.tv.ITvInputServiceCallback; -import android.tv.ITvInputSessionCallback; +import android.media.tv.ITvInputServiceCallback; +import android.media.tv.ITvInputSessionCallback; import android.view.InputChannel; /** diff --git a/core/java/android/tv/ITvInputServiceCallback.aidl b/media/java/android/media/tv/ITvInputServiceCallback.aidl index 71fc780..c9484dd 100644 --- a/core/java/android/tv/ITvInputServiceCallback.aidl +++ b/media/java/android/media/tv/ITvInputServiceCallback.aidl @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.tv; +package android.media.tv; import android.content.ComponentName; diff --git a/core/java/android/tv/ITvInputSession.aidl b/media/java/android/media/tv/ITvInputSession.aidl index 32fee4b..fb2e251 100644 --- a/core/java/android/tv/ITvInputSession.aidl +++ b/media/java/android/media/tv/ITvInputSession.aidl @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.tv; +package android.media.tv; import android.graphics.Rect; import android.net.Uri; diff --git a/core/java/android/tv/ITvInputSessionCallback.aidl b/media/java/android/media/tv/ITvInputSessionCallback.aidl index e27b8bf..71f2d07 100644 --- a/core/java/android/tv/ITvInputSessionCallback.aidl +++ b/media/java/android/media/tv/ITvInputSessionCallback.aidl @@ -14,10 +14,10 @@ * limitations under the License. */ -package android.tv; +package android.media.tv; +import android.media.tv.ITvInputSession; import android.os.Bundle; -import android.tv.ITvInputSession; /** * Helper interface for ITvInputSession to allow the TV input to notify the system service when a diff --git a/core/java/android/tv/ITvInputSessionWrapper.java b/media/java/android/media/tv/ITvInputSessionWrapper.java index 3ccccf3..975e391 100644 --- a/core/java/android/tv/ITvInputSessionWrapper.java +++ b/media/java/android/media/tv/ITvInputSessionWrapper.java @@ -14,22 +14,20 @@ * limitations under the License. */ -package android.tv; +package android.media.tv; import android.content.Context; import android.graphics.Rect; +import android.media.tv.TvInputManager.Session; +import android.media.tv.TvInputService.TvInputSessionImpl; import android.net.Uri; import android.os.IBinder; import android.os.Looper; import android.os.Message; -import android.tv.TvInputManager.Session; -import android.tv.TvInputService.TvInputSessionImpl; import android.util.Log; import android.view.InputChannel; import android.view.InputEvent; import android.view.InputEventReceiver; -import android.view.KeyEvent; -import android.view.MotionEvent; import android.view.Surface; import com.android.internal.os.HandlerCaller; diff --git a/core/java/android/provider/TvContract.java b/media/java/android/media/tv/TvContract.java index 0d90a16..e9a87ff 100644 --- a/core/java/android/provider/TvContract.java +++ b/media/java/android/media/tv/TvContract.java @@ -14,13 +14,13 @@ * limitations under the License. */ -package android.provider; +package android.media.tv; import android.content.ComponentName; import android.content.ContentResolver; import android.content.ContentUris; import android.net.Uri; -import android.tv.TvInputService; +import android.provider.BaseColumns; import java.util.List; @@ -88,8 +88,8 @@ public final class TvContract { /** * Builds a URI that points to all browsable channels from a given TV input. * - * @param name {@link ComponentName} of the {@link android.tv.TvInputService} that implements - * the given TV input. + * @param name {@link ComponentName} of the {@link android.media.tv.TvInputService} that + * implements the given TV input. */ public static final Uri buildChannelsUriForInput(ComponentName name) { return buildChannelsUriForInput(name, true); @@ -98,8 +98,8 @@ public final class TvContract { /** * Builds a URI that points to all or browsable-only channels from a given TV input. * - * @param name {@link ComponentName} of the {@link android.tv.TvInputService} that implements - * the given TV input. + * @param name {@link ComponentName} of the {@link android.media.tv.TvInputService} that + * implements the given TV input. * @param browsableOnly If set to {@code true} the URI points to only browsable channels. If set * to {@code false} the URI points to all channels regardless of whether they are * browsable or not. diff --git a/core/java/android/tv/TvInputHardwareInfo.aidl b/media/java/android/media/tv/TvInputHardwareInfo.aidl index 484ab60..a4c38bb 100644 --- a/core/java/android/tv/TvInputHardwareInfo.aidl +++ b/media/java/android/media/tv/TvInputHardwareInfo.aidl @@ -15,6 +15,6 @@ * limitations under the License. */ -package android.tv; +package android.media.tv; parcelable TvInputHardwareInfo; diff --git a/core/java/android/tv/TvInputHardwareInfo.java b/media/java/android/media/tv/TvInputHardwareInfo.java index b0dc58e..4beb960 100644 --- a/core/java/android/tv/TvInputHardwareInfo.java +++ b/media/java/android/media/tv/TvInputHardwareInfo.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.tv; +package android.media.tv; import android.os.Parcel; import android.os.Parcelable; diff --git a/core/java/android/tv/TvInputInfo.aidl b/media/java/android/media/tv/TvInputInfo.aidl index abc4b47..ba139a2 100644 --- a/core/java/android/tv/TvInputInfo.aidl +++ b/media/java/android/media/tv/TvInputInfo.aidl @@ -14,6 +14,6 @@ * limitations under the License. */ -package android.tv; +package android.media.tv; parcelable TvInputInfo; diff --git a/core/java/android/tv/TvInputInfo.java b/media/java/android/media/tv/TvInputInfo.java index 217e4b7..854fea7 100644 --- a/core/java/android/tv/TvInputInfo.java +++ b/media/java/android/media/tv/TvInputInfo.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.tv; +package android.media.tv; import android.content.ComponentName; import android.content.pm.PackageManager; diff --git a/core/java/android/tv/TvInputManager.java b/media/java/android/media/tv/TvInputManager.java index d0c2ca6..1335a1b 100644 --- a/core/java/android/tv/TvInputManager.java +++ b/media/java/android/media/tv/TvInputManager.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.tv; +package android.media.tv; import android.graphics.Rect; import android.net.Uri; diff --git a/core/java/android/tv/TvInputService.java b/media/java/android/media/tv/TvInputService.java index 03d24db..a3b0273 100644 --- a/core/java/android/tv/TvInputService.java +++ b/media/java/android/media/tv/TvInputService.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.tv; +package android.media.tv; import android.app.Service; import android.content.ComponentName; @@ -22,6 +22,8 @@ import android.content.Context; import android.content.Intent; import android.graphics.PixelFormat; import android.graphics.Rect; +import android.media.tv.ITvInputService; +import android.media.tv.TvInputManager.Session; import android.net.Uri; import android.os.Bundle; import android.os.Handler; @@ -29,7 +31,6 @@ import android.os.IBinder; import android.os.Message; import android.os.RemoteCallbackList; import android.os.RemoteException; -import android.tv.TvInputManager.Session; import android.util.Log; import android.view.Gravity; import android.view.InputChannel; @@ -59,7 +60,7 @@ public abstract class TvInputService extends Service { * must also require the {@link android.Manifest.permission#BIND_TV_INPUT} permission so that * other applications cannot abuse it. */ - public static final String SERVICE_INTERFACE = "android.tv.TvInputService"; + public static final String SERVICE_INTERFACE = "android.media.tv.TvInputService"; private String mId; private final Handler mHandler = new ServiceHandler(); diff --git a/core/java/android/tv/TvStreamConfig.aidl b/media/java/android/media/tv/TvStreamConfig.aidl index 4d0add4..569fcc0 100644 --- a/core/java/android/tv/TvStreamConfig.aidl +++ b/media/java/android/media/tv/TvStreamConfig.aidl @@ -15,6 +15,6 @@ * limitations under the License. */ -package android.tv; +package android.media.tv; parcelable TvStreamConfig;
\ No newline at end of file diff --git a/core/java/android/tv/TvStreamConfig.java b/media/java/android/media/tv/TvStreamConfig.java index 03e63b1..7f0c92f 100644 --- a/core/java/android/tv/TvStreamConfig.java +++ b/media/java/android/media/tv/TvStreamConfig.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.tv; +package android.media.tv; import android.os.Parcel; import android.os.Parcelable; diff --git a/core/java/android/tv/TvView.java b/media/java/android/media/tv/TvView.java index 2d31701..126d739 100644 --- a/core/java/android/tv/TvView.java +++ b/media/java/android/media/tv/TvView.java @@ -14,16 +14,16 @@ * limitations under the License. */ -package android.tv; +package android.media.tv; import android.content.Context; import android.graphics.Rect; +import android.media.tv.TvInputManager.Session; +import android.media.tv.TvInputManager.Session.FinishedInputEventCallback; +import android.media.tv.TvInputManager.SessionCallback; import android.os.Bundle; import android.os.Handler; import android.text.TextUtils; -import android.tv.TvInputManager.Session; -import android.tv.TvInputManager.Session.FinishedInputEventCallback; -import android.tv.TvInputManager.SessionCallback; import android.util.AttributeSet; import android.util.Log; import android.view.InputEvent; diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index bfbdcf3..60a5643 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -319,6 +319,9 @@ <!-- Volume panel z depth --> <dimen name="volume_panel_z">3dp</dimen> + <!-- Distance between notifications and header when they are considered to be colliding. --> + <dimen name="header_notifications_collide_distance">24dp</dimen> + <!-- Move distance for the hint animations on the lockscreen (unlock, phone, camera)--> <dimen name="hint_move_distance">75dp</dimen> </resources> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java index dfd5a88..ee6d369 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -23,6 +23,7 @@ import android.animation.ValueAnimator; import android.content.Context; import android.content.res.Configuration; import android.util.AttributeSet; +import android.util.Log; import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.View; @@ -91,8 +92,12 @@ public class NotificationPanelView extends PanelView implements private ValueAnimator mQsExpansionAnimator; private FlingAnimationUtils mFlingAnimationUtils; private int mStatusBarMinHeight; + private boolean mHeaderHidden; + private int mNotificationsHeaderCollideDistance; private Interpolator mFastOutSlowInInterpolator; + private Interpolator mFastOutLinearInterpolator; + private Interpolator mLinearOutSlowInInterpolator; private ObjectAnimator mClockAnimator; private int mClockAnimationTarget = -1; private int mTopPaddingAdjustment; @@ -143,6 +148,10 @@ public class NotificationPanelView extends PanelView implements mNotificationStackScroller.setOverscrollTopChangedListener(this); mFastOutSlowInInterpolator = AnimationUtils.loadInterpolator(getContext(), android.R.interpolator.fast_out_slow_in); + mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(getContext(), + android.R.interpolator.linear_out_slow_in); + mFastOutLinearInterpolator = AnimationUtils.loadInterpolator(getContext(), + android.R.interpolator.fast_out_linear_in); mKeyguardBottomArea = (KeyguardBottomAreaView) findViewById(R.id.keyguard_bottom_area); mSwipeTranslationViews.add(mNotificationStackScroller); mSwipeTranslationViews.add(mKeyguardStatusView); @@ -159,6 +168,8 @@ public class NotificationPanelView extends PanelView implements mStatusBarMinHeight = getResources().getDimensionPixelSize( com.android.internal.R.dimen.status_bar_height); mQsPeekHeight = getResources().getDimensionPixelSize(R.dimen.qs_peek_height); + mNotificationsHeaderCollideDistance = + getResources().getDimensionPixelSize(R.dimen.header_notifications_collide_distance); mClockPositionAlgorithm.loadDimens(getResources()); } @@ -708,6 +719,43 @@ public class NotificationPanelView extends PanelView implements positionClockAndNotifications(); } mNotificationStackScroller.setStackHeight(expandedHeight); + updateKeyguardHeaderVisibility(); + } + + /** + * Hides the header when notifications are colliding with it. + */ + private void updateKeyguardHeaderVisibility() { + if (mStatusBar.getBarState() == StatusBarState.KEYGUARD + || mStatusBar.getBarState() == StatusBarState.SHADE_LOCKED) { + boolean hidden = mNotificationStackScroller.getNotificationsTopY() + <= mHeader.getBottom() + mNotificationsHeaderCollideDistance; + if (hidden && !mHeaderHidden) { + mHeader.animate() + .alpha(0f) + .withLayer() + .translationY(-mHeader.getHeight()/2) + .setInterpolator(mFastOutLinearInterpolator) + .setDuration(200); + } else if (!hidden && mHeaderHidden) { + mHeader.animate() + .alpha(1f) + .withLayer() + .translationY(0) + .setInterpolator(mLinearOutSlowInInterpolator) + .setDuration(200); + } + mHeaderHidden = hidden; + } else { + mHeader.animate().cancel(); + mHeader.setAlpha(1f); + mHeader.setTranslationY(0f); + if (mHeader.getLayerType() != LAYER_TYPE_NONE) { + mHeader.setLayerType(LAYER_TYPE_NONE, null); + } + mHeaderHidden = false; + } + } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java index 6892b85..5c98d51 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java @@ -1609,6 +1609,13 @@ public class NotificationStackScrollLayout extends ViewGroup } /** + * @return the y position of the first notification + */ + public float getNotificationsTopY() { + return mTopPadding + getTranslationY(); + } + + /** * A listener that is notified when some child locations might have changed. */ public interface OnChildLocationsChangedListener { diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java index 249422b..b492edd 100644 --- a/services/core/java/com/android/server/am/BatteryStatsService.java +++ b/services/core/java/com/android/server/am/BatteryStatsService.java @@ -623,10 +623,14 @@ public final class BatteryStatsService extends IBatteryStats.Stub pw.println(" --charged: only output data since last charged."); pw.println(" --reset: reset the stats, clearing all current data."); pw.println(" --write: force write current collected stats to disk."); - pw.println(" --enable: enable an option: full-wake-history, no-auto-reset."); - pw.println(" --disable: disable an option: full-wake-history, no-auto-reset."); - pw.println(" -h: print this help text."); pw.println(" <package.name>: optional name of package to filter output by."); + pw.println(" -h: print this help text."); + pw.println("Battery stats (batterystats) commands:"); + pw.println(" enable|disable <option>"); + pw.println(" Enable or disable a running option. Option state is not saved across boots."); + pw.println(" Options are:"); + pw.println(" full-wake-history: include wake_lock_in battery history, full wake details."); + pw.println(" no-auto-reset: don't automatically reset stats when unplugged"); } private int doEnableOrDisable(PrintWriter pw, int i, String[] args, boolean enable) { @@ -702,14 +706,14 @@ public final class BatteryStatsService extends IBatteryStats.Stub pw.println("Battery stats written."); noOutput = true; } - } else if ("--enable".equals(arg)) { + } else if ("--enable".equals(arg) || "enable".equals(arg)) { i = doEnableOrDisable(pw, i, args, true); if (i < 0) { return; } pw.println("Enabled: " + args[i]); return; - } else if ("--disable".equals(arg)) { + } else if ("--disable".equals(arg) || "disable".equals(arg)) { i = doEnableOrDisable(pw, i, args, false); if (i < 0) { return; diff --git a/services/core/java/com/android/server/tv/TvInputHal.java b/services/core/java/com/android/server/tv/TvInputHal.java index 4bdd2be..34168a8 100644 --- a/services/core/java/com/android/server/tv/TvInputHal.java +++ b/services/core/java/com/android/server/tv/TvInputHal.java @@ -16,10 +16,10 @@ package com.android.server.tv; +import android.media.tv.TvInputHardwareInfo; +import android.media.tv.TvStreamConfig; import android.os.Handler; import android.os.HandlerThread; -import android.tv.TvInputHardwareInfo; -import android.tv.TvStreamConfig; import android.view.Surface; /** diff --git a/services/core/java/com/android/server/tv/TvInputHardwareManager.java b/services/core/java/com/android/server/tv/TvInputHardwareManager.java index b95b0f0..e34f42b 100644 --- a/services/core/java/com/android/server/tv/TvInputHardwareManager.java +++ b/services/core/java/com/android/server/tv/TvInputHardwareManager.java @@ -17,12 +17,12 @@ package com.android.server.tv; import android.content.Context; +import android.media.tv.ITvInputHardware; +import android.media.tv.ITvInputHardwareCallback; +import android.media.tv.TvInputHardwareInfo; +import android.media.tv.TvStreamConfig; import android.os.IBinder; import android.os.RemoteException; -import android.tv.ITvInputHardware; -import android.tv.ITvInputHardwareCallback; -import android.tv.TvInputHardwareInfo; -import android.tv.TvStreamConfig; import android.util.Slog; import android.util.SparseArray; import android.view.KeyEvent; diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java index e52f218..3d4e4b0 100644 --- a/services/core/java/com/android/server/tv/TvInputManagerService.java +++ b/services/core/java/com/android/server/tv/TvInputManagerService.java @@ -31,6 +31,18 @@ import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.database.Cursor; import android.graphics.Rect; +import android.media.tv.ITvInputClient; +import android.media.tv.ITvInputHardware; +import android.media.tv.ITvInputHardwareCallback; +import android.media.tv.ITvInputManager; +import android.media.tv.ITvInputService; +import android.media.tv.ITvInputServiceCallback; +import android.media.tv.ITvInputSession; +import android.media.tv.ITvInputSessionCallback; +import android.media.tv.TvContract; +import android.media.tv.TvInputHardwareInfo; +import android.media.tv.TvInputInfo; +import android.media.tv.TvInputService; import android.net.Uri; import android.os.Binder; import android.os.Bundle; @@ -41,18 +53,6 @@ import android.os.Message; import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; -import android.provider.TvContract; -import android.tv.ITvInputClient; -import android.tv.ITvInputHardware; -import android.tv.ITvInputHardwareCallback; -import android.tv.ITvInputManager; -import android.tv.ITvInputService; -import android.tv.ITvInputServiceCallback; -import android.tv.ITvInputSession; -import android.tv.ITvInputSessionCallback; -import android.tv.TvInputHardwareInfo; -import android.tv.TvInputInfo; -import android.tv.TvInputService; import android.util.Slog; import android.util.SparseArray; import android.view.InputChannel; diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index 81db8b3..a354c45 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -174,14 +174,14 @@ public class TaskStack { stackNdx = 0; } else { stackNdx = mTasks.size(); - final int currentUserId = mService.mCurrentUserId; - if (task.mUserId != currentUserId) { + if (!mService.isCurrentProfileLocked(task.mUserId)) { // Place the task below all current user tasks. while (--stackNdx >= 0) { - if (currentUserId != mTasks.get(stackNdx).mUserId) { + if (!mService.isCurrentProfileLocked(mTasks.get(stackNdx).mUserId)) { break; } } + // Put it above first non-current user task. ++stackNdx; } } @@ -352,7 +352,7 @@ public class TaskStack { int top = mTasks.size(); for (int taskNdx = 0; taskNdx < top; ++taskNdx) { Task task = mTasks.get(taskNdx); - if (task.mUserId == userId) { + if (mService.isCurrentProfileLocked(task.mUserId)) { mTasks.remove(taskNdx); mTasks.add(task); --top; diff --git a/services/core/jni/com_android_server_tv_TvInputHal.cpp b/services/core/jni/com_android_server_tv_TvInputHal.cpp index f0c4f3a..afe629d 100644 --- a/services/core/jni/com_android_server_tv_TvInputHal.cpp +++ b/services/core/jni/com_android_server_tv_TvInputHal.cpp @@ -316,7 +316,7 @@ static JNINativeMethod gTvInputHalMethods[] = { (void*) nativeOpen }, { "nativeSetSurface", "(JIILandroid/view/Surface;)I", (void*) nativeSetSurface }, - { "nativeGetStreamConfigs", "(JII)[Landroid/tv/TvStreamConfig;", + { "nativeGetStreamConfigs", "(JII)[Landroid/media/tv/TvStreamConfig;", (void*) nativeGetStreamConfigs }, { "nativeClose", "(J)V", (void*) nativeClose }, @@ -346,10 +346,10 @@ int register_android_server_tv_TvInputHal(JNIEnv* env) { gTvInputHalClassInfo.streamConfigsChanged, clazz, "streamConfigsChangedFromNative", "(I)V"); - FIND_CLASS(gTvStreamConfigClassInfo.clazz, "android/tv/TvStreamConfig"); + FIND_CLASS(gTvStreamConfigClassInfo.clazz, "android/media/tv/TvStreamConfig"); gTvStreamConfigClassInfo.clazz = jclass(env->NewGlobalRef(gTvStreamConfigClassInfo.clazz)); - FIND_CLASS(gTvStreamConfigBuilderClassInfo.clazz, "android/tv/TvStreamConfig$Builder"); + FIND_CLASS(gTvStreamConfigBuilderClassInfo.clazz, "android/media/tv/TvStreamConfig$Builder"); gTvStreamConfigBuilderClassInfo.clazz = jclass(env->NewGlobalRef(gTvStreamConfigBuilderClassInfo.clazz)); @@ -360,27 +360,27 @@ int register_android_server_tv_TvInputHal(JNIEnv* env) { GET_METHOD_ID( gTvStreamConfigBuilderClassInfo.streamId, gTvStreamConfigBuilderClassInfo.clazz, - "streamId", "(I)Landroid/tv/TvStreamConfig$Builder;"); + "streamId", "(I)Landroid/media/tv/TvStreamConfig$Builder;"); GET_METHOD_ID( gTvStreamConfigBuilderClassInfo.type, gTvStreamConfigBuilderClassInfo.clazz, - "type", "(I)Landroid/tv/TvStreamConfig$Builder;"); + "type", "(I)Landroid/media/tv/TvStreamConfig$Builder;"); GET_METHOD_ID( gTvStreamConfigBuilderClassInfo.maxWidth, gTvStreamConfigBuilderClassInfo.clazz, - "maxWidth", "(I)Landroid/tv/TvStreamConfig$Builder;"); + "maxWidth", "(I)Landroid/media/tv/TvStreamConfig$Builder;"); GET_METHOD_ID( gTvStreamConfigBuilderClassInfo.maxHeight, gTvStreamConfigBuilderClassInfo.clazz, - "maxHeight", "(I)Landroid/tv/TvStreamConfig$Builder;"); + "maxHeight", "(I)Landroid/media/tv/TvStreamConfig$Builder;"); GET_METHOD_ID( gTvStreamConfigBuilderClassInfo.generation, gTvStreamConfigBuilderClassInfo.clazz, - "generation", "(I)Landroid/tv/TvStreamConfig$Builder;"); + "generation", "(I)Landroid/media/tv/TvStreamConfig$Builder;"); GET_METHOD_ID( gTvStreamConfigBuilderClassInfo.build, gTvStreamConfigBuilderClassInfo.clazz, - "build", "()Landroid/tv/TvStreamConfig;"); + "build", "()Landroid/media/tv/TvStreamConfig;"); return 0; } diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 0f24ff6..e8b7b69 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -29,6 +29,7 @@ import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.media.AudioService; +import android.media.tv.TvInputManager; import android.os.Build; import android.os.Environment; import android.os.FactoryTest; @@ -43,7 +44,6 @@ import android.os.SystemClock; import android.os.SystemProperties; import android.os.UserHandle; import android.service.dreams.DreamService; -import android.tv.TvInputManager; import android.util.DisplayMetrics; import android.util.EventLog; import android.util.Log; diff --git a/wifi/java/android/net/wifi/ScanResult.java b/wifi/java/android/net/wifi/ScanResult.java index 58b0d61..f6d7f55 100644 --- a/wifi/java/android/net/wifi/ScanResult.java +++ b/wifi/java/android/net/wifi/ScanResult.java @@ -90,6 +90,19 @@ public class ScanResult implements Parcelable { */ public final static int UNSPECIFIED = -1; + /** information element from beacon + * @hide + */ + public static class InformationElement { + public int id; + public byte[] bytes; + } + + /** information elements found in the beacon + * @hide + */ + public InformationElement informationElements[]; + /** {@hide} */ public ScanResult(WifiSsid wifiSsid, String BSSID, String caps, int level, int frequency, long tsf) { @@ -199,6 +212,16 @@ public class ScanResult implements Parcelable { } else { dest.writeInt(0); } + if (informationElements != null) { + dest.writeInt(informationElements.length); + for (int i = 0; i < informationElements.length; i++) { + dest.writeInt(informationElements[i].id); + dest.writeInt(informationElements[i].bytes.length); + dest.writeByteArray(informationElements[i].bytes); + } + } else { + dest.writeInt(0); + } } /** Implement the Parcelable interface {@hide} */ @@ -223,6 +246,17 @@ public class ScanResult implements Parcelable { if (in.readInt() == 1) { sr.passpoint = WifiPasspointInfo.CREATOR.createFromParcel(in); } + int n = in.readInt(); + if (n != 0) { + sr.informationElements = new InformationElement[n]; + for (int i = 0; i < n; i++) { + sr.informationElements[i] = new InformationElement(); + sr.informationElements[i].id = in.readInt(); + int len = in.readInt(); + sr.informationElements[i].bytes = new byte[len]; + in.readByteArray(sr.informationElements[i].bytes); + } + } return sr; } @@ -230,5 +264,4 @@ public class ScanResult implements Parcelable { return new ScanResult[size]; } }; - } diff --git a/wifi/java/android/net/wifi/WifiScanner.java b/wifi/java/android/net/wifi/WifiScanner.java index 9ea7027..3b65ca8 100644 --- a/wifi/java/android/net/wifi/WifiScanner.java +++ b/wifi/java/android/net/wifi/WifiScanner.java @@ -40,6 +40,7 @@ import java.util.concurrent.CountDownLatch; * Get an instance of this class by calling * {@link android.content.Context#getSystemService(String) Context.getSystemService(Context * .WIFI_SCANNING_SERVICE)}. + * @hide */ public class WifiScanner { @@ -72,16 +73,14 @@ public class WifiScanner { public static final int REASON_INVALID_LISTENER = -2; /** Invalid request */ public static final int REASON_INVALID_REQUEST = -3; - /** Request conflicts with other scans that may be going on */ - public static final int REASON_CONFLICTING_REQUEST = -4; /** * Generic action callback invocation interface * @hide */ public static interface ActionListener { - public void onSuccess(Object result); - public void onFailure(int reason, Object exception); + public void onSuccess(); + public void onFailure(int reason, String description); } /** @@ -193,58 +192,6 @@ public class WifiScanner { } - /** information element from beacon */ - public static class InformationElement { - public int id; - public byte[] bytes; - } - - /** scan result with information elements from beacons */ - public static class FullScanResult implements Parcelable { - public ScanResult result; - public InformationElement informationElements[]; - - /** Implement the Parcelable interface {@hide} */ - public int describeContents() { - return 0; - } - - /** Implement the Parcelable interface {@hide} */ - public void writeToParcel(Parcel dest, int flags) { - result.writeToParcel(dest, flags); - dest.writeInt(informationElements.length); - for (int i = 0; i < informationElements.length; i++) { - dest.writeInt(informationElements[i].id); - dest.writeInt(informationElements[i].bytes.length); - dest.writeByteArray(informationElements[i].bytes); - } - } - - /** Implement the Parcelable interface {@hide} */ - public static final Creator<FullScanResult> CREATOR = - new Creator<FullScanResult>() { - public FullScanResult createFromParcel(Parcel in) { - FullScanResult result = new FullScanResult(); - result.result = ScanResult.CREATOR.createFromParcel(in); - int n = in.readInt(); - result.informationElements = new InformationElement[n]; - for (int i = 0; i < n; i++) { - result.informationElements[i] = new InformationElement(); - result.informationElements[i].id = in.readInt(); - int len = in.readInt(); - result.informationElements[i].bytes = new byte[len]; - in.readByteArray(result.informationElements[i].bytes); - } - - return result; - } - - public FullScanResult[] newArray(int size) { - return new FullScanResult[size]; - } - }; - } - /** @hide */ public static class ParcelableScanResults implements Parcelable { public ScanResult mResults[]; @@ -305,7 +252,7 @@ public class WifiScanner { /** * reports full scan result for each access point found in scan */ - public void onFullResult(FullScanResult fullScanResult); + public void onFullResult(ScanResult fullScanResult); } /** @hide */ @@ -336,13 +283,12 @@ public class WifiScanner { } /** * retrieves currently available scan results - * @param flush {@code true} means flush all results - * @param listener specifies which scan to cancel; must be same object as passed in {@link - * #startBackgroundScan} */ - public void retrieveScanResults(boolean flush, ScanListener listener) { + public ScanResult[] getScanResults() { validateChannel(); - sAsyncChannel.sendMessage(CMD_GET_SCAN_RESULTS, 0, getListenerKey(listener)); + Message reply = sAsyncChannel.sendMessageSynchronously(CMD_GET_SCAN_RESULTS, 0); + ScanResult[] results = (ScanResult[]) reply.obj; + return results; } /** specifies information about an access point of interest */ @@ -490,7 +436,7 @@ public class WifiScanner { } /** interface to receive hotlist events on; use this on {@link #setHotlist} */ - public static interface HotlistListener extends ActionListener { + public static interface HotspotListener extends ActionListener { /** indicates that access points were found by on going scans * @param results list of scan results, one for each access point visible currently */ @@ -550,10 +496,10 @@ public class WifiScanner { * @param hotspots access points of interest * @param apLostThreshold number of scans needed to indicate that AP is lost * @param listener object provided to report events on; this object must be unique and must - * also be provided on {@link #resetHotlist} + * also be provided on {@link #stopTrackingHotspots} */ - public void setHotlist(HotspotInfo[] hotspots, - int apLostThreshold, HotlistListener listener) { + public void startTrackingHotspots(HotspotInfo[] hotspots, + int apLostThreshold, HotspotListener listener) { validateChannel(); HotlistSettings settings = new HotlistSettings(); settings.hotspotInfos = hotspots; @@ -562,9 +508,9 @@ public class WifiScanner { /** * remove tracking of interesting access points - * @param listener same object provided in {@link #setHotlist} + * @param listener same object provided in {@link #startTrackingHotspots} */ - public void resetHotlist(HotlistListener listener) { + public void stopTrackingHotspots(HotspotListener listener) { validateChannel(); sAsyncChannel.sendMessage(CMD_RESET_HOTLIST, 0, removeListener(listener)); } @@ -769,10 +715,10 @@ public class WifiScanner { switch (msg.what) { /* ActionListeners grouped together */ case CMD_OP_SUCCEEDED : - ((ActionListener) listener).onSuccess(msg.obj); + ((ActionListener) listener).onSuccess(); break; case CMD_OP_FAILED : - ((ActionListener) listener).onFailure(msg.arg1, msg.obj); + ((ActionListener) listener).onFailure(msg.arg1, (String)msg.obj); removeListener(msg.arg2); break; case CMD_SCAN_RESULT : @@ -780,14 +726,14 @@ public class WifiScanner { ((ParcelableScanResults) msg.obj).getResults()); return; case CMD_FULL_SCAN_RESULT : - FullScanResult result = (FullScanResult) msg.obj; + ScanResult result = (ScanResult) msg.obj; ((ScanListener) listener).onFullResult(result); return; case CMD_PERIOD_CHANGED: ((ScanListener) listener).onPeriodChanged(msg.arg1); return; case CMD_AP_FOUND: - ((HotlistListener) listener).onFound( + ((HotspotListener) listener).onFound( ((ParcelableScanResults) msg.obj).getResults()); return; case CMD_WIFI_CHANGE_DETECTED: |