diff --git a/api/cm_current.txt b/api/cm_current.txt index 9ca1fcf..810935a 100644 --- a/api/cm_current.txt +++ b/api/cm_current.txt @@ -435,11 +435,13 @@ package cyanogenmod.externalviews { method protected void onDetach(); method protected abstract void onKeyguardDismissed(); method protected abstract void onKeyguardShowing(boolean); + method protected void onLockscreenSlideOffsetChanged(float); method protected abstract void onScreenTurnedOff(); method protected abstract void onScreenTurnedOn(); method protected final boolean requestDismiss(); method protected final boolean requestDismissAndStartActivity(android.content.Intent); method protected final void setInteractivity(boolean); + method protected final void slideLockscreenIn(); } } diff --git a/samples/externalviews/keyguardviewprovider/src/org/cyanogenmod/samples/keyguardextview/SampleKeyguardProviderService.java b/samples/externalviews/keyguardviewprovider/src/org/cyanogenmod/samples/keyguardextview/SampleKeyguardProviderService.java index dc742d1..194173a 100644 --- a/samples/externalviews/keyguardviewprovider/src/org/cyanogenmod/samples/keyguardextview/SampleKeyguardProviderService.java +++ b/samples/externalviews/keyguardviewprovider/src/org/cyanogenmod/samples/keyguardextview/SampleKeyguardProviderService.java @@ -94,6 +94,11 @@ public class SampleKeyguardProviderService extends KeyguardExternalViewProviderS mImageView.clearAnimation(); } + @Override + protected void onLockscreenSlideOffsetChanged(float slideProgress) { + + } + /** * Called when the view has been attached to a window */ diff --git a/src/java/cyanogenmod/externalviews/IKeyguardExternalViewCallbacks.aidl b/src/java/cyanogenmod/externalviews/IKeyguardExternalViewCallbacks.aidl index 3e0ed9f..c9d75e2 100644 --- a/src/java/cyanogenmod/externalviews/IKeyguardExternalViewCallbacks.aidl +++ b/src/java/cyanogenmod/externalviews/IKeyguardExternalViewCallbacks.aidl @@ -26,4 +26,5 @@ interface IKeyguardExternalViewCallbacks { oneway void setInteractivity(boolean isInteractive); oneway void onAttachedToWindow(); oneway void onDetachedFromWindow(); + oneway void slideLockscreenIn(); } diff --git a/src/java/cyanogenmod/externalviews/IKeyguardExternalViewProvider.aidl b/src/java/cyanogenmod/externalviews/IKeyguardExternalViewProvider.aidl index 7405763..a708984 100644 --- a/src/java/cyanogenmod/externalviews/IKeyguardExternalViewProvider.aidl +++ b/src/java/cyanogenmod/externalviews/IKeyguardExternalViewProvider.aidl @@ -38,4 +38,5 @@ interface IKeyguardExternalViewProvider void alterWindow(in int x, in int y, in int width, in int height, in boolean visible, in Rect clipRect); + oneway void onLockscreenSlideOffsetChanged(float swipeProgress); } diff --git a/src/java/cyanogenmod/externalviews/KeyguardExternalView.java b/src/java/cyanogenmod/externalviews/KeyguardExternalView.java index 0c464d3..9f4059a 100644 --- a/src/java/cyanogenmod/externalviews/KeyguardExternalView.java +++ b/src/java/cyanogenmod/externalviews/KeyguardExternalView.java @@ -198,6 +198,13 @@ public class KeyguardExternalView extends View implements ViewTreeObserver.OnPre mWindowAttachmentListener.onDetachedFromWindow(); } } + + @Override + public void slideLockscreenIn() { + if (mCallback != null) { + mCallback.slideLockscreenIn(); + } + } }; private void executeQueue() { @@ -376,6 +383,24 @@ public class KeyguardExternalView extends View implements ViewTreeObserver.OnPre }); } + /** + * Called from the host when the user is swiping the lockscreen + * to transition into the live lock screen + * + * @param swipeProgress [0-1] represents the progress of the swipe + */ + public void onLockscreenSlideOffsetChanged(final float swipeProgress) { + performAction(new Runnable() { + @Override + public void run() { + try { + mExternalViewProvider.onLockscreenSlideOffsetChanged(swipeProgress); + } catch (RemoteException e) { + } + } + }); + } + /** * External views provided by a * {@link cyanogenmod.externalviews.KeyguardExternalViewProviderService} can be either @@ -453,6 +478,7 @@ public class KeyguardExternalView extends View implements ViewTreeObserver.OnPre boolean requestDismissAndStartActivity(Intent intent); void collapseNotificationPanel(); void providerDied(); + void slideLockscreenIn(); } /** diff --git a/src/java/cyanogenmod/externalviews/KeyguardExternalViewProviderService.java b/src/java/cyanogenmod/externalviews/KeyguardExternalViewProviderService.java index 540e58d..4c69a0a 100644 --- a/src/java/cyanogenmod/externalviews/KeyguardExternalViewProviderService.java +++ b/src/java/cyanogenmod/externalviews/KeyguardExternalViewProviderService.java @@ -227,6 +227,17 @@ public abstract class KeyguardExternalViewProviderService extends Service { }); } + @Override + public void onLockscreenSlideOffsetChanged(final float swipeProgress) + throws RemoteException { + mHandler.post(new Runnable() { + @Override + public void run() { + Provider.this.onLockscreenSlideOffsetChanged(swipeProgress); + } + }); + } + @Override public void alterWindow(final int x, final int y, final int width, final int height, final boolean visible, final Rect clipRect) { @@ -324,6 +335,18 @@ public abstract class KeyguardExternalViewProviderService extends Service { mCallbacks.finishBroadcast(); } + public void slideLockscreenIn() { + int N = mCallbacks.beginBroadcast(); + for(int i=0; i < N; i++) { + IKeyguardExternalViewCallbacks callback = mCallbacks.getBroadcastItem(0); + try { + callback.slideLockscreenIn(); + } catch(RemoteException e) { + } + } + mCallbacks.finishBroadcast(); + } + // region Window callbacks @Override public boolean dispatchKeyEvent(KeyEvent event) { @@ -522,6 +545,14 @@ public abstract class KeyguardExternalViewProviderService extends Service { */ protected abstract void onScreenTurnedOff(); + /** + * Called from the host when the user is swiping the lockscreen + * to transition into the live lock screen + * + * @param swipeProgress [0-1] represents the progress of the swipe + */ + protected void onLockscreenSlideOffsetChanged(float swipeProgress) {} + // callbacks from provider to host /** @@ -581,6 +612,15 @@ public abstract class KeyguardExternalViewProviderService extends Service { mImpl.setInteractivity(isInteractive); } + /** + * Call this method when you like to slide in the lockscreen on top of + * your live lockscreen. Only relevant if you use + * {@link KeyguardExternalViewProviderService.Provider#setInteractivity(boolean)} + */ + protected final void slideLockscreenIn() { + mImpl.slideLockscreenIn(); + } + /*package*/ final int getWindowType() { return WindowManager.LayoutParams.TYPE_KEYGUARD_PANEL; } diff --git a/system-api/cm_system-current.txt b/system-api/cm_system-current.txt index 9ca1fcf..810935a 100644 --- a/system-api/cm_system-current.txt +++ b/system-api/cm_system-current.txt @@ -435,11 +435,13 @@ package cyanogenmod.externalviews { method protected void onDetach(); method protected abstract void onKeyguardDismissed(); method protected abstract void onKeyguardShowing(boolean); + method protected void onLockscreenSlideOffsetChanged(float); method protected abstract void onScreenTurnedOff(); method protected abstract void onScreenTurnedOn(); method protected final boolean requestDismiss(); method protected final boolean requestDismissAndStartActivity(android.content.Intent); method protected final void setInteractivity(boolean); + method protected final void slideLockscreenIn(); } }