OSDN Git Service

Attempt to fix missing transport control in keyguard
authorJim Miller <jaggies@google.com>
Tue, 2 Oct 2012 03:21:02 +0000 (20:21 -0700)
committerJim Miller <jaggies@google.com>
Tue, 2 Oct 2012 21:41:34 +0000 (14:41 -0700)
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
core/res/res/values/symbols.xml
policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java

index 42bf42b..7bf06ed 100644 (file)
@@ -32,9 +32,6 @@
         android:layout_weight="1"
         android:clipChildren="false"
         android:clipToPadding="false">
-            <!-- TODO: Remove this when supported as a widget -->
-            <include layout="@layout/keyguard_status_view"/>
-            <include layout="@layout/keyguard_transport_control_view"/>
     </com.android.internal.policy.impl.keyguard.KeyguardWidgetPager>
     <LinearLayout
         android:layout_width="match_parent"
@@ -69,4 +66,4 @@
             prvandroid:leftToRight="true"
             prvandroid:glowDot="@*android:drawable/ic_lockscreen_glowdot" />
     </LinearLayout>
-</com.android.internal.policy.impl.keyguard.KeyguardWidgetRegion>
\ No newline at end of file
+</com.android.internal.policy.impl.keyguard.KeyguardWidgetRegion>
index eb2b5a6..34e00fe 100644 (file)
   <java-symbol type="layout" name="screen_title" />
   <java-symbol type="layout" name="screen_title_icons" />
   <java-symbol type="layout" name="keyguard_host_view" />
+  <java-symbol type="layout" name="keyguard_transport_control_view" />
+  <java-symbol type="layout" name="keyguard_status_view" />
   <java-symbol type="string" name="abbrev_wday_month_day_no_year" />
   <java-symbol type="string" name="android_upgrading_title" />
   <java-symbol type="string" name="bugreport_title" />
index a7fc1a1..8e7e07f 100644 (file)
@@ -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);