blob: bd305fcda3065a726922bb2ad547b8897a3b7849 [file] [log] [blame]
/*
* Copyright (C) 2021 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.car.settings.qc;
import android.content.ContentResolver;
import android.net.Uri;
import android.util.ArrayMap;
import androidx.annotation.VisibleForTesting;
import java.util.Map;
/**
* Registry of valid Quick Control Uris provided by CarSettings.
*/
public class SettingsQCRegistry {
public static final String AUTHORITY = "com.android.car.settings.qc";
// Start Uris
public static final Uri BLUETOOTH_SWITCH_URI = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(AUTHORITY)
.appendPath("bluetooth_switch")
.build();
public static final Uri PAIRED_BLUETOOTH_DEVICES_URI = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(AUTHORITY)
.appendPath("paired_bluetooth_devices")
.build();
public static final Uri WIFI_TILE_URI = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(AUTHORITY)
.appendPath("wifi_tile")
.build();
public static final Uri HOTSPOT_TILE_URI = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(AUTHORITY)
.appendPath("hotspot_tile")
.build();
public static final Uri MOBILE_DATA_TILE_URI = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(AUTHORITY)
.appendPath("mobile_data_tile")
.build();
public static final Uri WIFI_ROW_URI = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(AUTHORITY)
.appendPath("wifi_row")
.build();
public static final Uri HOTSPOT_ROW_URI = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(AUTHORITY)
.appendPath("hotspot_row")
.build();
public static final Uri HOTSPOT_ROW_WITH_ACTION_URI = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(AUTHORITY)
.appendPath("hotspot_row_with_action")
.build();
public static final Uri MOBILE_DATA_ROW_URI = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(AUTHORITY)
.appendPath("mobile_data_row")
.build();
public static final Uri BRIGHTNESS_SLIDER_URI = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(AUTHORITY)
.appendPath("brightness_slider")
.build();
public static final Uri BRIGHTNESS_SLIDER_WITH_ICON_URI = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(AUTHORITY)
.appendPath("brightness_slider_with_icon")
.build();
public static final Uri ADAPTIVE_BRIGHTNESS_SWITCH_URI = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(AUTHORITY)
.appendPath("adaptive_brightness_switch")
.build();
public static final Uri THEME_TOGGLE_URI = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(AUTHORITY)
.appendPath("theme_toggle")
.build();
public static final Uri MEDIA_VOLUME_SLIDER_URI = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(AUTHORITY)
.appendPath("media_volume_slider")
.build();
public static final Uri MEDIA_VOLUME_SLIDER_WITHOUT_ICON_URI = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(AUTHORITY)
.appendPath("media_volume_slider_without_icon")
.build();
public static final Uri CALL_VOLUME_SLIDER_URI = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(AUTHORITY)
.appendPath("call_volume_slider")
.build();
public static final Uri NAVIGATION_VOLUME_SLIDER_URI = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(AUTHORITY)
.appendPath("navigation_volume_slider")
.build();
// End Uris
@VisibleForTesting
static final Map<Uri, Class<? extends SettingsQCItem>> sUriToQC = createUriToQCMap();
private static Map<Uri, Class<? extends SettingsQCItem>> createUriToQCMap() {
Map<Uri, Class<? extends SettingsQCItem>> map = new ArrayMap<>();
map.put(BLUETOOTH_SWITCH_URI, BluetoothSwitch.class);
map.put(PAIRED_BLUETOOTH_DEVICES_URI, PairedBluetoothDevices.class);
map.put(WIFI_TILE_URI, WifiTile.class);
map.put(HOTSPOT_TILE_URI, HotspotTile.class);
map.put(MOBILE_DATA_TILE_URI, MobileDataTile.class);
map.put(WIFI_ROW_URI, WifiRow.class);
map.put(HOTSPOT_ROW_URI, HotspotRow.class);
map.put(HOTSPOT_ROW_WITH_ACTION_URI, HotspotRowWithAction.class);
map.put(MOBILE_DATA_ROW_URI, MobileDataRow.class);
map.put(BRIGHTNESS_SLIDER_URI, BrightnessSlider.class);
map.put(BRIGHTNESS_SLIDER_WITH_ICON_URI, BrightnessSliderWithIcon.class);
map.put(ADAPTIVE_BRIGHTNESS_SWITCH_URI, AdaptiveBrightnessSwitch.class);
map.put(THEME_TOGGLE_URI, ThemeToggle.class);
map.put(MEDIA_VOLUME_SLIDER_URI, MediaVolumeSlider.class);
map.put(MEDIA_VOLUME_SLIDER_WITHOUT_ICON_URI, MediaVolumeSliderWithoutIcon.class);
map.put(CALL_VOLUME_SLIDER_URI, CallVolumeSlider.class);
map.put(NAVIGATION_VOLUME_SLIDER_URI, NavigationVolumeSlider.class);
return map;
}
/**
* Returns the relevant {@link SettingsQCItem} class that corresponds to the provided uri.
*/
public static Class<? extends SettingsQCItem> getQCClassByUri(Uri uri) {
return sUriToQC.get(removeParameterFromUri(uri));
}
/**
* Returns a uri without its parameters (or null if the provided uri is null).
*/
public static Uri removeParameterFromUri(Uri uri) {
return uri != null ? uri.buildUpon().clearQuery().build() : null;
}
/**
* Returns {@code true} if the provided uri is a valid QCItem Uri handled by
* {@link SettingsQCRegistry}.
*/
public static boolean isValidUri(Uri uri) {
return sUriToQC.containsKey(removeParameterFromUri(uri));
}
/**
* Returns {@code true} if the provided action is a valid intent action handled by
* {@link SettingsQCRegistry}.
*/
public static boolean isValidAction(String action) {
return isValidUri(Uri.parse(action));
}
}