Merge "Make Property objects in View final"
diff --git a/docs/html/guide/developing/device.jd b/docs/html/guide/developing/device.jd
index deb7a2d..76b2516 100644
--- a/docs/html/guide/developing/device.jd
+++ b/docs/html/guide/developing/device.jd
@@ -164,6 +164,10 @@
     <td><code>18D1</code></td>
   </tr>
   <tr>
+    <td>Hisense</td>
+    <td><code>109B</code></td>
+  </tr>
+  <tr>
     <td>HTC</td>
     <td><code>0BB4</code></td>
   </tr>
diff --git a/docs/html/sdk/oem-usb.jd b/docs/html/sdk/oem-usb.jd
index 88bf008..ddc7def 100644
--- a/docs/html/sdk/oem-usb.jd
+++ b/docs/html/sdk/oem-usb.jd
@@ -73,12 +73,22 @@
        Garmin-Asus
     </td>	<td><a
 href="https://www.garminasus.com/en_US/support/pcsync/">https://www.garminasus.com/en_US/support/pcsync/</a></td>
-</tr><tr><td>HTC</td>	<td><a href="http://www.htc.com">http://www.htc.com </a> <br>Click on the
+</tr>
+
+<tr><td>Hisense</td>
+  <td><a
+href="http://app.hismarttv.com/dss/resourcecontent.do?method=viewResourceDetail&resourceId=16&type=5">http://app.hismarttv.com/dss/resourcecontent.do?method=viewResourceDetail&amp;resourceId=16&amp;type=5 </a></td>
+</tr>
+
+<tr><td>HTC</td>	<td><a href="http://www.htc.com">http://www.htc.com </a> <br>Click on the
 support tab to select your products/device.  Different regions will have different links.</td>
 </tr>
+
 <tr><td>Huawei</td>	<td><a
 href="http://www.huaweidevice.com/worldwide/downloadCenter.do?method=list&flay=software&directoryId=20&treeId=0">http://www.huaweidevice.com/worldwide/downloadCenter.do?method=list&amp;flay=software&amp;directoryId=20&amp;treeId=0</a></td>
-</tr><tr><td>KT Tech</td>	<td><a
+</tr>
+
+<tr><td>KT Tech</td>	<td><a
 href="http://www.kttech.co.kr/cscenter/download05.asp">http://www.kttech.co.kr/cscenter/download05.asp</a> for EV-S100(Take)</td>
 </tr>
   <tr>
