Merge "Hide SettingsSlice provider" into pi-dev

This commit is contained in:
TreeHugger Robot
2018-08-16 21:23:17 +00:00
committed by Android (Google) Code Review
6 changed files with 127 additions and 14 deletions

View File

@@ -3314,10 +3314,15 @@
</provider> </provider>
<receiver <receiver
android:name=".slices.SliceBroadcastReceiver" > android:name=".slices.SliceBroadcastReceiver"
<intent-filter> android:exported="false">
<action android:name="com.android.settings.slice.action.WIFI_CHANGED"/> </receiver>
</intent-filter>
<receiver
android:name=".slices.SliceRelayReceiver"
android:permission="android.permission.MANAGE_SLICE_PERMISSIONS"
android:exported="true">
</receiver> </receiver>
<!-- Couldn't be triggered from outside of settings. Statsd can trigger it because we send <!-- Couldn't be triggered from outside of settings. Statsd can trigger it because we send

View File

@@ -382,7 +382,7 @@ public class SettingsSliceProvider extends SliceProvider {
void registerIntentToUri(IntentFilter intentFilter, Uri sliceUri) { void registerIntentToUri(IntentFilter intentFilter, Uri sliceUri) {
Log.d(TAG, "Registering Uri for broadcast relay: " + sliceUri); Log.d(TAG, "Registering Uri for broadcast relay: " + sliceUri);
mRegisteredUris.add(sliceUri); mRegisteredUris.add(sliceUri);
SliceBroadcastRelay.registerReceiver(getContext(), sliceUri, SliceBroadcastReceiver.class, SliceBroadcastRelay.registerReceiver(getContext(), sliceUri, SliceRelayReceiver.class,
intentFilter); intentFilter);
} }

View File

@@ -44,7 +44,6 @@ import com.android.settings.core.TogglePreferenceController;
import com.android.settings.notification.ZenModeSliceBuilder; import com.android.settings.notification.ZenModeSliceBuilder;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settings.wifi.WifiSliceBuilder; import com.android.settings.wifi.WifiSliceBuilder;
import com.android.settingslib.SliceBroadcastRelay;
/** /**
* Responds to actions performed on slices and notifies slices of updates in state changes. * Responds to actions performed on slices and notifies slices of updates in state changes.
@@ -84,12 +83,6 @@ public class SliceBroadcastReceiver extends BroadcastReceiver {
case ACTION_ZEN_MODE_SLICE_CHANGED: case ACTION_ZEN_MODE_SLICE_CHANGED:
ZenModeSliceBuilder.handleUriChange(context, intent); ZenModeSliceBuilder.handleUriChange(context, intent);
break; break;
default:
final String uriString = intent.getStringExtra(SliceBroadcastRelay.EXTRA_URI);
if (!TextUtils.isEmpty(uriString)) {
final Uri uri = Uri.parse(uriString);
context.getContentResolver().notifyChange(uri, null /* observer */);
}
} }
} }

View File

@@ -0,0 +1,39 @@
/*
* Copyright (C) 2018 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 com.android.settings.slices;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.text.TextUtils;
import com.android.settingslib.SliceBroadcastRelay;
/**
* Receives broadcasts to notify that Settings Slices are potentially stale.
*/
public class SliceRelayReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
final String uriString = intent.getStringExtra(SliceBroadcastRelay.EXTRA_URI);
if (!TextUtils.isEmpty(uriString)) {
final Uri uri = Uri.parse(uriString);
context.getContentResolver().notifyChange(uri, null /* observer */);
}
}
}

View File

@@ -159,8 +159,12 @@ public class SliceBroadcastReceiverTest {
assertThat(fakeToggleController.isChecked()).isFalse(); assertThat(fakeToggleController.isChecked()).isFalse();
final Uri expectedUri = SliceBuilderUtils.getUri( final Uri expectedUri = new Uri.Builder()
SettingsSlicesContract.PATH_SETTING_ACTION + "/" + key, false); .scheme(ContentResolver.SCHEME_CONTENT)
.authority(SettingsSliceProvider.SLICE_AUTHORITY)
.appendPath(SettingsSlicesContract.PATH_SETTING_ACTION)
.appendPath(key)
.build();
verify(resolver).notifyChange(eq(expectedUri), eq(null)); verify(resolver).notifyChange(eq(expectedUri), eq(null));
} }

View File

@@ -0,0 +1,72 @@
/*
* Copyright (C) 2018 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 com.android.settings.slices;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.provider.SettingsSlicesContract;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.SliceBroadcastRelay;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment;
@RunWith(SettingsRobolectricTestRunner.class)
public class SliceRelayReceiverTest {
private Context mContext;
private SliceRelayReceiver mSliceRelayReceiver;
@Before
public void setUp() {
mContext = spy(RuntimeEnvironment.application);
mSliceRelayReceiver = new SliceRelayReceiver();
}
@Test
public void onReceive_extraUri_notifiesChangeOnUri() {
// Monitor the ContentResolver
final ContentResolver resolver = spy(mContext.getContentResolver());
doReturn(resolver).when(mContext).getContentResolver();
final Uri uri = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(SettingsSlicesContract.AUTHORITY)
.appendPath("path")
.build();
final Intent intent = new Intent();
intent.putExtra(SliceBroadcastRelay.EXTRA_URI, uri.toString());
mSliceRelayReceiver.onReceive(mContext, intent);
verify(resolver).notifyChange(eq(uri), any());
}
}