Loading core/java/android/app/ActivityManagerNative.java +45 −2 Original line number Diff line number Diff line Loading @@ -2653,6 +2653,24 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM reply.writeNoException(); return true; } case REPORT_SIZE_CONFIGURATIONS: { data.enforceInterface(IActivityManager.descriptor); IBinder token = data.readStrongBinder(); int horizontalSize = data.readInt(); int[] horizontal = null; if (horizontalSize > 0) { horizontal = new int[horizontalSize]; data.readIntArray(horizontal); } int[] vertical = null; int verticalSize = data.readInt(); if (verticalSize > 0) { vertical = new int[verticalSize]; data.readIntArray(vertical); } reportSizeConfigurations(token, horizontal, vertical); return true; } } return super.onTransact(code, data, reply, flags); Loading Loading @@ -6146,5 +6164,30 @@ class ActivityManagerProxy implements IActivityManager return stackId; } @Override public void reportSizeConfigurations(IBinder token, int[] horizontalSizeConfiguration, int[] verticalSizeConfigurations) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(token); if (horizontalSizeConfiguration == null) { data.writeInt(0); } else { data.writeInt(horizontalSizeConfiguration.length); data.writeIntArray(horizontalSizeConfiguration); } if (verticalSizeConfigurations == null) { data.writeInt(0); } else { data.writeInt(verticalSizeConfigurations.length); data.writeIntArray(verticalSizeConfigurations); } mRemote.transact(REPORT_SIZE_CONFIGURATIONS, data, reply, 0); reply.readException(); data.recycle(); reply.recycle(); } private IBinder mRemote; } core/java/android/app/ActivityThread.java +38 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ import android.util.AndroidRuntimeException; import android.util.ArrayMap; import android.util.DisplayMetrics; import android.util.EventLog; import android.util.IntArray; import android.util.Log; import android.util.LogPrinter; import android.util.Pair; Loading Loading @@ -2504,6 +2505,7 @@ public final class ActivityThread { if (a != null) { r.createdConfig = new Configuration(mConfiguration); reportSizeConfigurations(r); Bundle oldState = r.state; handleResumeActivity(r.token, false, r.isForward, !r.activity.mFinished && !r.startsNotResumed); Loading Loading @@ -2563,6 +2565,42 @@ public final class ActivityThread { } } private void reportSizeConfigurations(ActivityClientRecord r) { Configuration[] configurations = r.activity.getResources().getSizeConfigurations(); if (configurations == null) { return; } IntArray horizontal = new IntArray(); IntArray vertical = new IntArray(); for (int i = configurations.length - 1; i >= 0; i--) { Configuration config = configurations[i]; if (config.screenHeightDp != Configuration.SCREEN_HEIGHT_DP_UNDEFINED) { vertical.add(config.screenHeightDp); } if (config.screenWidthDp != Configuration.SCREEN_WIDTH_DP_UNDEFINED) { horizontal.add(config.screenWidthDp); } if (config.smallestScreenWidthDp != Configuration.SMALLEST_SCREEN_WIDTH_DP_UNDEFINED) { vertical.add(config.smallestScreenWidthDp); horizontal.add(config.smallestScreenWidthDp); } } int[] horizontalArray = null; if (horizontal.size() > 0) { horizontalArray = horizontal.toArray(); } int[] verticalArray = null; if (vertical.size() > 0) { verticalArray = vertical.toArray(); } try { ActivityManagerNative.getDefault().reportSizeConfigurations(r.token, horizontalArray, verticalArray); } catch (RemoteException ex) { } } private void deliverNewIntents(ActivityClientRecord r, List<ReferrerIntent> intents) { final int N = intents.size(); for (int i=0; i<N; i++) { Loading core/java/android/app/IActivityManager.java +3 −0 Original line number Diff line number Diff line Loading @@ -121,6 +121,8 @@ public interface IActivityManager extends IInterface { PersistableBundle persistentState, CharSequence description) throws RemoteException; public void activitySlept(IBinder token) throws RemoteException; public void activityDestroyed(IBinder token) throws RemoteException; public void reportSizeConfigurations(IBinder token, int[] horizontalSizeConfiguration, int[] verticalSizeConfigurations) throws RemoteException; public String getCallingPackage(IBinder token) throws RemoteException; public ComponentName getCallingActivity(IBinder token) throws RemoteException; public List<IAppTask> getAppTasks(String callingPackage) throws RemoteException; Loading Loading @@ -884,4 +886,5 @@ public interface IActivityManager extends IInterface { int POSITION_TASK_IN_STACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 342; int GET_ACTIVITY_STACK_ID_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 343; int MOVE_ACTIVITY_TO_STACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 344; int REPORT_SIZE_CONFIGURATIONS = IBinder.FIRST_CALL_TRANSACTION + 345; } core/java/android/content/res/AssetManager.java +3 −0 Original line number Diff line number Diff line Loading @@ -691,6 +691,9 @@ public final class AssetManager implements AutoCloseable { */ public native final String[] getLocales(); /** {@hide} */ public native final Configuration[] getSizeConfigurations(); /** * Change the configuation used when retrieving resources. Not for use by * applications. Loading core/java/android/content/res/Resources.java +6 −1 Original line number Diff line number Diff line Loading @@ -2140,6 +2140,11 @@ public class Resources { return mConfiguration; } /** @hide */ public Configuration[] getSizeConfigurations() { return mAssets.getSizeConfigurations(); }; /** * Return the compatibility mode information for the application. * The returned object should be treated as read-only. Loading Loading
core/java/android/app/ActivityManagerNative.java +45 −2 Original line number Diff line number Diff line Loading @@ -2653,6 +2653,24 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM reply.writeNoException(); return true; } case REPORT_SIZE_CONFIGURATIONS: { data.enforceInterface(IActivityManager.descriptor); IBinder token = data.readStrongBinder(); int horizontalSize = data.readInt(); int[] horizontal = null; if (horizontalSize > 0) { horizontal = new int[horizontalSize]; data.readIntArray(horizontal); } int[] vertical = null; int verticalSize = data.readInt(); if (verticalSize > 0) { vertical = new int[verticalSize]; data.readIntArray(vertical); } reportSizeConfigurations(token, horizontal, vertical); return true; } } return super.onTransact(code, data, reply, flags); Loading Loading @@ -6146,5 +6164,30 @@ class ActivityManagerProxy implements IActivityManager return stackId; } @Override public void reportSizeConfigurations(IBinder token, int[] horizontalSizeConfiguration, int[] verticalSizeConfigurations) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(token); if (horizontalSizeConfiguration == null) { data.writeInt(0); } else { data.writeInt(horizontalSizeConfiguration.length); data.writeIntArray(horizontalSizeConfiguration); } if (verticalSizeConfigurations == null) { data.writeInt(0); } else { data.writeInt(verticalSizeConfigurations.length); data.writeIntArray(verticalSizeConfigurations); } mRemote.transact(REPORT_SIZE_CONFIGURATIONS, data, reply, 0); reply.readException(); data.recycle(); reply.recycle(); } private IBinder mRemote; }
core/java/android/app/ActivityThread.java +38 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ import android.util.AndroidRuntimeException; import android.util.ArrayMap; import android.util.DisplayMetrics; import android.util.EventLog; import android.util.IntArray; import android.util.Log; import android.util.LogPrinter; import android.util.Pair; Loading Loading @@ -2504,6 +2505,7 @@ public final class ActivityThread { if (a != null) { r.createdConfig = new Configuration(mConfiguration); reportSizeConfigurations(r); Bundle oldState = r.state; handleResumeActivity(r.token, false, r.isForward, !r.activity.mFinished && !r.startsNotResumed); Loading Loading @@ -2563,6 +2565,42 @@ public final class ActivityThread { } } private void reportSizeConfigurations(ActivityClientRecord r) { Configuration[] configurations = r.activity.getResources().getSizeConfigurations(); if (configurations == null) { return; } IntArray horizontal = new IntArray(); IntArray vertical = new IntArray(); for (int i = configurations.length - 1; i >= 0; i--) { Configuration config = configurations[i]; if (config.screenHeightDp != Configuration.SCREEN_HEIGHT_DP_UNDEFINED) { vertical.add(config.screenHeightDp); } if (config.screenWidthDp != Configuration.SCREEN_WIDTH_DP_UNDEFINED) { horizontal.add(config.screenWidthDp); } if (config.smallestScreenWidthDp != Configuration.SMALLEST_SCREEN_WIDTH_DP_UNDEFINED) { vertical.add(config.smallestScreenWidthDp); horizontal.add(config.smallestScreenWidthDp); } } int[] horizontalArray = null; if (horizontal.size() > 0) { horizontalArray = horizontal.toArray(); } int[] verticalArray = null; if (vertical.size() > 0) { verticalArray = vertical.toArray(); } try { ActivityManagerNative.getDefault().reportSizeConfigurations(r.token, horizontalArray, verticalArray); } catch (RemoteException ex) { } } private void deliverNewIntents(ActivityClientRecord r, List<ReferrerIntent> intents) { final int N = intents.size(); for (int i=0; i<N; i++) { Loading
core/java/android/app/IActivityManager.java +3 −0 Original line number Diff line number Diff line Loading @@ -121,6 +121,8 @@ public interface IActivityManager extends IInterface { PersistableBundle persistentState, CharSequence description) throws RemoteException; public void activitySlept(IBinder token) throws RemoteException; public void activityDestroyed(IBinder token) throws RemoteException; public void reportSizeConfigurations(IBinder token, int[] horizontalSizeConfiguration, int[] verticalSizeConfigurations) throws RemoteException; public String getCallingPackage(IBinder token) throws RemoteException; public ComponentName getCallingActivity(IBinder token) throws RemoteException; public List<IAppTask> getAppTasks(String callingPackage) throws RemoteException; Loading Loading @@ -884,4 +886,5 @@ public interface IActivityManager extends IInterface { int POSITION_TASK_IN_STACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 342; int GET_ACTIVITY_STACK_ID_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 343; int MOVE_ACTIVITY_TO_STACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 344; int REPORT_SIZE_CONFIGURATIONS = IBinder.FIRST_CALL_TRANSACTION + 345; }
core/java/android/content/res/AssetManager.java +3 −0 Original line number Diff line number Diff line Loading @@ -691,6 +691,9 @@ public final class AssetManager implements AutoCloseable { */ public native final String[] getLocales(); /** {@hide} */ public native final Configuration[] getSizeConfigurations(); /** * Change the configuation used when retrieving resources. Not for use by * applications. Loading
core/java/android/content/res/Resources.java +6 −1 Original line number Diff line number Diff line Loading @@ -2140,6 +2140,11 @@ public class Resources { return mConfiguration; } /** @hide */ public Configuration[] getSizeConfigurations() { return mAssets.getSizeConfigurations(); }; /** * Return the compatibility mode information for the application. * The returned object should be treated as read-only. Loading