am bc015e84: am dbc31105: Merge "Disable keyguard text marquee when the display turns off." into klp-dev

* commit 'bc015e847f01210298d7ccdd0239518fd8e7ee19':
  Disable keyguard text marquee when the display turns off.
This commit is contained in:
Jim Miller
2013-10-07 16:11:54 -07:00
committed by Android Git Automerger
7 changed files with 141 additions and 19 deletions

View File

@@ -47,6 +47,14 @@ public class CarrierText extends TextView {
mSimState = simState; mSimState = simState;
updateCarrierText(mSimState, mPlmn, mSpn); updateCarrierText(mSimState, mPlmn, mSpn);
} }
public void onScreenTurnedOff(int why) {
setSelected(false);
};
public void onScreenTurnedOn() {
setSelected(true);
};
}; };
/** /**
* The status of this lock screen. Primarily used for widgets on LockScreen. * The status of this lock screen. Primarily used for widgets on LockScreen.
@@ -79,7 +87,8 @@ public class CarrierText extends TextView {
protected void onFinishInflate() { protected void onFinishInflate() {
super.onFinishInflate(); super.onFinishInflate();
mSeparator = getResources().getString(R.string.kg_text_message_separator); mSeparator = getResources().getString(R.string.kg_text_message_separator);
setSelected(true); // Allow marquee to work. final boolean screenOn = KeyguardUpdateMonitor.getInstance(mContext).isScreenOn();
setSelected(screenOn); // Allow marquee to work.
} }
@Override @Override

View File

@@ -163,6 +163,12 @@ class KeyguardMessageArea extends TextView {
mBatteryIsLow = status.isBatteryLow(); mBatteryIsLow = status.isBatteryLow();
update(); update();
} }
public void onScreenTurnedOff(int why) {
setSelected(false);
};
public void onScreenTurnedOn() {
setSelected(true);
};
}; };
public KeyguardMessageArea(Context context) { public KeyguardMessageArea(Context context) {
@@ -174,9 +180,6 @@ class KeyguardMessageArea extends TextView {
mLockPatternUtils = new LockPatternUtils(context); mLockPatternUtils = new LockPatternUtils(context);
// This is required to ensure marquee works
setSelected(true);
// Registering this callback immediately updates the battery state, among other things. // Registering this callback immediately updates the battery state, among other things.
mUpdateMonitor = KeyguardUpdateMonitor.getInstance(getContext()); mUpdateMonitor = KeyguardUpdateMonitor.getInstance(getContext());
mUpdateMonitor.registerCallback(mInfoCallback); mUpdateMonitor.registerCallback(mInfoCallback);
@@ -187,6 +190,12 @@ class KeyguardMessageArea extends TextView {
update(); update();
} }
@Override
protected void onFinishInflate() {
final boolean screenOn = KeyguardUpdateMonitor.getInstance(mContext).isScreenOn();
setSelected(screenOn); // This is required to ensure marquee works
}
public void securityMessageChanged() { public void securityMessageChanged() {
setAlpha(1f); setAlpha(1f);
mShowingMessage = true; mShowingMessage = true;

View File

@@ -21,6 +21,7 @@ import android.content.res.Resources;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log;
import android.util.Slog; import android.util.Slog;
import android.view.View; import android.view.View;
import android.widget.GridLayout; import android.widget.GridLayout;
@@ -42,6 +43,8 @@ public class KeyguardStatusView extends GridLayout {
private TextView mAlarmStatusView; private TextView mAlarmStatusView;
private final int MARQUEE_VIEWS[] = { R.id.alarm_status };
private KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() { private KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() {
@Override @Override
@@ -56,6 +59,14 @@ public class KeyguardStatusView extends GridLayout {
refresh(); refresh();
} }
}; };
public void onScreenTurnedOn() {
setEnableMarquee(true);
};
public void onScreenTurnedOff(int why) {
setEnableMarquee(false);
};
}; };
public KeyguardStatusView(Context context) { public KeyguardStatusView(Context context) {
@@ -70,22 +81,23 @@ public class KeyguardStatusView extends GridLayout {
super(context, attrs, defStyle); super(context, attrs, defStyle);
} }
private void setEnableMarquee(boolean enabled) {
if (DEBUG) Log.v(TAG, (enabled ? "Enable" : "Disable") + " transport text marquee");
for (int i = 0; i < MARQUEE_VIEWS.length; i++) {
View v = findViewById(MARQUEE_VIEWS[i]);
if (v != null) {
v.setSelected(enabled);
}
}
}
@Override @Override
protected void onFinishInflate() { protected void onFinishInflate() {
super.onFinishInflate(); super.onFinishInflate();
mAlarmStatusView = (TextView) findViewById(R.id.alarm_status); mAlarmStatusView = (TextView) findViewById(R.id.alarm_status);
mLockPatternUtils = new LockPatternUtils(getContext()); mLockPatternUtils = new LockPatternUtils(getContext());
final boolean screenOn = KeyguardUpdateMonitor.getInstance(mContext).isScreenOn();
// Required to get Marquee to work. setEnableMarquee(screenOn);
final View marqueeViews[] = { mAlarmStatusView };
for (int i = 0; i < marqueeViews.length; i++) {
View v = marqueeViews[i];
if (v == null) {
throw new RuntimeException("Can't find widget at index " + i);
}
v.setSelected(true);
}
refresh(); refresh();
} }

View File

@@ -84,6 +84,8 @@ public class KeyguardTransportControlView extends FrameLayout {
private AudioManager mAudioManager; private AudioManager mAudioManager;
private RemoteController mRemoteController; private RemoteController mRemoteController;
private int MARQUEE_VIEWS[] = { R.id.title, R.id.artist_album };
private ImageView mBadge; private ImageView mBadge;
private boolean mSeekEnabled; private boolean mSeekEnabled;
@@ -198,6 +200,16 @@ public class KeyguardTransportControlView extends FrameLayout {
KeyguardHostView.TransportControlCallback mTransportControlCallback; KeyguardHostView.TransportControlCallback mTransportControlCallback;
private final KeyguardUpdateMonitorCallback mUpdateMonitor
= new KeyguardUpdateMonitorCallback() {
public void onScreenTurnedOff(int why) {
setEnableMarquee(false);
};
public void onScreenTurnedOn() {
setEnableMarquee(true);
};
};
public KeyguardTransportControlView(Context context, AttributeSet attrs) { public KeyguardTransportControlView(Context context, AttributeSet attrs) {
super(context, attrs); super(context, attrs);
if (DEBUG) Log.v(TAG, "Create TCV " + this); if (DEBUG) Log.v(TAG, "Create TCV " + this);
@@ -250,6 +262,16 @@ public class KeyguardTransportControlView extends FrameLayout {
mTransportControlCallback = transportControlCallback; mTransportControlCallback = transportControlCallback;
} }
private void setEnableMarquee(boolean enabled) {
if (DEBUG) Log.v(TAG, (enabled ? "Enable" : "Disable") + " transport text marquee");
for (int i = 0; i < MARQUEE_VIEWS.length; i++) {
View v = findViewById(MARQUEE_VIEWS[i]);
if (v != null) {
v.setSelected(enabled);
}
}
}
@Override @Override
public void onFinishInflate() { public void onFinishInflate() {
super.onFinishInflate(); super.onFinishInflate();
@@ -257,9 +279,7 @@ public class KeyguardTransportControlView extends FrameLayout {
mMetadataContainer = (ViewGroup) findViewById(R.id.metadata_container); mMetadataContainer = (ViewGroup) findViewById(R.id.metadata_container);
mBadge = (ImageView) findViewById(R.id.badge); mBadge = (ImageView) findViewById(R.id.badge);
mTrackTitle = (TextView) findViewById(R.id.title); mTrackTitle = (TextView) findViewById(R.id.title);
mTrackTitle.setSelected(true); // enable marquee
mTrackArtistAlbum = (TextView) findViewById(R.id.artist_album); mTrackArtistAlbum = (TextView) findViewById(R.id.artist_album);
mTrackArtistAlbum.setSelected(true);
mTransientSeek = findViewById(R.id.transient_seek); mTransientSeek = findViewById(R.id.transient_seek);
mTransientSeekBar = (SeekBar) findViewById(R.id.transient_seek_bar); mTransientSeekBar = (SeekBar) findViewById(R.id.transient_seek_bar);
mTransientSeekBar.setOnSeekBarChangeListener(mOnSeekBarChangeListener); mTransientSeekBar.setOnSeekBarChangeListener(mOnSeekBarChangeListener);
@@ -273,6 +293,8 @@ public class KeyguardTransportControlView extends FrameLayout {
view.setOnClickListener(mTransportCommandListener); view.setOnClickListener(mTransportCommandListener);
view.setOnLongClickListener(mTransportShowSeekBarListener); view.setOnLongClickListener(mTransportShowSeekBarListener);
} }
final boolean screenOn = KeyguardUpdateMonitor.getInstance(mContext).isScreenOn();
setEnableMarquee(screenOn);
} }
@Override @Override
@@ -285,6 +307,7 @@ public class KeyguardTransportControlView extends FrameLayout {
} }
if (DEBUG) Log.v(TAG, "Registering TCV " + this); if (DEBUG) Log.v(TAG, "Registering TCV " + this);
mAudioManager.registerRemoteController(mRemoteController); mAudioManager.registerRemoteController(mRemoteController);
KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mUpdateMonitor);
} }
@Override @Override
@@ -301,6 +324,7 @@ public class KeyguardTransportControlView extends FrameLayout {
super.onDetachedFromWindow(); super.onDetachedFromWindow();
if (DEBUG) Log.v(TAG, "Unregistering TCV " + this); if (DEBUG) Log.v(TAG, "Unregistering TCV " + this);
mAudioManager.unregisterRemoteController(mRemoteController); mAudioManager.unregisterRemoteController(mRemoteController);
KeyguardUpdateMonitor.getInstance(mContext).removeCallback(mUpdateMonitor);
mUserSeeking = false; mUserSeeking = false;
} }

View File

@@ -92,7 +92,8 @@ public class KeyguardUpdateMonitor {
protected static final int MSG_SET_PLAYBACK_STATE = 316; protected static final int MSG_SET_PLAYBACK_STATE = 316;
protected static final int MSG_USER_INFO_CHANGED = 317; protected static final int MSG_USER_INFO_CHANGED = 317;
protected static final int MSG_REPORT_EMERGENCY_CALL_ACTION = 318; protected static final int MSG_REPORT_EMERGENCY_CALL_ACTION = 318;
private static final int MSG_SCREEN_TURNED_ON = 319;
private static final int MSG_SCREEN_TURNED_OFF = 320;
private static KeyguardUpdateMonitor sInstance; private static KeyguardUpdateMonitor sInstance;
@@ -127,6 +128,8 @@ public class KeyguardUpdateMonitor {
private boolean mSwitchingUser; private boolean mSwitchingUser;
private boolean mScreenOn;
private final Handler mHandler = new Handler() { private final Handler mHandler = new Handler() {
@Override @Override
public void handleMessage(Message msg) { public void handleMessage(Message msg) {
@@ -185,6 +188,12 @@ public class KeyguardUpdateMonitor {
case MSG_REPORT_EMERGENCY_CALL_ACTION: case MSG_REPORT_EMERGENCY_CALL_ACTION:
handleReportEmergencyCallAction(); handleReportEmergencyCallAction();
break; break;
case MSG_SCREEN_TURNED_OFF:
handleScreenTurnedOff(msg.arg1);
break;
case MSG_SCREEN_TURNED_ON:
handleScreenTurnedOn();
break;
} }
} }
}; };
@@ -411,6 +420,26 @@ public class KeyguardUpdateMonitor {
return sInstance; return sInstance;
} }
protected void handleScreenTurnedOn() {
final int count = mCallbacks.size();
for (int i = 0; i < count; i++) {
KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
if (cb != null) {
cb.onScreenTurnedOn();
}
}
}
protected void handleScreenTurnedOff(int arg1) {
final int count = mCallbacks.size();
for (int i = 0; i < count; i++) {
KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
if (cb != null) {
cb.onScreenTurnedOff(arg1);
}
}
}
/** /**
* IMPORTANT: Must be called from UI thread. * IMPORTANT: Must be called from UI thread.
*/ */
@@ -1041,4 +1070,24 @@ public class KeyguardUpdateMonitor {
public DisplayClientState getCachedDisplayClientState() { public DisplayClientState getCachedDisplayClientState() {
return mDisplayClientState; return mDisplayClientState;
} }
// TODO: use these callbacks elsewhere in place of the existing notifyScreen*()
// (KeyguardViewMediator, KeyguardHostView)
public void dispatchScreenTurnedOn() {
synchronized (this) {
mScreenOn = true;
}
mHandler.sendEmptyMessage(MSG_SCREEN_TURNED_ON);
}
public void dispatchScreenTurndOff(int why) {
synchronized(this) {
mScreenOn = false;
}
mHandler.sendMessage(mHandler.obtainMessage(MSG_SCREEN_TURNED_OFF, why, 0));
}
public boolean isScreenOn() {
return mScreenOn;
}
} }

