public final class

AppLocalesMetadataHolderService

extends Service

 java.lang.Object

↳Service

↳androidx.appcompat.app.AppLocalesMetadataHolderService

Gradle dependencies

compile group: 'androidx.appcompat', name: 'appcompat', version: '1.7.0'

  • groupId: androidx.appcompat
  • artifactId: appcompat
  • version: 1.7.0

Artifact androidx.appcompat:appcompat:1.7.0 it located at Google repository (https://maven.google.com/)

Androidx artifact mapping:

androidx.appcompat:appcompat com.android.support:appcompat-v7

Overview

A placeholder service to avoid adding application-level metadata. The service is only used to expose metadata defined in the library's manifest. It is never invoked.

This metadata boolean collected from the key "autoStoreLocales" is used as an opt-in from the developers to automatically store locales provided by them through the API AppCompatDelegate.setApplicationLocales(LocaleListCompat).

Summary

Constructors
publicAppLocalesMetadataHolderService()

Methods
public static ServiceInfogetServiceInfo(Context context)

Returns the for the declared AppLocalesMetadataHolderService.

public IBinderonBind(Intent intent)

from java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructors

public AppLocalesMetadataHolderService()

Methods

public IBinder onBind(Intent intent)

public static ServiceInfo getServiceInfo(Context context)

Returns the for the declared AppLocalesMetadataHolderService.

This serviceInfo contains the attribute "autoStoreLocales", its value being a boolean that informs us if the developer wants us to handle the storage of locales or not.

Source

/*
 * Copyright 2022 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 androidx.appcompat.app;

import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.os.Build;
import android.os.IBinder;

import androidx.annotation.DoNotInline;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.core.os.LocaleListCompat;

/**
 * A placeholder service to avoid adding application-level metadata. The service
 * is only used to expose metadata defined in the library's manifest. It is
 * never invoked.
 *
 * <p>This metadata boolean collected from the key "autoStoreLocales" is used as an opt-in from
 * the developers to automatically store locales provided by them through the API
 * {@link AppCompatDelegate#setApplicationLocales(LocaleListCompat)}.</p>
 */
public final class AppLocalesMetadataHolderService extends Service {
    public AppLocalesMetadataHolderService() {}

    @NonNull
    @Override
    public IBinder onBind(@SuppressWarnings("InvalidNullabilityOverride") @NonNull Intent intent) {
        throw new UnsupportedOperationException();
    }

    /**
     * Returns the {@link ServiceInfo} for the declared {@link AppLocalesMetadataHolderService}.
     *
     * <p>This serviceInfo contains the attribute "autoStoreLocales", its value being a boolean
     * that informs us if the developer wants us to handle the storage of locales or not.</p>
     */
    @NonNull
    @SuppressWarnings("deprecation") // GET_DISABLED_COMPONENTS, getServiceInfo
    public static ServiceInfo getServiceInfo(@NonNull Context context) throws
            PackageManager.NameNotFoundException {
        int flags = PackageManager.GET_META_DATA;
        // The service is marked as disabled so we need to include the following flags.
        if (Build.VERSION.SDK_INT >= 24) {
            flags |= Api24Impl.getDisabledComponentFlag();
        } else {
            flags |= PackageManager.GET_DISABLED_COMPONENTS;
        }

        return context.getPackageManager().getServiceInfo(
                new ComponentName(context, AppLocalesMetadataHolderService.class), flags);
    }

    @RequiresApi(24)
    private static class Api24Impl {
        @DoNotInline
        static int getDisabledComponentFlag() {
            return PackageManager.MATCH_DISABLED_COMPONENTS;
        }
    }
}