From 4e81bd4bcf60a934d4cd589dab6e2bddb88d7356 Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Mon, 1 Oct 2012 20:21:02 -0700 Subject: [PATCH] Attempt to fix missing transport control in keyguard This attempts to fix a bug where the transport control would sometimes be inoperative. The problem is that we had two transport control layouts on some devices because they were being declared in the layout file. The fix is to only inflate the layout once when KeyguardHostView is created. Also removes redundant KeyguardStatusView. Fixes bug 7254833 Change-Id: Iab84e8326ff745ee57be5177ab2561114c8dc6f0 --- core/res/res/layout/keyguard_widget_region.xml | 5 +- core/res/res/values/symbols.xml | 2 + .../policy/impl/keyguard/KeyguardHostView.java | 88 ++++++++++++---------- 3 files changed, 51 insertions(+), 44 deletions(-) diff --git a/core/res/res/layout/keyguard_widget_region.xml b/core/res/res/layout/keyguard_widget_region.xml index 42bf42b228b1..7bf06edad0df 100644 --- a/core/res/res/layout/keyguard_widget_region.xml +++ b/core/res/res/layout/keyguard_widget_region.xml @@ -32,9 +32,6 @@ android:layout_weight="1" android:clipChildren="false" android:clipToPadding="false"> - - - - \ No newline at end of file + diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index eb2b5a677eac..34e00fe1ef77 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1330,6 +1330,8 @@ + + diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java index a7fc1a165490..8e7e07f7b9d6 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java @@ -67,6 +67,7 @@ public class KeyguardHostView extends KeyguardViewBase { private AppWidgetHost mAppWidgetHost; private KeyguardWidgetPager mAppWidgetContainer; private ViewFlipper mSecurityViewContainer; + private KeyguardTransportControlView mTransportControl; private boolean mEnableMenuKey; private boolean mIsVerifyUnlockOnly; private boolean mEnableFallback; // TODO: This should get the value from KeyguardPatternView @@ -80,7 +81,6 @@ public class KeyguardHostView extends KeyguardViewBase { private KeyguardSecurityModel mSecurityModel; private Rect mTempRect = new Rect(); - private KeyguardTransportControlView mTransportControl; /*package*/ interface TransportCallback { void hide(); @@ -145,45 +145,7 @@ public class KeyguardHostView extends KeyguardViewBase { kgwr.setVisibility(VISIBLE); mSecurityViewContainer = (ViewFlipper) findViewById(R.id.view_flipper); - // This code manages showing/hiding the transport control. We keep it around and only - // add it to the hierarchy if it needs to be present. - mTransportControl = - (KeyguardTransportControlView) findViewById(R.id.keyguard_transport_control); - if (mTransportControl != null) { - mTransportControl.setKeyguardCallback(new TransportCallback() { - boolean mSticky = false; - @Override - public void hide() { - int page = getWidgetPosition(R.id.keyguard_transport_control); - if (page != -1 && !mSticky) { - if (page == mAppWidgetContainer.getCurrentPage()) { - // Switch back to clock view if music was showing. - mAppWidgetContainer - .setCurrentPage(getWidgetPosition(R.id.keyguard_status_view)); - } - mAppWidgetContainer.removeView(mTransportControl); - // XXX keep view attached to hierarchy so we still get show/hide events - // from AudioManager - KeyguardHostView.this.addView(mTransportControl); - mTransportControl.setVisibility(View.GONE); - showAppropriateWidgetPage(); - } - } - - @Override - public void show() { - if (getWidgetPosition(R.id.keyguard_transport_control) == -1) { - KeyguardHostView.this.removeView(mTransportControl); - mAppWidgetContainer.addView(mTransportControl, - getWidgetPosition(R.id.keyguard_status_view) + 1); - mTransportControl.setVisibility(View.VISIBLE); - // Once shown, leave it showing - mSticky = true; - showAppropriateWidgetPage(); - } - } - }); - } + addDefaultWidgets(); updateSecurityViews(); setSystemUiVisibility(getSystemUiVisibility() | View.STATUS_BAR_DISABLE_BACK); } @@ -702,6 +664,52 @@ public class KeyguardHostView extends KeyguardViewBase { } } + private void addDefaultWidgets() { + LayoutInflater inflater = LayoutInflater.from(mContext); + inflater.inflate(R.layout.keyguard_status_view, mAppWidgetContainer, true); + inflater.inflate(R.layout.keyguard_transport_control_view, mAppWidgetContainer, true); + + mTransportControl = + (KeyguardTransportControlView) findViewById(R.id.keyguard_transport_control); + + + // This code manages showing/hiding the transport control. We keep it around and only + // add it to the hierarchy if it needs to be present. + if (mTransportControl != null) { + mTransportControl.setKeyguardCallback(new TransportCallback() { + boolean mSticky = false; + @Override + public void hide() { + int page = getWidgetPosition(R.id.keyguard_transport_control); + if (page != -1 && !mSticky) { + if (page == mAppWidgetContainer.getCurrentPage()) { + // Switch back to clock view if music was showing. + mAppWidgetContainer + .setCurrentPage(getWidgetPosition(R.id.keyguard_status_view)); + } + mAppWidgetContainer.removeView(mTransportControl); + // XXX keep view attached to hierarchy so we still get show/hide events + // from AudioManager + KeyguardHostView.this.addView(mTransportControl); + mTransportControl.setVisibility(View.GONE); + } + } + + @Override + public void show() { + if (getWidgetPosition(R.id.keyguard_transport_control) == -1) { + KeyguardHostView.this.removeView(mTransportControl); + mAppWidgetContainer.addView(mTransportControl, + getWidgetPosition(R.id.keyguard_status_view) + 1); + mTransportControl.setVisibility(View.VISIBLE); + // Once shown, leave it showing + mSticky = true; + } + } + }); + } + } + private void maybePopulateWidgets() { DevicePolicyManager dpm = (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE); -- 2.11.0