resolved conflicts for merge of 578e73da to honeycomb-plus-aosp

Change-Id: I334ae5382220a84881521885b6e3c3991fd8bbb0
This commit is contained in:
Jim Miller
2011-01-16 16:55:28 -08:00
6 changed files with 86 additions and 51 deletions

View File

@@ -34,6 +34,7 @@ import android.view.View;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
import android.widget.TextView; import android.widget.TextView;
import java.lang.ref.WeakReference;
import java.text.DateFormatSymbols; import java.text.DateFormatSymbols;
import java.util.Calendar; import java.util.Calendar;
@@ -54,26 +55,41 @@ public class DigitalClock extends RelativeLayout {
private TextView mTimeDisplayForeground; private TextView mTimeDisplayForeground;
private AmPm mAmPm; private AmPm mAmPm;
private ContentObserver mFormatChangeObserver; private ContentObserver mFormatChangeObserver;
private boolean mLive = true; private int mAttached = 0; // for debugging - tells us whether attach/detach is unbalanced
private boolean mAttached;
/* called by system on minute ticks */ /* called by system on minute ticks */
private final Handler mHandler = new Handler(); private final Handler mHandler = new Handler();
private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { private BroadcastReceiver mIntentReceiver;
@Override
public void onReceive(Context context, Intent intent) { private static class TimeChangedReceiver extends BroadcastReceiver {
if (mLive && intent.getAction().equals( private WeakReference<DigitalClock> mClock;
Intent.ACTION_TIMEZONE_CHANGED)) { private Context mContext;
mCalendar = Calendar.getInstance();
} public TimeChangedReceiver(DigitalClock clock) {
// Post a runnable to avoid blocking the broadcast. mClock = new WeakReference<DigitalClock>(clock);
mHandler.post(new Runnable() { mContext = clock.getContext();
public void run() { }
updateTime();
@Override
public void onReceive(Context context, Intent intent) {
// Post a runnable to avoid blocking the broadcast.
final boolean timezoneChanged =
intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED);
final DigitalClock clock = mClock.get();
if (clock != null) {
clock.mHandler.post(new Runnable() {
public void run() {
if (timezoneChanged) {
clock.mCalendar = Calendar.getInstance();
} }
clock.updateTime();
}
}); });
} else {
mContext.unregisterReceiver(this);
} }
}; }
};
static class AmPm { static class AmPm {
private TextView mAmPm; private TextView mAmPm;
@@ -99,14 +115,23 @@ public class DigitalClock extends RelativeLayout {
} }
} }
private class FormatChangeObserver extends ContentObserver { private static class FormatChangeObserver extends ContentObserver {
public FormatChangeObserver() { private WeakReference<DigitalClock> mClock;
private Context mContext;
public FormatChangeObserver(DigitalClock clock) {
super(new Handler()); super(new Handler());
mClock = new WeakReference<DigitalClock>(clock);
mContext = clock.getContext();
} }
@Override @Override
public void onChange(boolean selfChange) { public void onChange(boolean selfChange) {
setDateFormat(); DigitalClock digitalClock = mClock.get();
updateTime(); if (digitalClock != null) {
digitalClock.setDateFormat();
digitalClock.updateTime();
} else {
mContext.getContentResolver().unregisterContentObserver(this);
}
} }
} }
@@ -139,11 +164,11 @@ public class DigitalClock extends RelativeLayout {
protected void onAttachedToWindow() { protected void onAttachedToWindow() {
super.onAttachedToWindow(); super.onAttachedToWindow();
if (mAttached) return; mAttached++;
mAttached = true;
if (mLive) { /* monitor time ticks, time changed, timezone */
/* monitor time ticks, time changed, timezone */ if (mIntentReceiver == null) {
mIntentReceiver = new TimeChangedReceiver(this);
IntentFilter filter = new IntentFilter(); IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_TIME_TICK); filter.addAction(Intent.ACTION_TIME_TICK);
filter.addAction(Intent.ACTION_TIME_CHANGED); filter.addAction(Intent.ACTION_TIME_CHANGED);
@@ -152,9 +177,11 @@ public class DigitalClock extends RelativeLayout {
} }
/* monitor 12/24-hour display preference */ /* monitor 12/24-hour display preference */
mFormatChangeObserver = new FormatChangeObserver(); if (mFormatChangeObserver == null) {
mContext.getContentResolver().registerContentObserver( mFormatChangeObserver = new FormatChangeObserver(this);
Settings.System.CONTENT_URI, true, mFormatChangeObserver); mContext.getContentResolver().registerContentObserver(
Settings.System.CONTENT_URI, true, mFormatChangeObserver);
}
updateTime(); updateTime();
} }
@@ -163,16 +190,19 @@ public class DigitalClock extends RelativeLayout {
protected void onDetachedFromWindow() { protected void onDetachedFromWindow() {
super.onDetachedFromWindow(); super.onDetachedFromWindow();
if (!mAttached) return; mAttached--;
mAttached = false;
if (mLive) { if (mIntentReceiver != null) {
mContext.unregisterReceiver(mIntentReceiver); mContext.unregisterReceiver(mIntentReceiver);
} }
mContext.getContentResolver().unregisterContentObserver( if (mFormatChangeObserver != null) {
mFormatChangeObserver); mContext.getContentResolver().unregisterContentObserver(
} mFormatChangeObserver);
}
mFormatChangeObserver = null;
mIntentReceiver = null;
}
void updateTime(Calendar c) { void updateTime(Calendar c) {
mCalendar = c; mCalendar = c;
@@ -180,9 +210,7 @@ public class DigitalClock extends RelativeLayout {
} }
private void updateTime() { private void updateTime() {
if (mLive) { mCalendar.setTimeInMillis(System.currentTimeMillis());
mCalendar.setTimeInMillis(System.currentTimeMillis());
}
CharSequence newTime = DateFormat.format(mFormat, mCalendar); CharSequence newTime = DateFormat.format(mFormat, mCalendar);
mTimeDisplayBackground.setText(newTime); mTimeDisplayBackground.setText(newTime);
@@ -195,8 +223,4 @@ public class DigitalClock extends RelativeLayout {
? M24 : M12; ? M24 : M12;
mAmPm.setShowAmPm(mFormat.equals(M12)); mAmPm.setShowAmPm(mFormat.equals(M12));
} }
void setLive(boolean live) {
mLive = live;
}
} }

View File

@@ -62,8 +62,8 @@ public class AccountUnlockScreen extends RelativeLayout implements KeyguardScree
*/ */
private static final int AWAKE_POKE_MILLIS = 30000; private static final int AWAKE_POKE_MILLIS = 30000;
private final KeyguardScreenCallback mCallback; private KeyguardScreenCallback mCallback;
private final LockPatternUtils mLockPatternUtils; private LockPatternUtils mLockPatternUtils;
private KeyguardUpdateMonitor mUpdateMonitor; private KeyguardUpdateMonitor mUpdateMonitor;
private TextView mTopHeader; private TextView mTopHeader;
@@ -159,7 +159,10 @@ public class AccountUnlockScreen extends RelativeLayout implements KeyguardScree
if (mCheckingDialog != null) { if (mCheckingDialog != null) {
mCheckingDialog.hide(); mCheckingDialog.hide();
} }
mUpdateMonitor.removeCallback(this); mUpdateMonitor.removeCallback(this); // this must be first
mCallback = null;
mLockPatternUtils = null;
mUpdateMonitor = null;
} }
/** {@inheritDoc} */ /** {@inheritDoc} */

