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

Commit 611bc98f authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Replace intent with pendingIntent in the ScheduleInfo" into rvc-dev am:...

Merge "Replace intent with pendingIntent in the ScheduleInfo" into rvc-dev am: 50845581 am: dee395f2

Change-Id: Ibf6edcb78e75bab3b7efbc29d6ce4c14da5beeb4
parents 5f8464d4 dee395f2
Loading
Loading
Loading
Loading
+22 −17
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.settingslib.schedulesprovider;

import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Parcel;
import android.os.Parcelable;
@@ -25,25 +27,25 @@ import androidx.annotation.NonNull;

/**
 * Schedule data item containing the schedule title text, the summary text which is displayed on the
 * summary of the Settings preference and an {@link Intent} which Settings will launch when the
 * user clicks on the preference.
 * summary of the Settings preference and a {@link PendingIntent} which Settings will launch
 * when the user clicks on the preference.
 */
public class ScheduleInfo implements Parcelable {
    private static final String TAG = "ScheduleInfo";
    private final String mTitle;
    private final String mSummary;
    private final Intent mIntent;
    private final PendingIntent mPendingIntent;

    public ScheduleInfo(Builder builder) {
        mTitle = builder.mTitle;
        mSummary = builder.mSummary;
        mIntent = builder.mIntent;
        mPendingIntent = builder.mPendingIntent;
    }

    private ScheduleInfo(Parcel in) {
        mTitle = in.readString();
        mSummary = in.readString();
        mIntent = in.readParcelable(Intent.class.getClassLoader());
        mPendingIntent = in.readParcelable(PendingIntent.class.getClassLoader());
    }

