diff options
Diffstat (limited to 'core/java/android')
-rw-r--r-- | core/java/android/app/ActivityManagerNative.java | 23 | ||||
-rw-r--r-- | core/java/android/app/IActivityManager.java | 3 | ||||
-rw-r--r-- | core/java/android/app/StatusBarManager.java | 33 | ||||
-rw-r--r-- | core/java/android/app/admin/DevicePolicyManager.java | 17 | ||||
-rw-r--r-- | core/java/android/app/admin/IDevicePolicyManager.aidl | 2 | ||||
-rw-r--r-- | core/java/android/view/View.java | 19 | ||||
-rw-r--r-- | core/java/android/widget/Editor.java | 2 | ||||
-rw-r--r-- | core/java/android/widget/MediaController.java | 10 |
8 files changed, 102 insertions, 7 deletions
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index b11c509..a71a258 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -2521,6 +2521,15 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } + case UPDATE_PREFERRED_SETUP_ACTIVITY_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + ComponentName preferredActivity = ComponentName.readFromParcel(data); + int userId = data.readInt(); + updatePreferredSetupActivity(preferredActivity, userId); + reply.writeNoException(); + return true; + } + case GET_PACKAGE_PROCESS_STATE_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); String pkg = data.readString(); @@ -5821,6 +5830,20 @@ class ActivityManagerProxy implements IActivityManager } @Override + public void updatePreferredSetupActivity(ComponentName preferredActivity, int userId) + throws RemoteException { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + ComponentName.writeToParcel(preferredActivity, data); + data.writeInt(userId); + mRemote.transact(UPDATE_PREFERRED_SETUP_ACTIVITY_TRANSACTION, data, reply, 0); + reply.readException(); + data.recycle(); + reply.recycle(); + } + + @Override public int getPackageProcessState(String packageName) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java index 00558fe..5829fbe 100644 --- a/core/java/android/app/IActivityManager.java +++ b/core/java/android/app/IActivityManager.java @@ -496,6 +496,8 @@ public interface IActivityManager extends IInterface { throws RemoteException; public void updateLockTaskPackages(int userId, String[] packages) throws RemoteException; public void updateDeviceOwner(String packageName) throws RemoteException; + public void updatePreferredSetupActivity(ComponentName preferredActivity, int userId) + throws RemoteException; public int getPackageProcessState(String packageName) throws RemoteException; @@ -839,4 +841,5 @@ public interface IActivityManager extends IInterface { int GET_PACKAGE_PROCESS_STATE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+293; int SHOW_LOCK_TASK_ESCAPE_MESSAGE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+294; int UPDATE_DEVICE_OWNER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+295; + int UPDATE_PREFERRED_SETUP_ACTIVITY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+296; } diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java index ce5306f..207519c 100644 --- a/core/java/android/app/StatusBarManager.java +++ b/core/java/android/app/StatusBarManager.java @@ -17,6 +17,7 @@ package android.app; +import android.annotation.IntDef; import android.content.Context; import android.os.Binder; import android.os.RemoteException; @@ -27,6 +28,9 @@ import android.view.View; import com.android.internal.statusbar.IStatusBarService; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + /** * Allows an app to control the status bar. * @@ -59,6 +63,15 @@ public class StatusBarManager { | DISABLE_SYSTEM_INFO | DISABLE_RECENT | DISABLE_HOME | DISABLE_BACK | DISABLE_CLOCK | DISABLE_SEARCH; + public static final int DISABLE2_NONE = 0x00000000; + + public static final int DISABLE2_MASK = 0x00000000; + + @IntDef(flag = true, + value = {DISABLE2_NONE, DISABLE2_MASK}) + @Retention(RetentionPolicy.SOURCE) + public @interface Disable2Flags {} + public static final int NAVIGATION_HINT_BACK_ALT = 1 << 0; public static final int NAVIGATION_HINT_IME_SHOWN = 1 << 1; @@ -103,7 +116,25 @@ public class StatusBarManager { throw new RuntimeException(ex); } } - + + /** + * Disable additional status bar features. Pass the bitwise-or of the DISABLE2_* flags. + * To re-enable everything, pass {@link #DISABLE_NONE}. + * + * Warning: Only pass DISABLE2_* flags into this function, do not use DISABLE_* flags. + */ + public void disable2(@Disable2Flags int what) { + try { + final IStatusBarService svc = getService(); + if (svc != null) { + svc.disable2(what, mToken, mContext.getPackageName()); + } + } catch (RemoteException ex) { + // system process is dead anyway. + throw new RuntimeException(ex); + } + } + /** * Expand the notifications panel. */ diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 47133d4..ed814c3 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -4325,4 +4325,21 @@ public class DevicePolicyManager { } } } + + /** + * Called by a device initializer to set the activity to be launched on device boot or after a + * user switch during user setup. This activity will be started regardless of the priority of + * other 'home' activities. Once user setup is complete, the preferred setup activity will be + * ignored. + * + * @param admin Which {@link DeviceAdminReceiver} this request is associated with. + * @param activity The Activity to be started by default during user setup. + */ + public void setPreferredSetupActivity(ComponentName admin, ComponentName activity) { + try { + mService.setPreferredSetupActivity(admin, activity); + } catch (RemoteException re) { + Log.w(TAG, "Failed talking with device policy service", re); + } + } } diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index 087fc88..a678c51 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -216,6 +216,8 @@ interface IDevicePolicyManager { String getDeviceInitializer(); ComponentName getDeviceInitializerComponent(); + void setPreferredSetupActivity(in ComponentName admin, in ComponentName activity); + void setUserIcon(in ComponentName admin, in Bitmap icon); void sendDeviceInitializerStatus(int statusCode, String description); diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 5c6ce76..7da2da4 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -15778,11 +15778,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return; } - if (mBackgroundSizeChanged) { - background.setBounds(0, 0, mRight - mLeft, mBottom - mTop); - mBackgroundSizeChanged = false; - rebuildOutline(); - } + setBackgroundBounds(); // Attempt to use a display list if requested. if (canvas.isHardwareAccelerated() && mAttachInfo != null @@ -15808,6 +15804,19 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } } + /** + * Sets the correct background bounds and rebuilds the outline, if needed. + * <p/> + * This is called by LayoutLib. + */ + void setBackgroundBounds() { + if (mBackgroundSizeChanged && mBackground != null) { + mBackground.setBounds(0, 0, mRight - mLeft, mBottom - mTop); + mBackgroundSizeChanged = false; + rebuildOutline(); + } + } + private void setBackgroundRenderNodeProperties(RenderNode renderNode) { renderNode.setTranslationX(mScrollX); renderNode.setTranslationY(mScrollY); diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index f1be434..39b9907 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -3563,7 +3563,7 @@ public class Editor { return false; } - return isPositionVisible(mPositionX + mHotspotX, mPositionY); + return isPositionVisible(mPositionX + mHotspotX + getHorizontalOffset(), mPositionY); } public abstract int getCurrentCursorOffset(); diff --git a/core/java/android/widget/MediaController.java b/core/java/android/widget/MediaController.java index 2375089..8d8b3a3 100644 --- a/core/java/android/widget/MediaController.java +++ b/core/java/android/widget/MediaController.java @@ -326,6 +326,16 @@ public class MediaController extends FrameLayout { if (mFfwdButton != null && !mPlayer.canSeekForward()) { mFfwdButton.setEnabled(false); } + // TODO What we really should do is add a canSeek to the MediaPlayerControl interface; + // this scheme can break the case when applications want to allow seek through the + // progress bar but disable forward/backward buttons. + // + // However, currently the flags SEEK_BACKWARD_AVAILABLE, SEEK_FORWARD_AVAILABLE, + // and SEEK_AVAILABLE are all (un)set together; as such the aforementioned issue + // shouldn't arise in existing applications. + if (mProgress != null && !mPlayer.canSeekBackward() && !mPlayer.canSeekForward()) { + mProgress.setEnabled(false); + } } catch (IncompatibleClassChangeError ex) { // We were given an old version of the interface, that doesn't have // the canPause/canSeekXYZ methods. This is OK, it just means we |