View File

@@ -231,8 +231,8 @@ public class KeyguardViewManager implements KeyguardWindowController {
mKeyguardHost.postDelayed(new Runnable() { mKeyguardHost.postDelayed(new Runnable() {
public void run() { public void run() {
synchronized (KeyguardViewManager.this) { synchronized (KeyguardViewManager.this) {
mKeyguardHost.removeView(lastView);
lastView.cleanUp(); lastView.cleanUp();
mKeyguardHost.removeView(lastView);
} }
} }
}, 500); }, 500);

View File

@@ -495,8 +495,10 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
public void cleanUp() { public void cleanUp() {
((KeyguardScreen) mLockScreen).onPause(); ((KeyguardScreen) mLockScreen).onPause();
((KeyguardScreen) mLockScreen).cleanUp(); ((KeyguardScreen) mLockScreen).cleanUp();
this.removeView(mLockScreen);
((KeyguardScreen) mUnlockScreen).onPause(); ((KeyguardScreen) mUnlockScreen).onPause();
((KeyguardScreen) mUnlockScreen).cleanUp(); ((KeyguardScreen) mUnlockScreen).cleanUp();
this.removeView(mUnlockScreen);
} }
private boolean isSecure() { private boolean isSecure() {

View File

@@ -59,9 +59,9 @@ class LockScreen extends LinearLayout implements KeyguardScreen,
private Status mStatus = Status.Normal; private Status mStatus = Status.Normal;
private final LockPatternUtils mLockPatternUtils; private LockPatternUtils mLockPatternUtils;
private final KeyguardUpdateMonitor mUpdateMonitor; private KeyguardUpdateMonitor mUpdateMonitor;
private final KeyguardScreenCallback mCallback; private KeyguardScreenCallback mCallback;
private SlidingTab mSlidingTab; private SlidingTab mSlidingTab;
private TextView mScreenLocked; private TextView mScreenLocked;
@@ -311,8 +311,8 @@ class LockScreen extends LinearLayout implements KeyguardScreen,
setFocusableInTouchMode(true); setFocusableInTouchMode(true);
setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
updateMonitor.registerInfoCallback(this); mUpdateMonitor.registerInfoCallback(this);
updateMonitor.registerSimStateCallback(this); mUpdateMonitor.registerSimStateCallback(this);
mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
mSilentMode = isSilentMode(); mSilentMode = isSilentMode();
@@ -656,7 +656,10 @@ class LockScreen extends LinearLayout implements KeyguardScreen,
/** {@inheritDoc} */ /** {@inheritDoc} */
public void cleanUp() { public void cleanUp() {
mUpdateMonitor.removeCallback(this); mUpdateMonitor.removeCallback(this); // this must be first
mLockPatternUtils = null;
mUpdateMonitor = null;
mCallback = null;
} }
/** {@inheritDoc} */ /** {@inheritDoc} */

View File

@@ -62,9 +62,9 @@ class PatternUnlockScreen extends LinearLayoutWithDefaultTouchRecepient
private int mTotalFailedPatternAttempts = 0; private int mTotalFailedPatternAttempts = 0;
private CountDownTimer mCountdownTimer = null; private CountDownTimer mCountdownTimer = null;
private final LockPatternUtils mLockPatternUtils; private LockPatternUtils mLockPatternUtils;
private final KeyguardUpdateMonitor mUpdateMonitor; private KeyguardUpdateMonitor mUpdateMonitor;
private final KeyguardScreenCallback mCallback; private KeyguardScreenCallback mCallback;
/** /**
* whether there is a fallback option available when the pattern is forgotten. * whether there is a fallback option available when the pattern is forgotten.
@@ -359,6 +359,9 @@ class PatternUnlockScreen extends LinearLayoutWithDefaultTouchRecepient
/** {@inheritDoc} */ /** {@inheritDoc} */
public void cleanUp() { public void cleanUp() {
mUpdateMonitor.removeCallback(this); mUpdateMonitor.removeCallback(this);
mLockPatternUtils = null;
mUpdateMonitor = null;
mCallback = null;
} }
@Override @Override