824 public int updateFrom(Configuration delta) {
825 int changed = 0;
826 if (delta.fontScale > 0 && fontScale != delta.fontScale) {
827 changed |= ActivityInfo.CONFIG_FONT_SCALE;
828 fontScale = delta.fontScale;
829 }
830 if (delta.mcc != 0 && mcc != delta.mcc) {
831 changed |= ActivityInfo.CONFIG_MCC;
832 mcc = delta.mcc;
833 }
834 if (delta.mnc != 0 && mnc != delta.mnc) {
835 changed |= ActivityInfo.CONFIG_MNC;
836 mnc = delta.mnc;
837 }
838 if (delta.locale != null
839 && (locale == null || !locale.equals(delta.locale))) {
840 changed |= ActivityInfo.CONFIG_LOCALE;
841 locale = delta.locale != null
842 ? (Locale) delta.locale.clone() : null;
843
844 changed |= ActivityInfo.CONFIG_LAYOUT_DIRECTION;
845
846
847 setLayoutDirection(locale);
848 }
849 final int deltaScreenLayoutDir = delta.screenLayout & SCREENLAYOUT_LAYOUTDIR_MASK;
850 if (deltaScreenLayoutDir != SCREENLAYOUT_LAYOUTDIR_UNDEFINED &&
851 deltaScreenLayoutDir != (screenLayout & SCREENLAYOUT_LAYOUTDIR_MASK)) {
852 screenLayout = (screenLayout & ~SCREENLAYOUT_LAYOUTDIR_MASK) | deltaScreenLayoutDir;
853 changed |= ActivityInfo.CONFIG_LAYOUT_DIRECTION;
854 }
855 if (delta.userSetLocale && (!userSetLocale || ((changed & ActivityInfo.CONFIG_LOCALE) != 0)))
856 {
857 changed |= ActivityInfo.CONFIG_LOCALE;
858 userSetLocale = true;
859 }
860 if (delta.touchscreen != TOUCHSCREEN_UNDEFINED
861 && touchscreen != delta.touchscreen) {
862 changed |= ActivityInfo.CONFIG_TOUCHSCREEN;
863 touchscreen = delta.touchscreen;
864 }
865 if (delta.keyboard != KEYBOARD_UNDEFINED
866 && keyboard != delta.keyboard) {
867 changed |= ActivityInfo.CONFIG_KEYBOARD;
868 keyboard = delta.keyboard;
869 }
870 if (delta.keyboardHidden != KEYBOARDHIDDEN_UNDEFINED
871 && keyboardHidden != delta.keyboardHidden) {
872 changed |= ActivityInfo.CONFIG_KEYBOARD_HIDDEN;
873 keyboardHidden = delta.keyboardHidden;
874 }
875 if (delta.hardKeyboardHidden != HARDKEYBOARDHIDDEN_UNDEFINED
876 && hardKeyboardHidden != delta.hardKeyboardHidden) {
877 changed |= ActivityInfo.CONFIG_KEYBOARD_HIDDEN;
878 hardKeyboardHidden = delta.hardKeyboardHidden;
879 }
880 if (delta.navigation != NAVIGATION_UNDEFINED
881 && navigation != delta.navigation) {
882 changed |= ActivityInfo.CONFIG_NAVIGATION;
883 navigation = delta.navigation;
884 }
885 if (delta.navigationHidden != NAVIGATIONHIDDEN_UNDEFINED
886 && navigationHidden != delta.navigationHidden) {
887 changed |= ActivityInfo.CONFIG_KEYBOARD_HIDDEN;
888 navigationHidden = delta.navigationHidden;
889 }
890 if (delta.orientation != ORIENTATION_UNDEFINED
891 && orientation != delta.orientation) {
892 changed |= ActivityInfo.CONFIG_ORIENTATION;
893 orientation = delta.orientation;
894 }
895 if (getScreenLayoutNoDirection(delta.screenLayout) !=
896 (SCREENLAYOUT_SIZE_UNDEFINED | SCREENLAYOUT_LONG_UNDEFINED)
897 && (getScreenLayoutNoDirection(screenLayout) !=
898 getScreenLayoutNoDirection(delta.screenLayout))) {
899 changed |= ActivityInfo.CONFIG_SCREEN_LAYOUT;
900
901 if ((delta.screenLayout&SCREENLAYOUT_LAYOUTDIR_MASK) == 0) {
902 screenLayout = (screenLayout&SCREENLAYOUT_LAYOUTDIR_MASK)|delta.screenLayout;
903 } else {
904 screenLayout = delta.screenLayout;
905 }
906 }
907 if (delta.uiMode != (UI_MODE_TYPE_UNDEFINED|UI_MODE_NIGHT_UNDEFINED)
908 && uiMode != delta.uiMode) {
909 changed |= ActivityInfo.CONFIG_UI_MODE;
910 if ((delta.uiMode&UI_MODE_TYPE_MASK) != UI_MODE_TYPE_UNDEFINED) {
911 uiMode = (uiMode&~UI_MODE_TYPE_MASK)
912 | (delta.uiMode&UI_MODE_TYPE_MASK);
913 }
914 if ((delta.uiMode&UI_MODE_NIGHT_MASK) != UI_MODE_NIGHT_UNDEFINED) {
915 uiMode = (uiMode&~UI_MODE_NIGHT_MASK)
916 | (delta.uiMode&UI_MODE_NIGHT_MASK);
917 }
918 }
919 if (delta.screenWidthDp != SCREEN_WIDTH_DP_UNDEFINED
920 && screenWidthDp != delta.screenWidthDp) {
921 changed |= ActivityInfo.CONFIG_SCREEN_SIZE;
922 screenWidthDp = delta.screenWidthDp;
923 }
924 if (delta.screenHeightDp != SCREEN_HEIGHT_DP_UNDEFINED
925 && screenHeightDp != delta.screenHeightDp) {
926 changed |= ActivityInfo.CONFIG_SCREEN_SIZE;
927 screenHeightDp = delta.screenHeightDp;
928 }
929 if (delta.smallestScreenWidthDp != SMALLEST_SCREEN_WIDTH_DP_UNDEFINED
930 && smallestScreenWidthDp != delta.smallestScreenWidthDp) {
931 changed |= ActivityInfo.CONFIG_SMALLEST_SCREEN_SIZE;
932 smallestScreenWidthDp = delta.smallestScreenWidthDp;
933 }
934 if (delta.densityDpi != DENSITY_DPI_UNDEFINED &&
935 densityDpi != delta.densityDpi) {
936 changed |= ActivityInfo.CONFIG_DENSITY;
937 densityDpi = delta.densityDpi;
938 }
939 if (delta.compatScreenWidthDp != SCREEN_WIDTH_DP_UNDEFINED) {
940 compatScreenWidthDp = delta.compatScreenWidthDp;
941 }
942 if (delta.compatScreenHeightDp != SCREEN_HEIGHT_DP_UNDEFINED) {
943 compatScreenHeightDp = delta.compatScreenHeightDp;
944 }
945 if (delta.compatSmallestScreenWidthDp != SMALLEST_SCREEN_WIDTH_DP_UNDEFINED) {
946 compatSmallestScreenWidthDp = delta.compatSmallestScreenWidthDp;
947 }
948 if (delta.seq != 0) {
949 seq = delta.seq;
950 }
951
952 return changed;
953 }