125aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichetpackage android.support.v17.leanback.widget; 225aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet 325aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichetimport android.content.Context; 425aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichetimport android.content.res.Resources; 54c696a0ad561090035960c2f34a058562c7f2aadCraig Stoutimport android.graphics.Color; 625aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichetimport android.support.v17.leanback.R; 725aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichetimport android.util.AttributeSet; 825aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet 94c696a0ad561090035960c2f34a058562c7f2aadCraig Stoutpublic class SpeechOrbView extends SearchOrbView { 1025aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet private final float mSoundLevelMaxZoom; 114c696a0ad561090035960c2f34a058562c7f2aadCraig Stout private final Colors mListeningOrbColors; 124c696a0ad561090035960c2f34a058562c7f2aadCraig Stout private final Colors mNotListeningOrbColors; 1325aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet 1425aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet private int mCurrentLevel = 0; 1525aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet private boolean mListening = false; 1625aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet 1725aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet public SpeechOrbView(Context context) { 1825aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet this(context, null); 1925aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet } 2025aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet 2125aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet public SpeechOrbView(Context context, AttributeSet attrs) { 2225aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet this(context, attrs, 0); 2325aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet } 2425aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet 2525aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet public SpeechOrbView(Context context, AttributeSet attrs, int defStyle) { 2625aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet super(context, attrs, defStyle); 2725aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet 2825aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet Resources resources = context.getResources(); 2925aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet mSoundLevelMaxZoom = 3025aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet resources.getFraction(R.fraction.lb_search_bar_speech_orb_max_level_zoom, 1, 1); 3125aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet 324c696a0ad561090035960c2f34a058562c7f2aadCraig Stout mNotListeningOrbColors = new Colors(resources.getColor(R.color.lb_speech_orb_not_recording), 334c696a0ad561090035960c2f34a058562c7f2aadCraig Stout resources.getColor(R.color.lb_speech_orb_not_recording_pulsed), 344c696a0ad561090035960c2f34a058562c7f2aadCraig Stout resources.getColor(R.color.lb_speech_orb_not_recording_icon)); 354c696a0ad561090035960c2f34a058562c7f2aadCraig Stout mListeningOrbColors = new Colors(resources.getColor(R.color.lb_speech_orb_recording), 364c696a0ad561090035960c2f34a058562c7f2aadCraig Stout resources.getColor(R.color.lb_speech_orb_recording), 374c696a0ad561090035960c2f34a058562c7f2aadCraig Stout Color.TRANSPARENT); 3825aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet 394c696a0ad561090035960c2f34a058562c7f2aadCraig Stout showNotListening(); 4025aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet } 4125aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet 4225aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet @Override 434c696a0ad561090035960c2f34a058562c7f2aadCraig Stout int getLayoutResourceId() { 444c696a0ad561090035960c2f34a058562c7f2aadCraig Stout return R.layout.lb_speech_orb; 4525aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet } 4625aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet 4725aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet public void showListening() { 484c696a0ad561090035960c2f34a058562c7f2aadCraig Stout setOrbColors(mListeningOrbColors); 494c696a0ad561090035960c2f34a058562c7f2aadCraig Stout setOrbIcon(getResources().getDrawable(R.drawable.lb_ic_search_mic)); 504c696a0ad561090035960c2f34a058562c7f2aadCraig Stout // Assume focused 514c696a0ad561090035960c2f34a058562c7f2aadCraig Stout animateOnFocus(true); 5249bd8747a667ae5f45a132d803cc18a80e963545Jerome Poichet enableOrbColorAnimation(false); 534c696a0ad561090035960c2f34a058562c7f2aadCraig Stout scaleOrbViewOnly(1f); 549e3b908cd06f14bc7810e744ccb174ee55c972a5Craig Stout mCurrentLevel = 0; 5525aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet mListening = true; 5625aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet } 5725aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet 5825aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet public void showNotListening() { 594c696a0ad561090035960c2f34a058562c7f2aadCraig Stout setOrbColors(mNotListeningOrbColors); 604c696a0ad561090035960c2f34a058562c7f2aadCraig Stout setOrbIcon(getResources().getDrawable(R.drawable.lb_ic_search_mic_out)); 614c696a0ad561090035960c2f34a058562c7f2aadCraig Stout animateOnFocus(hasFocus()); 624c696a0ad561090035960c2f34a058562c7f2aadCraig Stout scaleOrbViewOnly(1f); 6325aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet mListening = false; 6425aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet } 6525aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet 6625aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet public void setSoundLevel(int level) { 6725aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet if (!mListening) return; 6825aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet 6925aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet // Either ease towards the target level, or decay away from it depending on whether 7025aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet // its higher or lower than the current. 7125aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet if (level > mCurrentLevel) { 7249bd8747a667ae5f45a132d803cc18a80e963545Jerome Poichet mCurrentLevel = mCurrentLevel + ((level - mCurrentLevel) / 2); 7325aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet } else { 7449bd8747a667ae5f45a132d803cc18a80e963545Jerome Poichet mCurrentLevel = (int) (mCurrentLevel * 0.7f); 7525aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet } 7625aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet 779e3b908cd06f14bc7810e744ccb174ee55c972a5Craig Stout float zoom = 1f + (mSoundLevelMaxZoom - getFocusedZoom()) * mCurrentLevel / 100; 7849bd8747a667ae5f45a132d803cc18a80e963545Jerome Poichet 794c696a0ad561090035960c2f34a058562c7f2aadCraig Stout scaleOrbViewOnly(zoom); 8025aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet } 8125aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichet} 82