View File

@@ -19,6 +19,7 @@ import android.app.PendingIntent;
import android.app.admin.DevicePolicyManager; import android.app.admin.DevicePolicyManager;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.media.AudioManager; import android.media.AudioManager;
import android.view.WindowManagerPolicy;
import com.android.internal.telephony.IccCardConstants; import com.android.internal.telephony.IccCardConstants;
@@ -137,7 +138,23 @@ class KeyguardUpdateMonitorCallback {
*/ */
void onEmergencyCallAction() { } void onEmergencyCallAction() { }
/**
* Called when the transport background changes.
* @param bitmap
*/
public void onSetBackground(Bitmap bitmap) { public void onSetBackground(Bitmap bitmap) {
// THIS SPACE FOR RENT
} }
/**
* Called when the screen turns on
*/
public void onScreenTurnedOn() { }
/**
* Called when the screen turns off
* @param why {@link WindowManagerPolicy#OFF_BECAUSE_OF_USER},
* {@link WindowManagerPolicy#OFF_BECAUSE_OF_TIMEOUT} or
* {@link WindowManagerPolicy#OFF_BECAUSE_OF_PROX_SENSOR}.
*/
public void onScreenTurnedOff(int why) { }
} }

View File

@@ -599,6 +599,7 @@ public class KeyguardViewMediator {
doKeyguardLocked(null); doKeyguardLocked(null);
} }
} }
KeyguardUpdateMonitor.getInstance(mContext).dispatchScreenTurndOff(why);
} }
private void doKeyguardLaterLocked() { private void doKeyguardLaterLocked() {
@@ -664,6 +665,7 @@ public class KeyguardViewMediator {
notifyScreenOnLocked(callback); notifyScreenOnLocked(callback);
} }
} }
KeyguardUpdateMonitor.getInstance(mContext).dispatchScreenTurnedOn();
maybeSendUserPresentBroadcast(); maybeSendUserPresentBroadcast();
} }