2424import android .appwidget .AppWidgetHostView ;
2525import android .content .Context ;
2626import android .content .res .Resources ;
27+ import android .os .Handler ;
28+ import android .os .HandlerThread ;
2729import android .util .AttributeSet ;
2830import android .view .Gravity ;
2931import android .view .MotionEvent ;
3335import android .widget .FrameLayout ;
3436
3537import com .android .internal .R ;
36-
3738import com .android .internal .widget .LockPatternUtils ;
3839
3940import java .util .ArrayList ;
@@ -67,6 +68,10 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit
6768
6869 private boolean mCameraWidgetEnabled ;
6970
71+ // Background threads to deal with persistence
72+ private HandlerThread mBgPersistenceWorkerThread ;
73+ private Handler mBgPersistenceWorkerHandler ;
74+
7075 public KeyguardWidgetPager (Context context , AttributeSet attrs ) {
7176 this (context , attrs , 0 );
7277 }
@@ -85,6 +90,9 @@ public KeyguardWidgetPager(Context context, AttributeSet attrs, int defStyle) {
8590
8691 Resources r = getResources ();
8792 mCameraWidgetEnabled = r .getBoolean (R .bool .kg_enable_camera_default_widget );
93+ mBgPersistenceWorkerThread = new HandlerThread ("KeyguardWidgetPager Persistence" );
94+ mBgPersistenceWorkerThread .start ();
95+ mBgPersistenceWorkerHandler = new Handler (mBgPersistenceWorkerThread .getLooper ());
8896 }
8997
9098 public void setViewStateManager (KeyguardViewStateManager viewStateManager ) {
@@ -179,17 +187,28 @@ public void addWidget(View widget) {
179187
180188
181189 public void onRemoveView (View v ) {
182- int appWidgetId = ((KeyguardWidgetFrame ) v ).getContentAppWidgetId ();
183- mLockPatternUtils .removeAppWidget (appWidgetId );
190+ final int appWidgetId = ((KeyguardWidgetFrame ) v ).getContentAppWidgetId ();
191+ mBgPersistenceWorkerHandler .post (new Runnable () {
192+ @ Override
193+ public void run () {
194+ mLockPatternUtils .removeAppWidget (appWidgetId );
195+ }
196+ });
184197 }
185198
186- public void onAddView (View v , int index ) {
187- int appWidgetId = ((KeyguardWidgetFrame ) v ).getContentAppWidgetId ();
188- getVisiblePages (mTempVisiblePagesRange );
189- boundByReorderablePages (true , mTempVisiblePagesRange );
199+ public void onAddView (View v , final int index ) {
200+ final int appWidgetId = ((KeyguardWidgetFrame ) v ).getContentAppWidgetId ();
201+ final int [] pagesRange = new int [mTempVisiblePagesRange .length ];
202+ getVisiblePages (pagesRange );
203+ boundByReorderablePages (true , pagesRange );
190204 // Subtract from the index to take into account pages before the reorderable
191205 // pages (e.g. the "add widget" page)
192- mLockPatternUtils .addAppWidget (appWidgetId , index - mTempVisiblePagesRange [0 ]);
206+ mBgPersistenceWorkerHandler .post (new Runnable () {
207+ @ Override
208+ public void run () {
209+ mLockPatternUtils .addAppWidget (appWidgetId , index - pagesRange [0 ]);
210+ }
211+ });
193212 }
194213
195214 /*
0 commit comments