diff --git a/services/core/java/com/android/server/grammaticalinflection/GrammaticalInflectionService.java b/services/core/java/com/android/server/grammaticalinflection/GrammaticalInflectionService.java index 1a357eea00946..41053e908a00a 100644 --- a/services/core/java/com/android/server/grammaticalinflection/GrammaticalInflectionService.java +++ b/services/core/java/com/android/server/grammaticalinflection/GrammaticalInflectionService.java @@ -21,11 +21,14 @@ import static android.content.res.Configuration.GRAMMATICAL_GENDER_NOT_SPECIFIED import android.annotation.Nullable; import android.app.IGrammaticalInflectionManager; import android.content.Context; +import android.content.pm.PackageManagerInternal; import android.os.Binder; import android.os.IBinder; import android.os.Process; import android.os.SystemProperties; +import android.util.Log; +import com.android.internal.util.FrameworkStatsLog; import com.android.server.LocalServices; import com.android.server.SystemService; import com.android.server.wm.ActivityTaskManagerInternal; @@ -36,9 +39,10 @@ import com.android.server.wm.ActivityTaskManagerInternal; *

This service is API entry point for storing app-specific grammatical inflection. */ public class GrammaticalInflectionService extends SystemService { - + private final String TAG = "GrammaticalInflection"; private final GrammaticalInflectionBackupHelper mBackupHelper; private final ActivityTaskManagerInternal mActivityTaskManagerInternal; + private PackageManagerInternal mPackageManagerInternal; private static final String GRAMMATICAL_INFLECTION_ENABLED = "i18n.grammatical_Inflection.enabled"; @@ -55,6 +59,7 @@ public class GrammaticalInflectionService extends SystemService { public GrammaticalInflectionService(Context context) { super(context); mActivityTaskManagerInternal = LocalServices.getService(ActivityTaskManagerInternal.class); + mPackageManagerInternal = LocalServices.getService(PackageManagerInternal.class); mBackupHelper = new GrammaticalInflectionBackupHelper( this, context.getPackageManager()); } @@ -110,14 +115,26 @@ public class GrammaticalInflectionService extends SystemService { protected void setRequestedApplicationGrammaticalGender( String appPackageName, int userId, int gender) { - if (!SystemProperties.getBoolean(GRAMMATICAL_INFLECTION_ENABLED, true)) { - return; - } - + int preValue = getApplicationGrammaticalGender(appPackageName, userId); final ActivityTaskManagerInternal.PackageConfigurationUpdater updater = mActivityTaskManagerInternal.createPackageConfigurationUpdater(appPackageName, userId); + if (!SystemProperties.getBoolean(GRAMMATICAL_INFLECTION_ENABLED, true)) { + if (preValue != GRAMMATICAL_GENDER_NOT_SPECIFIED) { + Log.d(TAG, "Clearing the user's grammatical gender setting"); + updater.setGrammaticalGender(GRAMMATICAL_GENDER_NOT_SPECIFIED).commit(); + } + return; + } + + final int uid = mPackageManagerInternal.getPackageUid(appPackageName, 0, userId); + FrameworkStatsLog.write(FrameworkStatsLog.GRAMMATICAL_INFLECTION_CHANGED, + FrameworkStatsLog.APPLICATION_GRAMMATICAL_INFLECTION_CHANGED__SOURCE_ID__OTHERS, + uid, + gender != GRAMMATICAL_GENDER_NOT_SPECIFIED, + preValue != GRAMMATICAL_GENDER_NOT_SPECIFIED); + updater.setGrammaticalGender(gender).commit(); } }