Expand SettingsLib ProviderTile to support non-switch type of Preferences

- Added new metadata allowing to set PendingIntent onto a Tile, which will be executed on click;
- Update the rendering logic to render with SwitchPreference only when Tile.hasSwitch() == true.

Test: robotest, manual
Bug: 281517110
Change-Id: I1253029be1e172792679f80be24bd58e368b9e73
This commit is contained in:
Peter Zhang
2023-05-07 23:55:50 +02:00
parent 860002b42c
commit ddb65e569b
6 changed files with 226 additions and 14 deletions

View File

@@ -30,6 +30,7 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.PendingIntent;
import android.app.settings.SettingsEnums;
import android.content.ContentResolver;
import android.content.Context;
@@ -38,6 +39,7 @@ import android.content.pm.ActivityInfo;
import android.content.pm.ProviderInfo;
import android.net.Uri;
import android.os.Bundle;
import android.os.UserHandle;
import android.preference.PreferenceManager.OnActivityResultListener;
import androidx.preference.Preference;
@@ -358,6 +360,36 @@ public class DashboardFragmentTest {
assertThat(pref).isInstanceOf(PrimarySwitchPreference.class);
}
@Test
public void createPreference_isProviderTileWithPendingIntent_returnPreference() {
final ProviderInfo providerInfo = new ProviderInfo();
providerInfo.packageName = "pkg";
providerInfo.name = "provider";
providerInfo.authority = "authority";
final Bundle metaData = new Bundle();
metaData.putString(META_DATA_PREFERENCE_KEYHINT, "injected_tile_key2");
ProviderTile providerTile = new ProviderTile(providerInfo, mDashboardCategory.key,
metaData);
providerTile.pendingIntentMap.put(
UserHandle.CURRENT, PendingIntent.getActivity(mContext, 0, new Intent(), 0));
final Preference pref = mTestFragment.createPreference(providerTile);
assertThat(pref).isInstanceOf(Preference.class);
assertThat(pref).isNotInstanceOf(PrimarySwitchPreference.class);
assertThat(pref).isNotInstanceOf(SwitchPreference.class);
}
@Test
public void createPreference_isProviderTileWithPendingIntentAndSwitch_returnPrimarySwitch() {
mProviderTile.pendingIntentMap.put(
UserHandle.CURRENT, PendingIntent.getActivity(mContext, 0, new Intent(), 0));
final Preference pref = mTestFragment.createPreference(mProviderTile);
assertThat(pref).isInstanceOf(PrimarySwitchPreference.class);
}
@Test
public void onActivityResult_test() {
final int requestCode = 10;