Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bedf5c38 authored by danielwbhuang's avatar danielwbhuang
Browse files

Migrate ToA to the new entry point

1. Add the new entry point
2. Use flag to control the migration

Bug: 379962955
Flag: com.android.settings.flags.regional_preferences_api_enabled
Test: check hsv and atest TermsOfAddressCategoryControllerTest
Change-Id: Ie78a0f16188f3c4414dcd653189e5772f99ecb4d
parent bd3daa87
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -44,6 +44,12 @@
          android:name="classname"
          android:value="com.android.settings.applications.appinfo.AppLocaleDetails" />
    </Preference>
    <Preference
        android:key="terms_of_address_in_more_language_settings"
        android:title="@string/terms_of_address_title"
        android:summary="@string/terms_of_address_summary"
        android:fragment="com.android.settings.localepicker.TermsOfAddressFragment"
        settings:controller="com.android.settings.localepicker.NewTermsOfAddressController"/>
  </PreferenceCategory>

  <PreferenceCategory
+76 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.localepicker;

import android.content.Context;
import android.os.LocaleList;

import androidx.annotation.NonNull;

import com.android.internal.app.LocaleStore;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.flags.Flags;

import java.util.Arrays;
import java.util.List;
import java.util.Locale;

public class NewTermsOfAddressController extends BasePreferenceController {

    public NewTermsOfAddressController(@NonNull Context context, @NonNull String preferenceKey) {
        super(context, preferenceKey);
    }

    @Override
    public int getAvailabilityStatus() {
        if (Flags.regionalPreferencesApiEnabled()) {
            if (Flags.termsOfAddressEnabled()) {
                return checkAvailabilityStatus();
            }
        }
        return CONDITIONALLY_UNAVAILABLE;
    }

    private int checkAvailabilityStatus() {
        // If language is not available for system language, or if ToA does not apply to
        // system language, we will hide it.
        final Locale defaultLocale = Locale.getDefault();
        LocaleStore.LocaleInfo localeInfo = LocaleStore.getLocaleInfo(defaultLocale);
        final List<String> supportedLanguageList = Arrays.asList(
                mContext.getResources().getStringArray(
                    R.array.terms_of_address_supported_languages));
        final List<String> notSupportedLocaleList = Arrays.asList(
                mContext.getResources().getStringArray(
                    R.array.terms_of_address_unsupported_locales));

        final Locale locale = localeInfo.getLocale().stripExtensions();
        final String language = locale.getLanguage();
        final String localeTag = locale.toLanguageTag();

        // Supported locales:
        // 1. All French is supported except fr-CA.
        // 2. QA language en-XA (LTR pseudo locale), ar_XB (RTL pseudo locale).
        if ((supportedLanguageList.contains(language)
                && !notSupportedLocaleList.contains(localeTag))
                || LocaleList.isPseudoLocale(locale)) {
            return AVAILABLE;
        }

        return CONDITIONALLY_UNAVAILABLE;
    }
}
+4 −1
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import static com.android.settings.flags.Flags.termsOfAddressEnabled;

import android.content.Context;
import android.os.LocaleList;
import android.text.TextUtils;
import android.util.Log;

import androidx.preference.PreferenceCategory;
@@ -28,6 +27,7 @@ import androidx.preference.PreferenceScreen;

import com.android.internal.app.LocaleStore;
import com.android.settings.R;
import com.android.settings.flags.Flags;
import com.android.settings.widget.PreferenceCategoryController;

import java.util.Arrays;
@@ -64,6 +64,9 @@ public class TermsOfAddressCategoryController extends PreferenceCategoryControll

    @Override
    public int getAvailabilityStatus() {
        if (Flags.regionalPreferencesApiEnabled()) {
            return CONDITIONALLY_UNAVAILABLE;
        }

        if (!termsOfAddressEnabled()) {
            return CONDITIONALLY_UNAVAILABLE;
+8 −0
Original line number Diff line number Diff line
@@ -24,12 +24,17 @@ import static org.mockito.Mockito.spy;

import android.content.Context;
import android.os.Looper;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.flag.junit.SetFlagsRule;

import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;

import com.android.settings.flags.Flags;

import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
@@ -45,6 +50,8 @@ public class TermsOfAddressCategoryControllerTest {
    private TermsOfAddressCategoryController mTermsOfAddressCategoryController;
    private Locale mCacheLocale;

    @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
@@ -65,6 +72,7 @@ public class TermsOfAddressCategoryControllerTest {
    }

    @Test
    @DisableFlags(Flags.FLAG_REGIONAL_PREFERENCES_API_ENABLED)
    public void getAvailabilityStatus_returnAvailable() {
        Locale.setDefault(Locale.forLanguageTag("fr-FR"));