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

View File

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

View File

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

View File

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

View File

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