    /**
@@ -61,11 +63,11 @@ public class ScheduleInfo implements Parcelable {
    }

    /**
     * Returns an {@link Intent} which Settings will launch when the user clicks on a schedule
     * preference.
     * Returns a {@link PendingIntent} which Settings will launch when the user clicks on a
     * schedule preference.
     */
    public Intent getIntent() {
        return mIntent;
    public PendingIntent getPendingIntent() {
        return mPendingIntent;
    }

    /**
@@ -74,14 +76,15 @@ public class ScheduleInfo implements Parcelable {
     * @return {@code true} if all member variables are valid.
     */
    public boolean isValid() {
        return !TextUtils.isEmpty(mTitle) && !TextUtils.isEmpty(mSummary) && (mIntent != null);
        return !TextUtils.isEmpty(mTitle) && !TextUtils.isEmpty(mSummary)
                && (mPendingIntent != null);
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(mTitle);
        dest.writeString(mSummary);
        dest.writeParcelable(mIntent, flags);
        dest.writeParcelable(mPendingIntent, flags);
    }

    @Override
@@ -104,7 +107,7 @@ public class ScheduleInfo implements Parcelable {
    @NonNull
    @Override
    public String toString() {
        return "title: " + mTitle + ", summary: " + mSummary + ", intent: " + mIntent;
        return "title: " + mTitle + ", summary: " + mSummary + ", pendingIntent: " + mPendingIntent;
    }

    /**
@@ -113,7 +116,7 @@ public class ScheduleInfo implements Parcelable {
    public static class Builder {
        private String mTitle;
        private String mSummary;
        private Intent mIntent;
        private PendingIntent mPendingIntent;

        /**
         * Sets the title.
@@ -138,13 +141,15 @@ public class ScheduleInfo implements Parcelable {
        }

        /**
         * Sets the {@link Intent}.
         * Sets the {@link PendingIntent}.
         * <p>The {@link PendingIntent} should be created with
         * {@link PendingIntent#getActivity(Context, int, Intent, int)}.
         *
         * @param intent The action when user clicks the preference.
         * @param pendingIntent The pending intent to send when the user clicks the preference.
         * @return This instance.
         */
        public Builder setIntent(@NonNull Intent intent) {
            mIntent = intent;
        public Builder setPendingIntent(@NonNull PendingIntent pendingIntent) {
            mPendingIntent = pendingIntent;
            return this;
        }

+24 −17
Original line number Diff line number Diff line
@@ -17,11 +17,14 @@ package com.android.settingslib.schedulesprovider;

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

import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;

@RunWith(RobolectricTestRunner.class)
public class ScheduleInfoTest {
@@ -29,10 +32,12 @@ public class ScheduleInfoTest {
    private static final String TEST_SUMMARY = "Night Light summary";
    private static final String TEST_EMPTY_SUMMARY = "";

    private final Context mContext = RuntimeEnvironment.application;

    @Test
    public void builder_usedValidArguments_isValid() {
        final Intent intent = createTestIntent();
        final ScheduleInfo info = createTestScheduleInfo(TEST_TITLE, TEST_SUMMARY, intent);
        final PendingIntent pendingIntent = createTestPendingIntent(mContext);
        final ScheduleInfo info = createTestScheduleInfo(TEST_TITLE, TEST_SUMMARY, pendingIntent);

        assertThat(info).isNotNull();
        assertThat(info.isValid()).isTrue();
@@ -40,15 +45,16 @@ public class ScheduleInfoTest {

    @Test
    public void builder_useEmptySummary_isInvalid() {
        final Intent intent = createTestIntent();
        final ScheduleInfo info = createTestScheduleInfo(TEST_TITLE, TEST_EMPTY_SUMMARY, intent);
        final PendingIntent pendingIntent = createTestPendingIntent(mContext);
        final ScheduleInfo info = createTestScheduleInfo(TEST_TITLE, TEST_EMPTY_SUMMARY,
                pendingIntent);

        assertThat(info).isNotNull();
        assertThat(info.isValid()).isFalse();
    }

    @Test
    public void builder_intentIsNull_isInvalid() {
    public void builder_pendingIntentIsNull_isInvalid() {
        final ScheduleInfo info = new ScheduleInfo.Builder()
                .setTitle(TEST_TITLE)
                .setSummary(TEST_SUMMARY)
@@ -60,39 +66,40 @@ public class ScheduleInfoTest {

    @Test
    public void getTitle_setValidTitle_shouldReturnSameCorrectTitle() {
        final Intent intent = createTestIntent();
        final ScheduleInfo info = createTestScheduleInfo(TEST_TITLE, TEST_SUMMARY, intent);
        final PendingIntent pendingIntent = createTestPendingIntent(mContext);
        final ScheduleInfo info = createTestScheduleInfo(TEST_TITLE, TEST_SUMMARY, pendingIntent);

        assertThat(info.getTitle()).isEqualTo(TEST_TITLE);
    }

    @Test
    public void getSummary_setValidSummary_shouldReturnSameCorrectSummary() {
        final Intent intent = createTestIntent();
        final ScheduleInfo info = createTestScheduleInfo(TEST_TITLE, TEST_SUMMARY, intent);
        final PendingIntent pendingIntent = createTestPendingIntent(mContext);
        final ScheduleInfo info = createTestScheduleInfo(TEST_TITLE, TEST_SUMMARY, pendingIntent);

        assertThat(info.getSummary()).isEqualTo(TEST_SUMMARY);
    }

    @Test
    public void getIntent_setValidIntent_shouldReturnSameCorrectIntent() {
        final Intent intent = createTestIntent();
        final ScheduleInfo info = createTestScheduleInfo(TEST_TITLE, TEST_SUMMARY, intent);
    public void getPendingIntent_setValidPendingIntent_shouldReturnSameCorrectIntent() {
        final PendingIntent pendingIntent = createTestPendingIntent(mContext);
        final ScheduleInfo info = createTestScheduleInfo(TEST_TITLE, TEST_SUMMARY, pendingIntent);

        assertThat(info.getIntent()).isEqualTo(intent);
        assertThat(info.getPendingIntent()).isEqualTo(pendingIntent);
    }

    private static Intent createTestIntent() {
        return new Intent("android.settings.NIGHT_DISPLAY_SETTINGS").addCategory(
    private static PendingIntent createTestPendingIntent(Context context) {
        final Intent intent = new Intent("android.settings.NIGHT_DISPLAY_SETTINGS").addCategory(
                Intent.CATEGORY_DEFAULT);
        return PendingIntent.getActivity(context, 0 /* requestCode */, intent, 0 /* flags */);
    }

    private static ScheduleInfo createTestScheduleInfo(String title, String summary,
            Intent intent) {
            PendingIntent pendingIntent) {
        return new ScheduleInfo.Builder()
                .setTitle(title)
                .setSummary(summary)
                .setIntent(intent)
                .setPendingIntent(pendingIntent)
                .build();
    }
}
+36 −28
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ import static com.google.common.truth.Truth.assertThat;

import static org.robolectric.Shadows.shadowOf;

import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;

@@ -27,6 +29,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;

import java.util.ArrayList;

@@ -35,13 +38,16 @@ public class SchedulesProviderTest {
    private static final String INVALID_PACKAGE = "com.android.sunny";
    private static final String VALID_PACKAGE = "com.android.settings";
    private static final String INVALID_METHOD = "queryTestData";

    private final Context mContext = RuntimeEnvironment.application;

    private TestSchedulesProvider mProvider;

    @Before
    public void setUp() {
        mProvider = Robolectric.setupContentProvider(TestSchedulesProvider.class);
        shadowOf(mProvider).setCallingPackage(VALID_PACKAGE);
        mProvider.setScheduleInfos(TestSchedulesProvider.createOneValidScheduleInfo());
        mProvider.setScheduleInfos(TestSchedulesProvider.createOneValidScheduleInfo(mContext));
    }

    @Test
@@ -76,7 +82,7 @@ public class SchedulesProviderTest {

    @Test
    public void call_addTwoValidData_returnScheduleInfoData() {
        mProvider.setScheduleInfos(TestSchedulesProvider.createTwoValidScheduleInfos());
        mProvider.setScheduleInfos(TestSchedulesProvider.createTwoValidScheduleInfos(mContext));
        final Bundle bundle = mProvider.call(SchedulesProvider.METHOD_GENERATE_SCHEDULE_INFO_LIST,
                null /* arg */, null /* extras */);

@@ -89,7 +95,8 @@ public class SchedulesProviderTest {

    @Test
    public void call_addTwoValidDataAndOneInvalidData_returnTwoScheduleInfoData() {
        mProvider.setScheduleInfos(TestSchedulesProvider.createTwoValidAndOneInvalidScheduleInfo());
        mProvider.setScheduleInfos(
                TestSchedulesProvider.createTwoValidAndOneInvalidScheduleInfo(mContext));
        final Bundle bundle = mProvider.call(SchedulesProvider.METHOD_GENERATE_SCHEDULE_INFO_LIST,
                null /* arg */, null /* extras */);

@@ -112,55 +119,56 @@ public class SchedulesProviderTest {
            mScheduleInfos = scheduleInfos;
        }

        private static ArrayList<ScheduleInfo> createOneValidScheduleInfo() {
        private static ArrayList<ScheduleInfo> createOneValidScheduleInfo(Context context) {
            final ArrayList<ScheduleInfo> scheduleInfos = new ArrayList<>();
            final Intent intent = new Intent("android.settings.NIGHT_DISPLAY_SETTINGS").addCategory(
                    Intent.CATEGORY_DEFAULT);
            final ScheduleInfo info = new ScheduleInfo.Builder().setTitle(
                    "Night Light").setSummary("This a sunny test").setIntent(intent).build();

            final ScheduleInfo info = new ScheduleInfo.Builder().setTitle("Night Light").setSummary(
                    "This a sunny test").setPendingIntent(createTestPendingIntent(context,
                    "android.settings.NIGHT_DISPLAY_SETTINGS")).build();
            scheduleInfos.add(info);

            return scheduleInfos;
        }

        private static ArrayList<ScheduleInfo> createTwoValidScheduleInfos() {
        private static ArrayList<ScheduleInfo> createTwoValidScheduleInfos(Context context) {
            final ArrayList<ScheduleInfo> scheduleInfos = new ArrayList<>();
            Intent intent = new Intent("android.settings.NIGHT_DISPLAY_SETTINGS").addCategory(
                    Intent.CATEGORY_DEFAULT);
            ScheduleInfo info = new ScheduleInfo.Builder().setTitle(
                    "Night Light").setSummary("This a sunny test").setIntent(intent).build();
            ScheduleInfo info = new ScheduleInfo.Builder().setTitle("Night Light").setSummary(
                    "This a sunny test").setPendingIntent(createTestPendingIntent(context,
                    "android.settings.NIGHT_DISPLAY_SETTINGS")).build();
            scheduleInfos.add(info);

            intent = new Intent("android.settings.DISPLAY_SETTINGS").addCategory(
                    Intent.CATEGORY_DEFAULT);
            info = new ScheduleInfo.Builder().setTitle("Display").setSummary(
                    "Display summary").setIntent(intent).build();
                    "Display summary").setPendingIntent(
                    createTestPendingIntent(context, "android.settings.DISPLAY_SETTINGS")).build();
            scheduleInfos.add(info);

            return scheduleInfos;
        }

        private static ArrayList<ScheduleInfo> createTwoValidAndOneInvalidScheduleInfo() {
        private static ArrayList<ScheduleInfo> createTwoValidAndOneInvalidScheduleInfo(
                Context context) {
            final ArrayList<ScheduleInfo> scheduleInfos = new ArrayList<>();
            Intent intent = new Intent("android.settings.NIGHT_DISPLAY_SETTINGS").addCategory(
                    Intent.CATEGORY_DEFAULT);
            ScheduleInfo info = new ScheduleInfo.Builder().setTitle(
                    "Night Light").setSummary("This a sunny test").setIntent(intent).build();
            ScheduleInfo info = new ScheduleInfo.Builder().setTitle("Night Light").setSummary(
                    "This a sunny test").setPendingIntent(createTestPendingIntent(context,
                    "android.settings.NIGHT_DISPLAY_SETTINGS")).build();
            scheduleInfos.add(info);

            intent = new Intent("android.settings.DISPLAY_SETTINGS").addCategory(
                    Intent.CATEGORY_DEFAULT);
            info = new ScheduleInfo.Builder().setTitle("Display").setSummary(
                    "Display summary").setIntent(intent).build();
                    "Display summary").setPendingIntent(
                    createTestPendingIntent(context, "android.settings.DISPLAY_SETTINGS")).build();
            scheduleInfos.add(info);

            intent = new Intent("android.settings.DISPLAY_SETTINGS").addCategory(
                    Intent.CATEGORY_DEFAULT);
            info = new ScheduleInfo.Builder().setTitle("").setSummary("Display summary").setIntent(
                    intent).build();
            info = new ScheduleInfo.Builder().setTitle("").setSummary(
                    "Display summary").setPendingIntent(
                    createTestPendingIntent(context, "android.settings.DISPLAY_SETTINGS")).build();
            scheduleInfos.add(info);

            return scheduleInfos;
        }

        private static PendingIntent createTestPendingIntent(Context context, String action) {
            final Intent intent = new Intent(action).addCategory(Intent.CATEGORY_DEFAULT);
            return PendingIntent.getActivity(context, 0 /* requestCode */, intent, 0 /* flags */);
        }
    }
}