summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/current.xml28
-rw-r--r--core/java/android/app/NativeActivity.java14
-rw-r--r--core/java/android/view/InputConsumer.java39
-rw-r--r--core/java/android/view/InputQueue.java24
-rw-r--r--core/java/android/view/ViewRoot.java20
-rw-r--r--core/java/android/view/Window.java6
-rw-r--r--core/java/com/android/internal/os/BatteryStatsImpl.java11
-rw-r--r--core/java/com/android/internal/view/RootViewSurfaceTaker.java4
-rw-r--r--include/media/stagefright/MPEG4Writer.h1
-rw-r--r--media/libstagefright/MPEG4Writer.cpp99
-rw-r--r--policy/src/com/android/internal/policy/impl/PhoneWindow.java15
-rw-r--r--services/java/com/android/server/AppWidgetService.java1
12 files changed, 144 insertions, 118 deletions
diff --git a/api/current.xml b/api/current.xml
index 37538c3..f8c644e 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -26330,7 +26330,7 @@
deprecated="not deprecated"
visibility="public"
>
-<implements name="android.view.InputConsumer.Callback">
+<implements name="android.view.InputQueue.Callback">
</implements>
<implements name="android.view.SurfaceHolder.Callback">
</implements>
@@ -26342,7 +26342,7 @@
visibility="public"
>
</constructor>
-<method name="onInputConsumerCreated"
+<method name="onInputQueueCreated"
return="void"
abstract="false"
native="false"
@@ -26352,10 +26352,10 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="consumer" type="android.view.InputConsumer">
+<parameter name="queue" type="android.view.InputQueue">
</parameter>
</method>
-<method name="onInputConsumerDestroyed"
+<method name="onInputQueueDestroyed"
return="void"
abstract="false"
native="false"
@@ -26365,7 +26365,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="consumer" type="android.view.InputConsumer">
+<parameter name="queue" type="android.view.InputQueue">
</parameter>
</method>
<method name="surfaceChanged"
@@ -172775,23 +172775,23 @@
</parameter>
</constructor>
</class>
-<class name="InputConsumer"
+<class name="InputQueue"
extends="java.lang.Object"
abstract="false"
static="false"
- final="false"
+ final="true"
deprecated="not deprecated"
visibility="public"
>
</class>
-<interface name="InputConsumer.Callback"
+<interface name="InputQueue.Callback"
abstract="true"
static="true"
final="false"
deprecated="not deprecated"
visibility="public"
>
-<method name="onInputConsumerCreated"
+<method name="onInputQueueCreated"
return="void"
abstract="true"
native="false"
@@ -172801,10 +172801,10 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="consumer" type="android.view.InputConsumer">
+<parameter name="queue" type="android.view.InputQueue">
</parameter>
</method>
-<method name="onInputConsumerDestroyed"
+<method name="onInputQueueDestroyed"
return="void"
abstract="true"
native="false"
@@ -172814,7 +172814,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="consumer" type="android.view.InputConsumer">
+<parameter name="queue" type="android.view.InputQueue">
</parameter>
</method>
</interface>
@@ -187271,7 +187271,7 @@
<parameter name="event" type="android.view.MotionEvent">
</parameter>
</method>
-<method name="takeInputChannel"
+<method name="takeInputQueue"
return="void"
abstract="true"
native="false"
@@ -187281,7 +187281,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="callback" type="android.view.InputConsumer.Callback">
+<parameter name="callback" type="android.view.InputQueue.Callback">
</parameter>
</method>
<method name="takeKeyEvents"
diff --git a/core/java/android/app/NativeActivity.java b/core/java/android/app/NativeActivity.java
index 973ad60..429d164 100644
--- a/core/java/android/app/NativeActivity.java
+++ b/core/java/android/app/NativeActivity.java
@@ -7,7 +7,7 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.InputChannel;
-import android.view.InputConsumer;
+import android.view.InputQueue;
import android.view.SurfaceHolder;
import java.io.File;
@@ -17,7 +17,7 @@ import java.io.File;
* purely in native code. That is, a game (or game-like thing).
*/
public class NativeActivity extends Activity implements SurfaceHolder.Callback,
- InputConsumer.Callback {
+ InputQueue.Callback {
public static final String META_DATA_LIB_NAME = "android.app.lib_name";
private int mNativeHandle;
@@ -45,7 +45,7 @@ public class NativeActivity extends Activity implements SurfaceHolder.Callback,
ActivityInfo ai;
getWindow().takeSurface(this);
- getWindow().takeInputChannel(this);
+ getWindow().takeInputQueue(this);
try {
ai = getPackageManager().getActivityInfo(
@@ -145,11 +145,11 @@ public class NativeActivity extends Activity implements SurfaceHolder.Callback,
onSurfaceDestroyedNative(mNativeHandle, holder);
}
- public void onInputConsumerCreated(InputConsumer consumer) {
- onInputChannelCreatedNative(mNativeHandle, consumer.getInputChannel());
+ public void onInputQueueCreated(InputQueue queue) {
+ onInputChannelCreatedNative(mNativeHandle, queue.getInputChannel());
}
- public void onInputConsumerDestroyed(InputConsumer consumer) {
- onInputChannelDestroyedNative(mNativeHandle, consumer.getInputChannel());
+ public void onInputQueueDestroyed(InputQueue queue) {
+ onInputChannelDestroyedNative(mNativeHandle, queue.getInputChannel());
}
}
diff --git a/core/java/android/view/InputConsumer.java b/core/java/android/view/InputConsumer.java
deleted file mode 100644
index 63b26c6..0000000
--- a/core/java/android/view/InputConsumer.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.view;
-
-/**
- * Handle for consuming raw input events.
- */
-public class InputConsumer {
- public static interface Callback {
- void onInputConsumerCreated(InputConsumer consumer);
- void onInputConsumerDestroyed(InputConsumer consumer);
- }
-
- final InputChannel mChannel;
-
- /** @hide */
- public InputConsumer(InputChannel channel) {
- mChannel = channel;
- }
-
- /** @hide */
- public InputChannel getInputChannel() {
- return mChannel;
- }
-}
diff --git a/core/java/android/view/InputQueue.java b/core/java/android/view/InputQueue.java
index b38f7d5..7feee38 100644
--- a/core/java/android/view/InputQueue.java
+++ b/core/java/android/view/InputQueue.java
@@ -21,16 +21,25 @@ import android.util.Slog;
/**
* An input queue provides a mechanism for an application to receive incoming
- * input events sent over an input channel. Signalling is implemented by MessageQueue.
- * @hide
+ * input events. Currently only usable from native code.
*/
public final class InputQueue {
private static final String TAG = "InputQueue";
+ public static interface Callback {
+ void onInputQueueCreated(InputQueue queue);
+ void onInputQueueDestroyed(InputQueue queue);
+ }
+
+ final InputChannel mChannel;
+
// Describes the interpretation of an event.
// XXX This concept is tentative. See comments in android/input.h.
+ /** @hide */
public static final int INPUT_EVENT_NATURE_KEY = 1;
+ /** @hide */
public static final int INPUT_EVENT_NATURE_TOUCH = 2;
+ /** @hide */
public static final int INPUT_EVENT_NATURE_TRACKBALL = 3;
private static Object sLock = new Object();
@@ -40,7 +49,14 @@ public final class InputQueue {
private static native void nativeUnregisterInputChannel(InputChannel inputChannel);
private static native void nativeFinished(long finishedToken);
- private InputQueue() {
+ /** @hide */
+ public InputQueue(InputChannel channel) {
+ mChannel = channel;
+ }
+
+ /** @hide */
+ public InputChannel getInputChannel() {
+ return mChannel;
}
/**
@@ -48,6 +64,7 @@ public final class InputQueue {
* @param inputChannel The input channel to register.
* @param inputHandler The input handler to input events send to the target.
* @param messageQueue The message queue on whose thread the handler should be invoked.
+ * @hide
*/
public static void registerInputChannel(InputChannel inputChannel, InputHandler inputHandler,
MessageQueue messageQueue) {
@@ -71,6 +88,7 @@ public final class InputQueue {
* Unregisters an input channel.
* Does nothing if the channel is not currently registered.
* @param inputChannel The input channel to unregister.
+ * @hide
*/
public static void unregisterInputChannel(InputChannel inputChannel) {
if (inputChannel == null) {
diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java
index 8984b74..4854190 100644
--- a/core/java/android/view/ViewRoot.java
+++ b/core/java/android/view/ViewRoot.java
@@ -154,8 +154,8 @@ public final class ViewRoot extends Handler implements ViewParent,
final View.AttachInfo mAttachInfo;
InputChannel mInputChannel;
- InputConsumer.Callback mInputConsumerCallback;
- InputConsumer mInputConsumer;
+ InputQueue.Callback mInputQueueCallback;
+ InputQueue mInputQueue;
final Rect mTempRect; // used in the transaction to not thrash the heap.
final Rect mVisRect; // used to retrieve visible rect of focused view.
@@ -558,12 +558,12 @@ public final class ViewRoot extends Handler implements ViewParent,
if (WindowManagerPolicy.ENABLE_NATIVE_INPUT_DISPATCH) {
if (view instanceof RootViewSurfaceTaker) {
- mInputConsumerCallback =
- ((RootViewSurfaceTaker)view).willYouTakeTheInputConsumer();
+ mInputQueueCallback =
+ ((RootViewSurfaceTaker)view).willYouTakeTheInputQueue();
}
- if (mInputConsumerCallback != null) {
- mInputConsumer = new InputConsumer(mInputChannel);
- mInputConsumerCallback.onInputConsumerCreated(mInputConsumer);
+ if (mInputQueueCallback != null) {
+ mInputQueue = new InputQueue(mInputChannel);
+ mInputQueueCallback.onInputQueueCreated(mInputQueue);
} else {
InputQueue.registerInputChannel(mInputChannel, mInputHandler,
Looper.myQueue());
@@ -1747,9 +1747,9 @@ public final class ViewRoot extends Handler implements ViewParent,
if (WindowManagerPolicy.ENABLE_NATIVE_INPUT_DISPATCH) {
if (mInputChannel != null) {
- if (mInputConsumerCallback != null) {
- mInputConsumerCallback.onInputConsumerDestroyed(mInputConsumer);
- mInputConsumerCallback = null;
+ if (mInputQueueCallback != null) {
+ mInputQueueCallback.onInputQueueDestroyed(mInputQueue);
+ mInputQueueCallback = null;
} else {
InputQueue.unregisterInputChannel(mInputChannel);
}
diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java
index b00d33d..f40734b 100644
--- a/core/java/android/view/Window.java
+++ b/core/java/android/view/Window.java
@@ -481,11 +481,11 @@ public abstract class Window {
public abstract void takeSurface(SurfaceHolder.Callback callback);
/**
- * Take ownership of this window's InputChannel. The window will no
- * longer read and dispatch input events from the channel; it is your
+ * Take ownership of this window's InputQueue. The window will no
+ * longer read and dispatch input events from the queue; it is your
* responsibility to do so.
*/
- public abstract void takeInputChannel(InputConsumer.Callback callback);
+ public abstract void takeInputQueue(InputQueue.Callback callback);
/**
* Return whether this window is being displayed with a floating style
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index f8ab04c..642c313 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -3892,6 +3892,17 @@ public final class BatteryStatsImpl extends BatteryStats {
mHistoryBaseTime = rec.time;
}
}
+
+ long oldnow = SystemClock.elapsedRealtime() - (5*60*100);
+ if (oldnow > 0) {
+ // If the system process has restarted, but not the entire
+ // system, then the mHistoryBaseTime already accounts for
+ // much of the elapsed time. We thus want to adjust it back,
+ // to avoid large gaps in the data. We determine we are
+ // in this case by arbitrarily saying it is so if at this
+ // point in boot the elapsed time is already more than 5 seconds.
+ mHistoryBaseTime -= oldnow;
+ }
}
void writeHistory(Parcel out) {
diff --git a/core/java/com/android/internal/view/RootViewSurfaceTaker.java b/core/java/com/android/internal/view/RootViewSurfaceTaker.java
index 991266a..7ff8d4c 100644
--- a/core/java/com/android/internal/view/RootViewSurfaceTaker.java
+++ b/core/java/com/android/internal/view/RootViewSurfaceTaker.java
@@ -1,6 +1,6 @@
package com.android.internal.view;
-import android.view.InputConsumer;
+import android.view.InputQueue;
import android.view.SurfaceHolder;
/** hahahah */
@@ -9,5 +9,5 @@ public interface RootViewSurfaceTaker {
void setSurfaceType(int type);
void setSurfaceFormat(int format);
void setSurfaceKeepScreenOn(boolean keepOn);
- InputConsumer.Callback willYouTakeTheInputConsumer();
+ InputQueue.Callback willYouTakeTheInputQueue();
}
diff --git a/include/media/stagefright/MPEG4Writer.h b/include/media/stagefright/MPEG4Writer.h
index d62df46..39d0ea1 100644
--- a/include/media/stagefright/MPEG4Writer.h
+++ b/include/media/stagefright/MPEG4Writer.h
@@ -60,6 +60,7 @@ private:
class Track;
FILE *mFile;
+ bool mUse32BitOffset;
bool mPaused;
bool mStarted;
off_t mOffset;
diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp
index cd20ec7..4242d36 100644
--- a/media/libstagefright/MPEG4Writer.cpp
+++ b/media/libstagefright/MPEG4Writer.cpp
@@ -48,7 +48,7 @@ public:
int64_t getDurationUs() const;
int64_t getEstimatedTrackSizeBytes() const;
- void writeTrackHeader(int32_t trackID);
+ void writeTrackHeader(int32_t trackID, bool use32BitOffset = true);
private:
MPEG4Writer *mOwner;
@@ -123,6 +123,7 @@ private:
MPEG4Writer::MPEG4Writer(const char *filename)
: mFile(fopen(filename, "wb")),
+ mUse32BitOffset(true),
mPaused(false),
mStarted(false),
mOffset(0),
@@ -134,6 +135,7 @@ MPEG4Writer::MPEG4Writer(const char *filename)
MPEG4Writer::MPEG4Writer(int fd)
: mFile(fdopen(fd, "wb")),
+ mUse32BitOffset(true),
mPaused(false),
mStarted(false),
mOffset(0),
@@ -218,7 +220,11 @@ status_t MPEG4Writer::start() {
mMdatOffset = mFreeBoxOffset + mEstimatedMoovBoxSize;
mOffset = mMdatOffset;
fseeko(mFile, mMdatOffset, SEEK_SET);
- write("\x00\x00\x00\x01mdat????????", 16);
+ if (mUse32BitOffset) {
+ write("????mdat", 8);
+ } else {
+ write("\x00\x00\x00\x01mdat????????", 16);
+ }
status_t err = startTracks();
if (err != OK) {
@@ -257,10 +263,16 @@ void MPEG4Writer::stop() {
// Fix up the size of the 'mdat' chunk.
- fseeko(mFile, mMdatOffset + 8, SEEK_SET);
- int64_t size = mOffset - mMdatOffset;
- size = hton64(size);
- fwrite(&size, 1, 8, mFile);
+ if (mUse32BitOffset) {
+ fseeko(mFile, mMdatOffset, SEEK_SET);
+ int32_t size = htonl(static_cast<int32_t>(mOffset - mMdatOffset));
+ fwrite(&size, 1, 4, mFile);
+ } else {
+ fseeko(mFile, mMdatOffset + 8, SEEK_SET);
+ int64_t size = mOffset - mMdatOffset;
+ size = hton64(size);
+ fwrite(&size, 1, 8, mFile);
+ }
fseeko(mFile, mOffset, SEEK_SET);
time_t now = time(NULL);
@@ -269,6 +281,8 @@ void MPEG4Writer::stop() {
mMoovBoxBuffer = (uint8_t *) malloc(mEstimatedMoovBoxSize);
mMoovBoxBufferOffset = 0;
CHECK(mMoovBoxBuffer != NULL);
+ int32_t timeScale = 1000;
+ int32_t duration = max_duration / timeScale;
beginBox("moov");
@@ -276,9 +290,9 @@ void MPEG4Writer::stop() {
writeInt32(0); // version=0, flags=0
writeInt32(now); // creation time
writeInt32(now); // modification time
- writeInt32(1000); // timescale
- writeInt32(max_duration / 1000);
- writeInt32(0x10000); // rate
+ writeInt32(timeScale); // timescale
+ writeInt32(duration);
+ writeInt32(0x10000); // rate: 1.0
writeInt16(0x100); // volume
writeInt16(0); // reserved
writeInt32(0); // reserved
@@ -304,7 +318,7 @@ void MPEG4Writer::stop() {
int32_t id = 1;
for (List<Track *>::iterator it = mTracks.begin();
it != mTracks.end(); ++it, ++id) {
- (*it)->writeTrackHeader(id);
+ (*it)->writeTrackHeader(id, mUse32BitOffset);
}
endBox(); // moov
@@ -415,7 +429,8 @@ size_t MPEG4Writer::write(
const size_t bytes = size * nmemb;
if (mWriteMoovBoxToMemory) {
- if (8 + mMoovBoxBufferOffset + bytes > mEstimatedMoovBoxSize) {
+ off_t moovBoxSize = 8 + mMoovBoxBufferOffset + bytes;
+ if (moovBoxSize > mEstimatedMoovBoxSize) {
for (List<off_t>::iterator it = mBoxes.begin();
it != mBoxes.end(); ++it) {
(*it) += mOffset;
@@ -1162,24 +1177,29 @@ int64_t MPEG4Writer::Track::getEstimatedTrackSizeBytes() const {
return mEstimatedTrackSizeBytes;
}
-void MPEG4Writer::Track::writeTrackHeader(int32_t trackID) {
+void MPEG4Writer::Track::writeTrackHeader(
+ int32_t trackID, bool use32BitOffset) {
const char *mime;
bool success = mMeta->findCString(kKeyMIMEType, &mime);
CHECK(success);
bool is_audio = !strncasecmp(mime, "audio/", 6);
+ int32_t timeScale = 1000;
+ int32_t duration = getDurationUs() / timeScale;
time_t now = time(NULL);
mOwner->beginBox("trak");
mOwner->beginBox("tkhd");
- mOwner->writeInt32(0); // version=0, flags=0
+ // Flags = 7 to indicate that the track is enabled, and
+ // part of the presentation
+ mOwner->writeInt32(0x07); // version=0, flags=7
mOwner->writeInt32(now); // creation time
mOwner->writeInt32(now); // modification time
mOwner->writeInt32(trackID);
mOwner->writeInt32(0); // reserved
- mOwner->writeInt32(getDurationUs() / 1000);
+ mOwner->writeInt32(duration);
mOwner->writeInt32(0); // reserved
mOwner->writeInt32(0); // reserved
mOwner->writeInt16(0); // layer
@@ -1214,15 +1234,17 @@ void MPEG4Writer::Track::writeTrackHeader(int32_t trackID) {
int64_t moovStartTimeUs = mOwner->getStartTimestampUs();
if (mStartTimestampUs != moovStartTimeUs) {
mOwner->beginBox("edts");
- mOwner->writeInt32(0); // version=0, flags=0
mOwner->beginBox("elst");
- mOwner->writeInt32(0); // version=0, flags=0
- mOwner->writeInt32(1); // a single entry
+ mOwner->writeInt32(0); // version=0, flags=0: 32-bit time
+ mOwner->writeInt32(2); // never ends with an empty list
int64_t durationMs =
(mStartTimestampUs - moovStartTimeUs) / 1000;
mOwner->writeInt32(durationMs); // edit duration
mOwner->writeInt32(-1); // empty edit box to signal starting time offset
- mOwner->writeInt32(1); // x1 rate
+ mOwner->writeInt32(1 << 16); // x1 rate
+ mOwner->writeInt32(duration);
+ mOwner->writeInt32(0);
+ mOwner->writeInt32(1 << 16);
mOwner->endBox();
mOwner->endBox();
}
@@ -1233,9 +1255,14 @@ void MPEG4Writer::Track::writeTrackHeader(int32_t trackID) {
mOwner->writeInt32(0); // version=0, flags=0
mOwner->writeInt32(now); // creation time
mOwner->writeInt32(now); // modification time
- mOwner->writeInt32(1000); // timescale
- mOwner->writeInt32(getDurationUs() / 1000);
- mOwner->writeInt16(0); // language code XXX
+ mOwner->writeInt32(timeScale); // timescale
+ mOwner->writeInt32(duration); // duration
+ // Language follows the three letter standard ISO-639-2/T
+ // 'e', 'n', 'g' for "English", for instance.
+ // Each character is packed as the difference between its ASCII value and 0x60.
+ // For "English", these are 00101, 01110, 00111.
+ // XXX: Where is the padding bit located: 0x15C7?
+ mOwner->writeInt16(0); // language code
mOwner->writeInt16(0); // predefined
mOwner->endBox();
@@ -1246,7 +1273,8 @@ void MPEG4Writer::Track::writeTrackHeader(int32_t trackID) {
mOwner->writeInt32(0); // reserved
mOwner->writeInt32(0); // reserved
mOwner->writeInt32(0); // reserved
- mOwner->writeCString(is_audio ? "SoundHandler": ""); // name
+ // Removing "r" for the name string just makes the string 4 byte aligned
+ mOwner->writeCString(is_audio ? "SoundHandle": "VideoHandle"); // name
mOwner->endBox();
mOwner->beginBox("minf");
@@ -1258,7 +1286,7 @@ void MPEG4Writer::Track::writeTrackHeader(int32_t trackID) {
mOwner->endBox();
} else {
mOwner->beginBox("vmhd");
- mOwner->writeInt32(0x00000001); // version=0, flags=1
+ mOwner->writeInt32(0x01); // version=0, flags=1
mOwner->writeInt16(0); // graphics mode
mOwner->writeInt16(0); // opcolor
mOwner->writeInt16(0);
@@ -1269,15 +1297,15 @@ void MPEG4Writer::Track::writeTrackHeader(int32_t trackID) {
mOwner->beginBox("dinf");
mOwner->beginBox("dref");
mOwner->writeInt32(0); // version=0, flags=0
- mOwner->writeInt32(1);
+ mOwner->writeInt32(1); // entry count (either url or urn)
+ // The table index here refers to the sample description index
+ // in the sample table entries.
mOwner->beginBox("url ");
- mOwner->writeInt32(1); // version=0, flags=1
+ mOwner->writeInt32(1); // version=0, flags=1 (self-contained)
mOwner->endBox(); // url
mOwner->endBox(); // dref
mOwner->endBox(); // dinf
- mOwner->endBox(); // minf
-
mOwner->beginBox("stbl");
mOwner->beginBox("stsd");
@@ -1361,7 +1389,7 @@ void MPEG4Writer::Track::writeTrackHeader(int32_t trackID) {
mOwner->writeInt32(0); // reserved
mOwner->writeInt16(0); // reserved
- mOwner->writeInt16(0); // data ref index
+ mOwner->writeInt16(1); // data ref index
mOwner->writeInt16(0); // predefined
mOwner->writeInt16(0); // reserved
mOwner->writeInt32(0); // predefined
@@ -1435,6 +1463,11 @@ void MPEG4Writer::Track::writeTrackHeader(int32_t trackID) {
mOwner->endBox(); // avcC
}
+ mOwner->beginBox("pasp");
+ // This is useful if the pixel is not square
+ mOwner->writeInt32(1 << 16); // hspacing
+ mOwner->writeInt32(1 << 16); // vspacing
+ mOwner->endBox(); // pasp
mOwner->endBox(); // mp4v, s263 or avc1
}
mOwner->endBox(); // stsd
@@ -1487,17 +1520,21 @@ void MPEG4Writer::Track::writeTrackHeader(int32_t trackID) {
mOwner->writeInt32(it->sampleDescriptionId);
}
mOwner->endBox(); // stsc
-
- mOwner->beginBox("co64");
+ mOwner->beginBox(use32BitOffset? "stco": "co64");
mOwner->writeInt32(0); // version=0, flags=0
mOwner->writeInt32(mChunkOffsets.size());
for (List<off_t>::iterator it = mChunkOffsets.begin();
it != mChunkOffsets.end(); ++it) {
- mOwner->writeInt64((*it));
+ if (use32BitOffset) {
+ mOwner->writeInt32(static_cast<int32_t>(*it));
+ } else {
+ mOwner->writeInt64((*it));
+ }
}
mOwner->endBox(); // co64
mOwner->endBox(); // stbl
+ mOwner->endBox(); // minf
mOwner->endBox(); // mdia
mOwner->endBox(); // trak
}
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
index 7877611..5642588 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
@@ -44,7 +44,6 @@ import android.graphics.drawable.Drawable;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Bundle;
-import android.os.Message;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.SystemClock;
@@ -56,14 +55,13 @@ import android.util.Log;
import android.util.SparseArray;
import android.view.Gravity;
import android.view.HapticFeedbackConstants;
-import android.view.InputConsumer;
+import android.view.InputQueue;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
-import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.View;
import android.view.ViewGroup;
@@ -71,7 +69,6 @@ import android.view.ViewManager;
import android.view.VolumePanel;
import android.view.Window;
import android.view.WindowManager;
-import android.view.InputConsumer.Callback;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
import android.view.animation.Animation;
@@ -110,7 +107,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
SurfaceHolder.Callback mTakeSurfaceCallback;
BaseSurfaceHolder mSurfaceHolder;
- InputConsumer.Callback mTakeInputChannelCallback;
+ InputQueue.Callback mTakeInputQueueCallback;
private boolean mIsFloating;
@@ -255,8 +252,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
mTakeSurfaceCallback = callback;
}
- public void takeInputChannel(InputConsumer.Callback callback) {
- mTakeInputChannelCallback = callback;
+ public void takeInputQueue(InputQueue.Callback callback) {
+ mTakeInputQueueCallback = callback;
}
@Override
@@ -2045,8 +2042,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
return mFeatureId < 0 ? mTakeSurfaceCallback : null;
}
- public InputConsumer.Callback willYouTakeTheInputConsumer() {
- return mFeatureId < 0 ? mTakeInputChannelCallback : null;
+ public InputQueue.Callback willYouTakeTheInputQueue() {
+ return mFeatureId < 0 ? mTakeInputQueueCallback : null;
}
public void setSurfaceType(int type) {
diff --git a/services/java/com/android/server/AppWidgetService.java b/services/java/com/android/server/AppWidgetService.java
index dc5fd30..3ed6c12 100644
--- a/services/java/com/android/server/AppWidgetService.java
+++ b/services/java/com/android/server/AppWidgetService.java
@@ -1204,6 +1204,7 @@ class AppWidgetService extends IAppWidgetService.Stub
// If it's currently showing, call back with the new AppWidgetProviderInfo.
for (int j=0; j<M; j++) {
AppWidgetId id = p.instances.get(j);
+ id.views = null;
if (id.host != null && id.host.callbacks != null) {
try {
id.host.callbacks.providerChanged(id.appWidgetId, p.info);