summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Sunny Shao <sunnyshao@google.com> 2020-03-04 21:18:21 +0800
committer Sunny Shao <sunnyshao@google.com> 2020-03-05 17:04:27 +0800
commit9844eae18d5e58d2d3f1ef724f62421111ab5695 (patch)
treedad9ee25d0fca1274634c441dbb20779c73a44b5
parentd071b2526ee92640587af07bbc5562ea6e49c396 (diff)
Replace intent with pendingIntent in the ScheduleInfo
The pendingIntent can launch the management UI when users click on the item (even the private activity in theschedules-provided app). Fixes: 150754969 Test: make RunSettingsLibRoboTests -j Change-Id: I23a95c37993f61d4a3dfcd70b11225b61633f7a6
-rw-r--r--packages/SettingsLib/SchedulesProvider/src/com/android/settingslib/schedulesprovider/ScheduleInfo.java39
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/schedulesprovider/ScheduleInfoTest.java41
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/schedulesprovider/SchedulesProviderTest.java64
3 files changed, 82 insertions, 62 deletions
diff --git a/packages/SettingsLib/SchedulesProvider/src/com/android/settingslib/schedulesprovider/ScheduleInfo.java b/packages/SettingsLib/SchedulesProvider/src/com/android/settingslib/schedulesprovider/ScheduleInfo.java
index 26bcd54930b6..bd9dc4ff1e3c 100644
--- a/packages/SettingsLib/SchedulesProvider/src/com/android/settingslib/schedulesprovider/ScheduleInfo.java
+++ b/packages/SettingsLib/SchedulesProvider/src/com/android/settingslib/schedulesprovider/ScheduleInfo.java
@@ -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;
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/schedulesprovider/ScheduleInfoTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/schedulesprovider/ScheduleInfoTest.java
index 5ec89eddda6e..b4b910d21da8 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/schedulesprovider/ScheduleInfoTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/schedulesprovider/ScheduleInfoTest.java
@@ -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();
}
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/schedulesprovider/SchedulesProviderTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/schedulesprovider/SchedulesProviderTest.java
index eb2e8e055378..6b92082b1103 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/schedulesprovider/SchedulesProviderTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/schedulesprovider/SchedulesProviderTest.java
@@ -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 */);
+ }
}
}