1 /* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settings.panel; 18 19 import static androidx.lifecycle.Lifecycle.Event.ON_PAUSE; 20 import static androidx.lifecycle.Lifecycle.Event.ON_RESUME; 21 22 import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_INDICATOR_SLICE_URI; 23 import static com.android.settings.slices.CustomSliceRegistry.REMOTE_MEDIA_SLICE_URI; 24 import static com.android.settings.slices.CustomSliceRegistry.VOLUME_ALARM_URI; 25 import static com.android.settings.slices.CustomSliceRegistry.VOLUME_CALL_URI; 26 import static com.android.settings.slices.CustomSliceRegistry.VOLUME_MEDIA_URI; 27 import static com.android.settings.slices.CustomSliceRegistry.VOLUME_RINGER_URI; 28 29 import android.app.settings.SettingsEnums; 30 import android.content.BroadcastReceiver; 31 import android.content.Context; 32 import android.content.Intent; 33 import android.content.IntentFilter; 34 import android.net.Uri; 35 import android.provider.Settings; 36 37 import androidx.lifecycle.LifecycleObserver; 38 import androidx.lifecycle.OnLifecycleEvent; 39 40 import com.android.settings.R; 41 import com.android.settingslib.media.MediaOutputConstants; 42 43 import java.util.ArrayList; 44 import java.util.List; 45 46 /** 47 * Panel data class for Volume settings. 48 */ 49 public class VolumePanel implements PanelContent, LifecycleObserver { 50 51 private final Context mContext; 52 53 private PanelContentCallback mCallback; 54 55 private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 56 @Override 57 public void onReceive(Context context, Intent intent) { 58 if (MediaOutputConstants.ACTION_CLOSE_PANEL.equals(intent.getAction())) { 59 mCallback.forceClose(); 60 } 61 } 62 }; 63 create(Context context)64 public static VolumePanel create(Context context) { 65 return new VolumePanel(context); 66 } 67 VolumePanel(Context context)68 private VolumePanel(Context context) { 69 mContext = context.getApplicationContext(); 70 } 71 72 /** Invoked when the panel is resumed. */ 73 @OnLifecycleEvent(ON_RESUME) onResume()74 public void onResume() { 75 final IntentFilter filter = new IntentFilter(); 76 filter.addAction(MediaOutputConstants.ACTION_CLOSE_PANEL); 77 mContext.registerReceiver(mReceiver, filter); 78 } 79 80 /** Invoked when the panel is paused. */ 81 @OnLifecycleEvent(ON_PAUSE) onPause()82 public void onPause() { 83 mContext.unregisterReceiver(mReceiver); 84 } 85 86 @Override getTitle()87 public CharSequence getTitle() { 88 return mContext.getText(R.string.sound_settings); 89 } 90 91 @Override getSlices()92 public List<Uri> getSlices() { 93 final List<Uri> uris = new ArrayList<>(); 94 95 uris.add(REMOTE_MEDIA_SLICE_URI); 96 uris.add(VOLUME_MEDIA_URI); 97 uris.add(MEDIA_OUTPUT_INDICATOR_SLICE_URI); 98 uris.add(VOLUME_CALL_URI); 99 uris.add(VOLUME_RINGER_URI); 100 uris.add(VOLUME_ALARM_URI); 101 return uris; 102 } 103 104 @Override getSeeMoreIntent()105 public Intent getSeeMoreIntent() { 106 return new Intent(Settings.ACTION_SOUND_SETTINGS).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 107 } 108 109 @Override getMetricsCategory()110 public int getMetricsCategory() { 111 return SettingsEnums.PANEL_VOLUME; 112 } 113 114 @Override getViewType()115 public int getViewType() { 116 return PanelContent.VIEW_TYPE_SLIDER; 117 } 118 119 @Override registerCallback(PanelContentCallback callback)120 public void registerCallback(PanelContentCallback callback) { 121 mCallback = callback; 122 } 123 }