diff --git a/services/audioflinger/AudioMixer.cpp b/services/audioflinger/AudioMixer.cpp
index 1ebcd26..59751ac 100644
--- a/services/audioflinger/AudioMixer.cpp
+++ b/services/audioflinger/AudioMixer.cpp
@@ -48,6 +48,8 @@
 AudioMixer::AudioMixer(size_t frameCount, uint32_t sampleRate)
     :   mActiveTrack(0), mTrackNames(0), mSampleRate(sampleRate)
 {
+    // AudioMixer is not yet capable of multi-channel beyond stereo
+    assert(2 == MAX_NUM_CHANNELS);
     mState.enabledTracks= 0;
     mState.needsChanged = 0;
     mState.frameCount   = frameCount;
@@ -124,24 +126,23 @@
 void AudioMixer::deleteTrackName(int name)
 {
     name -= TRACK0;
-    if (uint32_t(name) < MAX_NUM_TRACKS) {
-        ALOGV("deleteTrackName(%d)", name);
-        track_t& track(mState.tracks[ name ]);
-        if (track.enabled != 0) {
-            track.enabled = 0;
-            invalidateState(1<<name);
-        }
-        if (track.resampler) {
-            // delete  the resampler
-            delete track.resampler;
-            track.resampler = NULL;
-            track.sampleRate = mSampleRate;
-            invalidateState(1<<name);
-        }
-        track.volumeInc[0] = 0;
-        track.volumeInc[1] = 0;
-        mTrackNames &= ~(1<<name);
+    assert(uint32_t(name) < MAX_NUM_TRACKS);
+    ALOGV("deleteTrackName(%d)", name);
+    track_t& track(mState.tracks[ name ]);
+    if (track.enabled != 0) {
+        track.enabled = 0;
+        invalidateState(1<<name);
     }
+    if (track.resampler) {
+        // delete  the resampler
+        delete track.resampler;
+        track.resampler = NULL;
+        track.sampleRate = mSampleRate;
+        invalidateState(1<<name);
+    }
+    track.volumeInc[0] = 0;
+    track.volumeInc[1] = 0;
+    mTrackNames &= ~(1<<name);
 }
 
 void AudioMixer::enable()
@@ -170,68 +171,73 @@
     mActiveTrack = track;
 }
 
-status_t AudioMixer::setParameter(int target, int name, void *value)
+void AudioMixer::setParameter(int target, int name, void *value)
 {
     int valueInt = (int)value;
     int32_t *valueBuf = (int32_t *)value;
 
     switch (target) {
+
     case TRACK:
-        if (name == CHANNEL_MASK) {
+        switch (name) {
+        case CHANNEL_MASK: {
             uint32_t mask = (uint32_t)value;
             if (mState.tracks[ mActiveTrack ].channelMask != mask) {
                 uint8_t channelCount = popcount(mask);
-                if ((channelCount <= MAX_NUM_CHANNELS) && (channelCount)) {
-                    mState.tracks[ mActiveTrack ].channelMask = mask;
-                    mState.tracks[ mActiveTrack ].channelCount = channelCount;
-                    ALOGV("setParameter(TRACK, CHANNEL_MASK, %x)", mask);
-                    invalidateState(1<<mActiveTrack);
-                    return NO_ERROR;
-                }
-            } else {
-                return NO_ERROR;
+                assert((channelCount <= MAX_NUM_CHANNELS) && (channelCount));
+                mState.tracks[ mActiveTrack ].channelMask = mask;
+                mState.tracks[ mActiveTrack ].channelCount = channelCount;
+                ALOGV("setParameter(TRACK, CHANNEL_MASK, %x)", mask);
+                invalidateState(1<<mActiveTrack);
             }
-        }
-        if (name == MAIN_BUFFER) {
+            } break;
+        case MAIN_BUFFER:
             if (mState.tracks[ mActiveTrack ].mainBuffer != valueBuf) {
                 mState.tracks[ mActiveTrack ].mainBuffer = valueBuf;
                 ALOGV("setParameter(TRACK, MAIN_BUFFER, %p)", valueBuf);
                 invalidateState(1<<mActiveTrack);
             }
-            return NO_ERROR;
-        }
-        if (name == AUX_BUFFER) {
+            break;
+        case AUX_BUFFER:
             if (mState.tracks[ mActiveTrack ].auxBuffer != valueBuf) {
                 mState.tracks[ mActiveTrack ].auxBuffer = valueBuf;
                 ALOGV("setParameter(TRACK, AUX_BUFFER, %p)", valueBuf);
                 invalidateState(1<<mActiveTrack);
             }
-            return NO_ERROR;
+            break;
+        default:
+            // bad name
+            assert(false);
         }
-
         break;
+
     case RESAMPLE:
-        if (name == SAMPLE_RATE) {
-            if (valueInt > 0) {
-                track_t& track = mState.tracks[ mActiveTrack ];
-                if (track.setResampler(uint32_t(valueInt), mSampleRate)) {
-                    ALOGV("setParameter(RESAMPLE, SAMPLE_RATE, %u)",
-                            uint32_t(valueInt));
-                    invalidateState(1<<mActiveTrack);
-                }
-                return NO_ERROR;
+        switch (name) {
+        case SAMPLE_RATE: {
+            assert(valueInt > 0);
+            track_t& track = mState.tracks[ mActiveTrack ];
+            if (track.setResampler(uint32_t(valueInt), mSampleRate)) {
+                ALOGV("setParameter(RESAMPLE, SAMPLE_RATE, %u)",
+                        uint32_t(valueInt));
+                invalidateState(1<<mActiveTrack);
             }
-        }
-        if (name == RESET) {
+            } break;
+        case RESET: {
             track_t& track = mState.tracks[ mActiveTrack ];
             track.resetResampler();
             invalidateState(1<<mActiveTrack);
-            return NO_ERROR;
+            } break;
+        default:
+            // bad name
+            assert(false);
         }
         break;
+
     case RAMP_VOLUME:
     case VOLUME:
-        if ((uint32_t(name-VOLUME0) < MAX_NUM_CHANNELS)) {
+        switch (name) {
+        case VOLUME0:
+        case VOLUME1: {
             track_t& track = mState.tracks[ mActiveTrack ];
             if (track.volume[name-VOLUME0] != valueInt) {
                 ALOGV("setParameter(VOLUME, VOLUME0/1: %04x)", valueInt);
@@ -250,8 +256,8 @@
                 }
                 invalidateState(1<<mActiveTrack);
             }
-            return NO_ERROR;
-        } else if (name == AUXLEVEL) {
+            } break;
+        case AUXLEVEL: {
             track_t& track = mState.tracks[ mActiveTrack ];
             if (track.auxLevel != valueInt) {
                 ALOGV("setParameter(VOLUME, AUXLEVEL: %04x)", valueInt);
@@ -270,11 +276,17 @@
                 }
                 invalidateState(1<<mActiveTrack);
             }
-            return NO_ERROR;
+            } break;
+        default:
+            // bad name
+            assert(false);
         }
         break;
+
+    default:
+        // bad target
+        assert(false);
     }
-    return BAD_VALUE;
 }
 
 bool AudioMixer::track_t::setResampler(uint32_t value, uint32_t devSampleRate)
diff --git a/services/audioflinger/AudioMixer.h b/services/audioflinger/AudioMixer.h
index f380b35..288c70e 100644
--- a/services/audioflinger/AudioMixer.h
+++ b/services/audioflinger/AudioMixer.h
@@ -81,7 +81,7 @@
     void        disable();
 
     void        setActiveTrack(int track);
-    status_t    setParameter(int target, int name, void *value);
+    void        setParameter(int target, int name, void *value);
 
     void        setBufferProvider(AudioBufferProvider* bufferProvider);
     void        process();