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

Commit 9cfa8e79 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Adding SimPhonebookContract" am: 110420fc

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1521063

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I608d52e517edf7874c79538e8a99e3455cd27e9a
parents 5c04261d 110420fc
Loading
Loading
Loading
Loading
+49 −0
Original line number Diff line number Diff line
@@ -34325,6 +34325,55 @@ package android.provider {
    field public static final String PATH_SETTING_INTENT = "intent";
  }
  public final class SimPhonebookContract {
    field public static final String AUTHORITY = "com.android.simphonebook";
    field @NonNull public static final android.net.Uri AUTHORITY_URI;
  }
  public static final class SimPhonebookContract.ElementaryFiles {
    method @NonNull public static android.net.Uri getItemUri(int, int);
    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/sim-elementary-file";
    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/sim-elementary-file";
    field @NonNull public static final android.net.Uri CONTENT_URI;
    field public static final int EF_ADN = 1; // 0x1
    field public static final int EF_FDN = 2; // 0x2
    field public static final int EF_SDN = 3; // 0x3
    field public static final String EF_TYPE = "ef_type";
    field public static final int EF_UNKNOWN = 0; // 0x0
    field public static final String MAX_RECORDS = "max_records";
    field public static final String NAME_MAX_LENGTH = "name_max_length";
    field public static final String PHONE_NUMBER_MAX_LENGTH = "phone_number_max_length";
    field public static final String RECORD_COUNT = "record_count";
    field public static final String SLOT_INDEX = "slot_index";
    field public static final String SUBSCRIPTION_ID = "subscription_id";
  }
  public static final class SimPhonebookContract.SimRecords {
    method @NonNull public static android.net.Uri getContentUri(int, int);
    method @NonNull public static android.net.Uri getItemUri(int, int, int);
    method @NonNull @WorkerThread public static android.provider.SimPhonebookContract.SimRecords.NameValidationResult validateName(@NonNull android.content.ContentResolver, int, int, @NonNull String);
    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/sim-contact_v2";
    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/sim-contact_v2";
    field public static final String ELEMENTARY_FILE_TYPE = "elementary_file_type";
    field public static final String NAME = "name";
    field public static final String PHONE_NUMBER = "phone_number";
    field public static final String RECORD_NUMBER = "record_number";
    field public static final String SUBSCRIPTION_ID = "subscription_id";
  }
  public static final class SimPhonebookContract.SimRecords.NameValidationResult implements android.os.Parcelable {
    ctor public SimPhonebookContract.SimRecords.NameValidationResult(@NonNull String, @NonNull String, int, int);
    method public int describeContents();
    method public int getEncodedLength();
    method public int getMaxEncodedLength();
    method @NonNull public String getName();
    method @NonNull public String getSanitizedName();
    method public boolean isSupportedCharacter(int);
    method public boolean isValid();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.provider.SimPhonebookContract.SimRecords.NameValidationResult> CREATOR;
  }
  public class SyncStateContract {
    ctor public SyncStateContract();
  }
