Loading core/java/com/android/internal/widget/LockPatternUtils.java +1 −5 Original line number Diff line number Diff line Loading @@ -1073,12 +1073,8 @@ public class LockPatternUtils { } return appWidgetIds; } if (appWidgetIdString == null) { return new int[] { LockPatternUtils.ID_DEFAULT_STATUS_WIDGET }; } else { return new int[0]; } } private static String combineStrings(int[] list, String separator) { int listLength = list.length; Loading core/res/res/values/config.xml +6 −0 Original line number Diff line number Diff line Loading @@ -404,6 +404,12 @@ --> <integer name="config_longPressOnPowerBehavior">1</integer> <!-- Package name for default keyguard appwidget [DO NOT TRANSLATE] --> <string name="widget_default_package_name"></string> <!-- Class name for default keyguard appwidget [DO NOT TRANSLATE] --> <string name="widget_default_class_name"></string> <!-- Indicate whether the SD card is accessible without removing the battery. --> <bool name="config_batterySdCardAccessibility">false</bool> Loading core/res/res/values/strings.xml +0 −9 Original line number Diff line number Diff line Loading @@ -2065,15 +2065,6 @@ <!-- This can be used in any application wanting to disable the text "Emergency number" --> <string name="emergency_call_dialog_number_for_display">Emergency number</string> <!-- String to display if the clock status widget is selected (it is the default) [CHAR LIMIT=22] --> <string name="widget_default" msgid="8269383575996003796">Clock</string> <!-- Package name for default widget [DO NOT TRANSLATE] --> <string name="widget_default_package_name">com.android.deskclock</string> <!-- Class name for default widget [DO NOT TRANSLATE] --> <string name="widget_default_class_name">com.android.deskclock.DeskClock</string> <!-- *** touch based lock / unlock *** --> <skip /> Loading core/res/res/values/symbols.xml +0 −1 Original line number Diff line number Diff line Loading @@ -479,7 +479,6 @@ <java-symbol type="string" name="emailTypeOther" /> <java-symbol type="string" name="emailTypeWork" /> <java-symbol type="string" name="emergency_call_dialog_number_for_display" /> <java-symbol type="string" name="widget_default" /> <java-symbol type="string" name="widget_default_package_name" /> <java-symbol type="string" name="widget_default_class_name" /> <java-symbol type="string" name="emergency_calls_only" /> Loading policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java +77 −58 Original line number Diff line number Diff line Loading @@ -29,8 +29,6 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentSender; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.content.res.Resources; import android.graphics.Canvas; Loading @@ -50,7 +48,6 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.AnimationUtils; import android.widget.RemoteViews.OnClickHandler; Loading @@ -59,7 +56,6 @@ import com.android.internal.policy.impl.keyguard.KeyguardSecurityModel.SecurityM import com.android.internal.widget.LockPatternUtils; import java.io.File; import java.util.ArrayList; import java.util.List; public class KeyguardHostView extends KeyguardViewBase { Loading @@ -68,10 +64,10 @@ public class KeyguardHostView extends KeyguardViewBase { // Use this to debug all of keyguard public static boolean DEBUG = KeyguardViewMediator.DEBUG; // also referenced in SecuritySettings.java static final int APPWIDGET_HOST_ID = 0x4B455947; private AppWidgetHost mAppWidgetHost; private AppWidgetManager mAppWidgetManager; private KeyguardWidgetPager mAppWidgetContainer; private KeyguardSecurityViewFlipper mSecurityViewContainer; private KeyguardSelectorView mKeyguardSelectorView; Loading Loading @@ -113,6 +109,7 @@ public class KeyguardHostView extends KeyguardViewBase { mLockPatternUtils = new LockPatternUtils(context); mAppWidgetHost = new AppWidgetHost( context, APPWIDGET_HOST_ID, mOnClickHandler, Looper.myLooper()); mAppWidgetManager = AppWidgetManager.getInstance(mContext); mSecurityModel = new KeyguardSecurityModel(context); // The following enables the MENU key to work for testing automation Loading Loading @@ -158,10 +155,6 @@ public class KeyguardHostView extends KeyguardViewBase { mAppWidgetContainer.setCallbacks(mWidgetCallbacks); mAppWidgetContainer.setMinScale(0.5f); addDefaultWidgets(); addWidgetsFromSettings(); mSwitchPageRunnable.run(); SlidingChallengeLayout slider = (SlidingChallengeLayout) findViewById(R.id.sliding_layout); if (slider != null) { Loading @@ -183,8 +176,11 @@ public class KeyguardHostView extends KeyguardViewBase { setSystemUiVisibility(getSystemUiVisibility() | View.STATUS_BAR_DISABLE_BACK); } showPrimarySecurityScreen(false); addDefaultWidgets(); addWidgetsFromSettings(); mSwitchPageRunnable.run(); showPrimarySecurityScreen(false); updateSecurityViews(); } Loading Loading @@ -549,8 +545,6 @@ public class KeyguardHostView extends KeyguardViewBase { }; }; private KeyguardStatusViewManager mKeyguardStatusViewManager; // Used to ignore callbacks from methods that are no longer current (e.g. face unlock). // This avoids unwanted asynchronous events from messing with the state. private KeyguardSecurityCallback mNullCallback = new KeyguardSecurityCallback() { Loading Loading @@ -715,6 +709,7 @@ public class KeyguardHostView extends KeyguardViewBase { // biometric unlock to start next time keyguard is shown. KeyguardUpdateMonitor.getInstance(mContext).setAlternateUnlockEnabled(true); saveStickyWidgetIndex(); checkAppWidgetConsistency(); showPrimarySecurityScreen(true); getSecurityView(mCurrentSecuritySelection).onPause(); CameraWidgetFrame cameraPage = findCameraPage(); Loading Loading @@ -812,15 +807,16 @@ public class KeyguardHostView extends KeyguardViewBase { } } private void addWidget(int appId, int pageIndex) { AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(mContext); AppWidgetProviderInfo appWidgetInfo = appWidgetManager.getAppWidgetInfo(appId); private boolean addWidget(int appId, int pageIndex) { AppWidgetProviderInfo appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(appId); if (appWidgetInfo != null) { AppWidgetHostView view = getAppWidgetHost().createView(mContext, appId, appWidgetInfo); addWidget(view, pageIndex); return true; } else { Log.w(TAG, "AppWidgetInfo for app widget id " + appId + " was null, deleting"); mLockPatternUtils.removeAppWidget(appId); return false; } } Loading Loading @@ -890,22 +886,7 @@ public class KeyguardHostView extends KeyguardViewBase { @Override public void run() { int defaultIconId = 0; Resources res = KeyguardHostView.this.getContext().getResources(); ComponentName clock = new ComponentName( res.getString(R.string.widget_default_package_name), res.getString(R.string.widget_default_class_name)); try { ActivityInfo activityInfo = mContext.getPackageManager().getActivityInfo(clock, 0); if (activityInfo != null) { defaultIconId = activityInfo.icon; } } catch (PackageManager.NameNotFoundException e) { defaultIconId = 0; } launchPickActivityIntent(R.string.widget_default, defaultIconId, clock, LockPatternUtils.EXTRA_DEFAULT_WIDGET); launchPickActivityIntent(); } }); mCallback.dismiss(false); Loading @@ -916,8 +897,7 @@ public class KeyguardHostView extends KeyguardViewBase { initializeTransportControl(); } private void launchPickActivityIntent(int defaultLabelId, int defaultIconId, ComponentName defaultComponentName, String defaultTag) { private void launchPickActivityIntent() { // Create intent to pick widget Intent pickIntent = new Intent(AppWidgetManager.ACTION_KEYGUARD_APPWIDGET_PICK); Loading @@ -928,22 +908,6 @@ public class KeyguardHostView extends KeyguardViewBase { pickIntent.putExtra(AppWidgetManager.EXTRA_CATEGORY_FILTER, AppWidgetProviderInfo.WIDGET_CATEGORY_KEYGUARD); // Add an custom entry for the default AppWidgetProviderInfo defaultInfo = new AppWidgetProviderInfo(); ArrayList<AppWidgetProviderInfo> extraInfos = new ArrayList<AppWidgetProviderInfo>(); defaultInfo.label = getResources().getString(defaultLabelId); defaultInfo.icon = defaultIconId; defaultInfo.provider = defaultComponentName; extraInfos.add(defaultInfo); ArrayList<Bundle> extraExtras = new ArrayList<Bundle>(); Bundle b = new Bundle(); b.putBoolean(defaultTag, true); extraExtras.add(b); // Launch the widget picker pickIntent.putExtra(AppWidgetManager.EXTRA_CUSTOM_INFO, extraInfos); pickIntent.putExtra(AppWidgetManager.EXTRA_CUSTOM_EXTRAS, extraExtras); pickIntent.putExtra(Intent.EXTRA_INTENT, getBaseIntent()); pickIntent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK Loading Loading @@ -1024,6 +988,22 @@ public class KeyguardHostView extends KeyguardViewBase { } } private int getAddPageIndex() { View addWidget = mAppWidgetContainer.findViewById(R.id.keyguard_add_widget); int addPageIndex = mAppWidgetContainer.indexOfChild(addWidget); // This shouldn't happen, but just to be safe! if (addPageIndex < 0) { addPageIndex = 0; } return addPageIndex; } private void addDefaultStatusWidget(int index) { LayoutInflater inflater = LayoutInflater.from(mContext); View statusWidget = inflater.inflate(R.layout.keyguard_status_view, null, true); mAppWidgetContainer.addWidget(statusWidget, index); } private void addWidgetsFromSettings() { DevicePolicyManager dpm = (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE); Loading @@ -1036,23 +1016,17 @@ public class KeyguardHostView extends KeyguardViewBase { } } View addWidget = mAppWidgetContainer.findViewById(R.id.keyguard_add_widget); int addPageIndex = mAppWidgetContainer.indexOfChild(addWidget); // This shouldn't happen, but just to be safe! if (addPageIndex < 0) { addPageIndex = 0; } int addPageIndex = getAddPageIndex(); // Add user-selected widget final int[] widgets = mLockPatternUtils.getAppWidgets(); if (widgets == null) { Log.d(TAG, "Problem reading widgets"); } else { for (int i = widgets.length -1; i >= 0; i--) { if (widgets[i] == LockPatternUtils.ID_DEFAULT_STATUS_WIDGET) { LayoutInflater inflater = LayoutInflater.from(mContext); View statusWidget = inflater.inflate(R.layout.keyguard_status_view, null, true); mAppWidgetContainer.addWidget(statusWidget, addPageIndex + 1); addDefaultStatusWidget(addPageIndex + 1); } else { // We add the widgets from left to right, starting after the first page after // the add page. We count down, since the order will be persisted from right Loading @@ -1061,6 +1035,42 @@ public class KeyguardHostView extends KeyguardViewBase { } } } checkAppWidgetConsistency(); } public void checkAppWidgetConsistency() { final int childCount = mAppWidgetContainer.getChildCount(); boolean widgetPageExists = false; for (int i = 0; i < childCount; i++) { if (isWidgetPage(i)) { widgetPageExists = true; break; } } if (!widgetPageExists) { final int addPageIndex = getAddPageIndex(); Resources res = getContext().getResources(); ComponentName defaultAppWidget = new ComponentName( res.getString(R.string.widget_default_package_name), res.getString(R.string.widget_default_class_name)); // Note: we don't support configuring the widget int appWidgetId = mAppWidgetHost.allocateAppWidgetId(); boolean bindSuccessful = false; try { mAppWidgetManager.bindAppWidgetId(appWidgetId, defaultAppWidget); bindSuccessful = true; } catch (IllegalArgumentException e) { Log.e(TAG, "Error when trying to bind default AppWidget: " + e); } // Use the built-in status/clock view if we can't inflate the default widget if (!(bindSuccessful && addWidget(appWidgetId, addPageIndex + 1))) { addDefaultStatusWidget(addPageIndex + 1); } mAppWidgetContainer.onAddView( mAppWidgetContainer.getChildAt(addPageIndex + 1), addPageIndex + 1); } } Runnable mSwitchPageRunnable = new Runnable() { Loading Loading @@ -1155,6 +1165,15 @@ public class KeyguardHostView extends KeyguardViewBase { return null; } private boolean isWidgetPage(int pageIndex) { View v = mAppWidgetContainer.getChildAt(pageIndex); if (v != null && v instanceof KeyguardWidgetFrame) { KeyguardWidgetFrame kwf = (KeyguardWidgetFrame) v; return kwf.getContentAppWidgetId() != AppWidgetManager.INVALID_APPWIDGET_ID; } return false; } private boolean isCameraPage(int pageIndex) { View v = mAppWidgetContainer.getChildAt(pageIndex); return v != null && v instanceof CameraWidgetFrame; Loading Loading
core/java/com/android/internal/widget/LockPatternUtils.java +1 −5 Original line number Diff line number Diff line Loading @@ -1073,12 +1073,8 @@ public class LockPatternUtils { } return appWidgetIds; } if (appWidgetIdString == null) { return new int[] { LockPatternUtils.ID_DEFAULT_STATUS_WIDGET }; } else { return new int[0]; } } private static String combineStrings(int[] list, String separator) { int listLength = list.length; Loading
core/res/res/values/config.xml +6 −0 Original line number Diff line number Diff line Loading @@ -404,6 +404,12 @@ --> <integer name="config_longPressOnPowerBehavior">1</integer> <!-- Package name for default keyguard appwidget [DO NOT TRANSLATE] --> <string name="widget_default_package_name"></string> <!-- Class name for default keyguard appwidget [DO NOT TRANSLATE] --> <string name="widget_default_class_name"></string> <!-- Indicate whether the SD card is accessible without removing the battery. --> <bool name="config_batterySdCardAccessibility">false</bool> Loading
core/res/res/values/strings.xml +0 −9 Original line number Diff line number Diff line Loading @@ -2065,15 +2065,6 @@ <!-- This can be used in any application wanting to disable the text "Emergency number" --> <string name="emergency_call_dialog_number_for_display">Emergency number</string> <!-- String to display if the clock status widget is selected (it is the default) [CHAR LIMIT=22] --> <string name="widget_default" msgid="8269383575996003796">Clock</string> <!-- Package name for default widget [DO NOT TRANSLATE] --> <string name="widget_default_package_name">com.android.deskclock</string> <!-- Class name for default widget [DO NOT TRANSLATE] --> <string name="widget_default_class_name">com.android.deskclock.DeskClock</string> <!-- *** touch based lock / unlock *** --> <skip /> Loading
core/res/res/values/symbols.xml +0 −1 Original line number Diff line number Diff line Loading @@ -479,7 +479,6 @@ <java-symbol type="string" name="emailTypeOther" /> <java-symbol type="string" name="emailTypeWork" /> <java-symbol type="string" name="emergency_call_dialog_number_for_display" /> <java-symbol type="string" name="widget_default" /> <java-symbol type="string" name="widget_default_package_name" /> <java-symbol type="string" name="widget_default_class_name" /> <java-symbol type="string" name="emergency_calls_only" /> Loading
policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java +77 −58 Original line number Diff line number Diff line Loading @@ -29,8 +29,6 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentSender; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.content.res.Resources; import android.graphics.Canvas; Loading @@ -50,7 +48,6 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.AnimationUtils; import android.widget.RemoteViews.OnClickHandler; Loading @@ -59,7 +56,6 @@ import com.android.internal.policy.impl.keyguard.KeyguardSecurityModel.SecurityM import com.android.internal.widget.LockPatternUtils; import java.io.File; import java.util.ArrayList; import java.util.List; public class KeyguardHostView extends KeyguardViewBase { Loading @@ -68,10 +64,10 @@ public class KeyguardHostView extends KeyguardViewBase { // Use this to debug all of keyguard public static boolean DEBUG = KeyguardViewMediator.DEBUG; // also referenced in SecuritySettings.java static final int APPWIDGET_HOST_ID = 0x4B455947; private AppWidgetHost mAppWidgetHost; private AppWidgetManager mAppWidgetManager; private KeyguardWidgetPager mAppWidgetContainer; private KeyguardSecurityViewFlipper mSecurityViewContainer; private KeyguardSelectorView mKeyguardSelectorView; Loading Loading @@ -113,6 +109,7 @@ public class KeyguardHostView extends KeyguardViewBase { mLockPatternUtils = new LockPatternUtils(context); mAppWidgetHost = new AppWidgetHost( context, APPWIDGET_HOST_ID, mOnClickHandler, Looper.myLooper()); mAppWidgetManager = AppWidgetManager.getInstance(mContext); mSecurityModel = new KeyguardSecurityModel(context); // The following enables the MENU key to work for testing automation Loading Loading @@ -158,10 +155,6 @@ public class KeyguardHostView extends KeyguardViewBase { mAppWidgetContainer.setCallbacks(mWidgetCallbacks); mAppWidgetContainer.setMinScale(0.5f); addDefaultWidgets(); addWidgetsFromSettings(); mSwitchPageRunnable.run(); SlidingChallengeLayout slider = (SlidingChallengeLayout) findViewById(R.id.sliding_layout); if (slider != null) { Loading @@ -183,8 +176,11 @@ public class KeyguardHostView extends KeyguardViewBase { setSystemUiVisibility(getSystemUiVisibility() | View.STATUS_BAR_DISABLE_BACK); } showPrimarySecurityScreen(false); addDefaultWidgets(); addWidgetsFromSettings(); mSwitchPageRunnable.run(); showPrimarySecurityScreen(false); updateSecurityViews(); } Loading Loading @@ -549,8 +545,6 @@ public class KeyguardHostView extends KeyguardViewBase { }; }; private KeyguardStatusViewManager mKeyguardStatusViewManager; // Used to ignore callbacks from methods that are no longer current (e.g. face unlock). // This avoids unwanted asynchronous events from messing with the state. private KeyguardSecurityCallback mNullCallback = new KeyguardSecurityCallback() { Loading Loading @@ -715,6 +709,7 @@ public class KeyguardHostView extends KeyguardViewBase { // biometric unlock to start next time keyguard is shown. KeyguardUpdateMonitor.getInstance(mContext).setAlternateUnlockEnabled(true); saveStickyWidgetIndex(); checkAppWidgetConsistency(); showPrimarySecurityScreen(true); getSecurityView(mCurrentSecuritySelection).onPause(); CameraWidgetFrame cameraPage = findCameraPage(); Loading Loading @@ -812,15 +807,16 @@ public class KeyguardHostView extends KeyguardViewBase { } } private void addWidget(int appId, int pageIndex) { AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(mContext); AppWidgetProviderInfo appWidgetInfo = appWidgetManager.getAppWidgetInfo(appId); private boolean addWidget(int appId, int pageIndex) { AppWidgetProviderInfo appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(appId); if (appWidgetInfo != null) { AppWidgetHostView view = getAppWidgetHost().createView(mContext, appId, appWidgetInfo); addWidget(view, pageIndex); return true; } else { Log.w(TAG, "AppWidgetInfo for app widget id " + appId + " was null, deleting"); mLockPatternUtils.removeAppWidget(appId); return false; } } Loading Loading @@ -890,22 +886,7 @@ public class KeyguardHostView extends KeyguardViewBase { @Override public void run() { int defaultIconId = 0; Resources res = KeyguardHostView.this.getContext().getResources(); ComponentName clock = new ComponentName( res.getString(R.string.widget_default_package_name), res.getString(R.string.widget_default_class_name)); try { ActivityInfo activityInfo = mContext.getPackageManager().getActivityInfo(clock, 0); if (activityInfo != null) { defaultIconId = activityInfo.icon; } } catch (PackageManager.NameNotFoundException e) { defaultIconId = 0; } launchPickActivityIntent(R.string.widget_default, defaultIconId, clock, LockPatternUtils.EXTRA_DEFAULT_WIDGET); launchPickActivityIntent(); } }); mCallback.dismiss(false); Loading @@ -916,8 +897,7 @@ public class KeyguardHostView extends KeyguardViewBase { initializeTransportControl(); } private void launchPickActivityIntent(int defaultLabelId, int defaultIconId, ComponentName defaultComponentName, String defaultTag) { private void launchPickActivityIntent() { // Create intent to pick widget Intent pickIntent = new Intent(AppWidgetManager.ACTION_KEYGUARD_APPWIDGET_PICK); Loading @@ -928,22 +908,6 @@ public class KeyguardHostView extends KeyguardViewBase { pickIntent.putExtra(AppWidgetManager.EXTRA_CATEGORY_FILTER, AppWidgetProviderInfo.WIDGET_CATEGORY_KEYGUARD); // Add an custom entry for the default AppWidgetProviderInfo defaultInfo = new AppWidgetProviderInfo(); ArrayList<AppWidgetProviderInfo> extraInfos = new ArrayList<AppWidgetProviderInfo>(); defaultInfo.label = getResources().getString(defaultLabelId); defaultInfo.icon = defaultIconId; defaultInfo.provider = defaultComponentName; extraInfos.add(defaultInfo); ArrayList<Bundle> extraExtras = new ArrayList<Bundle>(); Bundle b = new Bundle(); b.putBoolean(defaultTag, true); extraExtras.add(b); // Launch the widget picker pickIntent.putExtra(AppWidgetManager.EXTRA_CUSTOM_INFO, extraInfos); pickIntent.putExtra(AppWidgetManager.EXTRA_CUSTOM_EXTRAS, extraExtras); pickIntent.putExtra(Intent.EXTRA_INTENT, getBaseIntent()); pickIntent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK Loading Loading @@ -1024,6 +988,22 @@ public class KeyguardHostView extends KeyguardViewBase { } } private int getAddPageIndex() { View addWidget = mAppWidgetContainer.findViewById(R.id.keyguard_add_widget); int addPageIndex = mAppWidgetContainer.indexOfChild(addWidget); // This shouldn't happen, but just to be safe! if (addPageIndex < 0) { addPageIndex = 0; } return addPageIndex; } private void addDefaultStatusWidget(int index) { LayoutInflater inflater = LayoutInflater.from(mContext); View statusWidget = inflater.inflate(R.layout.keyguard_status_view, null, true); mAppWidgetContainer.addWidget(statusWidget, index); } private void addWidgetsFromSettings() { DevicePolicyManager dpm = (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE); Loading @@ -1036,23 +1016,17 @@ public class KeyguardHostView extends KeyguardViewBase { } } View addWidget = mAppWidgetContainer.findViewById(R.id.keyguard_add_widget); int addPageIndex = mAppWidgetContainer.indexOfChild(addWidget); // This shouldn't happen, but just to be safe! if (addPageIndex < 0) { addPageIndex = 0; } int addPageIndex = getAddPageIndex(); // Add user-selected widget final int[] widgets = mLockPatternUtils.getAppWidgets(); if (widgets == null) { Log.d(TAG, "Problem reading widgets"); } else { for (int i = widgets.length -1; i >= 0; i--) { if (widgets[i] == LockPatternUtils.ID_DEFAULT_STATUS_WIDGET) { LayoutInflater inflater = LayoutInflater.from(mContext); View statusWidget = inflater.inflate(R.layout.keyguard_status_view, null, true); mAppWidgetContainer.addWidget(statusWidget, addPageIndex + 1); addDefaultStatusWidget(addPageIndex + 1); } else { // We add the widgets from left to right, starting after the first page after // the add page. We count down, since the order will be persisted from right Loading @@ -1061,6 +1035,42 @@ public class KeyguardHostView extends KeyguardViewBase { } } } checkAppWidgetConsistency(); } public void checkAppWidgetConsistency() { final int childCount = mAppWidgetContainer.getChildCount(); boolean widgetPageExists = false; for (int i = 0; i < childCount; i++) { if (isWidgetPage(i)) { widgetPageExists = true; break; } } if (!widgetPageExists) { final int addPageIndex = getAddPageIndex(); Resources res = getContext().getResources(); ComponentName defaultAppWidget = new ComponentName( res.getString(R.string.widget_default_package_name), res.getString(R.string.widget_default_class_name)); // Note: we don't support configuring the widget int appWidgetId = mAppWidgetHost.allocateAppWidgetId(); boolean bindSuccessful = false; try { mAppWidgetManager.bindAppWidgetId(appWidgetId, defaultAppWidget); bindSuccessful = true; } catch (IllegalArgumentException e) { Log.e(TAG, "Error when trying to bind default AppWidget: " + e); } // Use the built-in status/clock view if we can't inflate the default widget if (!(bindSuccessful && addWidget(appWidgetId, addPageIndex + 1))) { addDefaultStatusWidget(addPageIndex + 1); } mAppWidgetContainer.onAddView( mAppWidgetContainer.getChildAt(addPageIndex + 1), addPageIndex + 1); } } Runnable mSwitchPageRunnable = new Runnable() { Loading Loading @@ -1155,6 +1165,15 @@ public class KeyguardHostView extends KeyguardViewBase { return null; } private boolean isWidgetPage(int pageIndex) { View v = mAppWidgetContainer.getChildAt(pageIndex); if (v != null && v instanceof KeyguardWidgetFrame) { KeyguardWidgetFrame kwf = (KeyguardWidgetFrame) v; return kwf.getContentAppWidgetId() != AppWidgetManager.INVALID_APPWIDGET_ID; } return false; } private boolean isCameraPage(int pageIndex) { View v = mAppWidgetContainer.getChildAt(pageIndex); return v != null && v instanceof CameraWidgetFrame; Loading