+18 −0
Original line number Diff line number Diff line
@@ -8289,6 +8289,24 @@ package android.provider {
    method @RequiresPermission(android.Manifest.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE) public static boolean putString(@NonNull android.content.ContentResolver, @NonNull String, @Nullable String, boolean);
  }
  public final class SimPhonebookContract {
    method @NonNull public static String getEfUriPath(int);
    field public static final String SUBSCRIPTION_ID_PATH_SEGMENT = "subid";
  }
  public static final class SimPhonebookContract.ElementaryFiles {
    field public static final String EF_ADN_PATH_SEGMENT = "adn";
    field public static final String EF_FDN_PATH_SEGMENT = "fdn";
    field public static final String EF_SDN_PATH_SEGMENT = "sdn";
    field public static final String ELEMENTARY_FILES_PATH_SEGMENT = "elementary_files";
  }
  public static final class SimPhonebookContract.SimRecords {
    field public static final String EXTRA_NAME_VALIDATION_RESULT = "android.provider.extra.NAME_VALIDATION_RESULT";
    field public static final String QUERY_ARG_PIN2 = "android:query-arg-pin2";
    field public static final String VALIDATE_NAME_PATH_SEGMENT = "validate_name";
  }
  public static final class Telephony.Carriers implements android.provider.BaseColumns {
    field public static final String APN_SET_ID = "apn_set_id";
    field public static final int CARRIER_EDITED = 4; // 0x4
+1 −0
Original line number Diff line number Diff line
per-file *BlockedNumber* = file:/telephony/OWNERS
per-file *Telephony* = file:/telephony/OWNERS
per-file *SimPhonebook* = file:/telephony/OWNERS

per-file *CallLog* = file:platform/packages/providers/ContactsProvider:/OWNERS
per-file *Contacts* = file:platform/packages/providers/ContactsProvider:/OWNERS
+506 −0

File added.

Preview size limit exceeded, changes collapsed.

+120 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2020 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 android.provider;

import static com.google.common.truth.Truth.assertThat;

import static org.testng.Assert.assertThrows;

import android.content.ContentValues;
import android.os.Parcel;
import android.provider.SimPhonebookContract.SimRecords.NameValidationResult;

import androidx.test.ext.junit.runners.AndroidJUnit4;

import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(AndroidJUnit4.class)
public class SimPhonebookContractTest {

    @Test
    public void getContentUri_invalidEfType_throwsIllegalArgumentException() {
        assertThrows(IllegalArgumentException.class, () ->
                SimPhonebookContract.SimRecords.getContentUri(1, 100)
        );
        assertThrows(IllegalArgumentException.class, () ->
                SimPhonebookContract.SimRecords.getContentUri(1, -1)
        );
        assertThrows(IllegalArgumentException.class, () ->
                SimPhonebookContract.SimRecords.getContentUri(1,
                        SimPhonebookContract.ElementaryFiles.EF_UNKNOWN)
        );
    }

    @Test
    public void getItemUri_invalidEfType_throwsIllegalArgumentException() {
        assertThrows(IllegalArgumentException.class, () ->
                SimPhonebookContract.SimRecords.getItemUri(1, 100, 1)
        );
        assertThrows(IllegalArgumentException.class, () ->
                SimPhonebookContract.SimRecords.getItemUri(1, -1, 1)
        );
        assertThrows(IllegalArgumentException.class, () ->
                SimPhonebookContract.SimRecords.getItemUri(1,
                        SimPhonebookContract.ElementaryFiles.EF_UNKNOWN, 1)
        );
    }

    @Test
    public void getItemUri_invalidRecordIndex_throwsIllegalArgumentException() {
        assertThrows(IllegalArgumentException.class, () ->
                SimPhonebookContract.SimRecords.getItemUri(1,
                        SimPhonebookContract.ElementaryFiles.EF_ADN, 0)
        );
        assertThrows(IllegalArgumentException.class, () ->
                SimPhonebookContract.SimRecords.getItemUri(1,
                        SimPhonebookContract.ElementaryFiles.EF_ADN, -1)
        );
    }

    @Test
    public void nameValidationResult_isValid_validNames() {
        assertThat(new NameValidationResult("", "", 0, 1).isValid()).isTrue();
        assertThat(new NameValidationResult("a", "a", 1, 1).isValid()).isTrue();
        assertThat(new NameValidationResult("First Last", "First Last", 10, 10).isValid()).isTrue();
        assertThat(
                new NameValidationResult("First Last", "First Last", 10, 100).isValid()).isTrue();
    }

    @Test
    public void nameValidationResult_isValid_invalidNames() {
        assertThat(new NameValidationResult("", "", 0, 0).isValid()).isFalse();
        assertThat(new NameValidationResult("ab", "ab", 2, 1).isValid()).isFalse();
        NameValidationResult unsupportedCharactersResult = new NameValidationResult("A_b_c",
                "A b c", 5, 5);
        assertThat(unsupportedCharactersResult.isValid()).isFalse();
        assertThat(unsupportedCharactersResult.isSupportedCharacter(0)).isTrue();
        assertThat(unsupportedCharactersResult.isSupportedCharacter(1)).isFalse();
        assertThat(unsupportedCharactersResult.isSupportedCharacter(2)).isTrue();
        assertThat(unsupportedCharactersResult.isSupportedCharacter(3)).isFalse();
        assertThat(unsupportedCharactersResult.isSupportedCharacter(4)).isTrue();
    }

    @Test
    public void nameValidationResult_parcel() {
        ContentValues values = new ContentValues();
        values.put("name", "Name");
        values.put("phone_number", "123");

        NameValidationResult result;
        Parcel parcel = Parcel.obtain();
        try {
            parcel.writeParcelable(new NameValidationResult("name", "sanitized name", 1, 2), 0);
            parcel.setDataPosition(0);
            result = parcel.readParcelable(NameValidationResult.class.getClassLoader());
        } finally {
            parcel.recycle();
        }

        assertThat(result.getName()).isEqualTo("name");
        assertThat(result.getSanitizedName()).isEqualTo("sanitized name");
        assertThat(result.getEncodedLength()).isEqualTo(1);
        assertThat(result.getMaxEncodedLength()).isEqualTo(2);
    }
}