| /* |
| * Copyright (C) 2015 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.systemui.volume; |
| |
| import android.content.Context; |
| import android.content.Intent; |
| import android.content.res.Configuration; |
| import android.media.AudioManager; |
| import android.media.VolumePolicy; |
| import android.os.Bundle; |
| import android.os.Handler; |
| import android.provider.Settings; |
| import android.view.WindowManager; |
| |
| import com.android.systemui.SystemUI; |
| import com.android.systemui.keyguard.KeyguardViewMediator; |
| import com.android.systemui.qs.tiles.DndTile; |
| import com.android.systemui.statusbar.phone.PhoneStatusBar; |
| import com.android.systemui.statusbar.policy.ZenModeController; |
| |
| import java.io.FileDescriptor; |
| import java.io.PrintWriter; |
| |
| /** |
| * Implementation of VolumeComponent backed by the new volume dialog. |
| */ |
| public class VolumeDialogComponent implements VolumeComponent { |
| private final SystemUI mSysui; |
| private final Context mContext; |
| private final VolumeDialogController mController; |
| private final ZenModeController mZenModeController; |
| private final VolumeDialog mDialog; |
| private final VolumePolicy mVolumePolicy = new VolumePolicy( |
| true, // volumeDownToEnterSilent |
| true, // volumeUpToExitSilent |
| true, // doNotDisturbWhenSilent |
| 400 // vibrateToSilentDebounce |
| ); |
| |
| public VolumeDialogComponent(SystemUI sysui, Context context, Handler handler, |
| ZenModeController zen) { |
| mSysui = sysui; |
| mContext = context; |
| mController = new VolumeDialogController(context, null) { |
| @Override |
| protected void onUserActivityW() { |
| sendUserActivity(); |
| } |
| }; |
| mZenModeController = zen; |
| mDialog = new VolumeDialog(context, WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY, |
| mController, zen, mVolumeDialogCallback); |
| applyConfiguration(); |
| } |
| |
| private void sendUserActivity() { |
| final KeyguardViewMediator kvm = mSysui.getComponent(KeyguardViewMediator.class); |
| if (kvm != null) { |
| kvm.userActivity(); |
| } |
| } |
| |
| private void applyConfiguration() { |
| mDialog.setStreamImportant(AudioManager.STREAM_ALARM, true); |
| mDialog.setStreamImportant(AudioManager.STREAM_SYSTEM, false); |
| mDialog.setShowHeaders(false); |
| mDialog.setAutomute(true); |
| mDialog.setSilentMode(false); |
| mController.setVolumePolicy(mVolumePolicy); |
| mController.showDndTile(true); |
| } |
| |
| @Override |
| public ZenModeController getZenController() { |
| return mZenModeController; |
| } |
| |
| @Override |
| public void onConfigurationChanged(Configuration newConfig) { |
| // noop |
| } |
| |
| @Override |
| public void dismissNow() { |
| mController.dismiss(); |
| } |
| |
| @Override |
| public void dispatchDemoCommand(String command, Bundle args) { |
| // noop |
| } |
| |
| @Override |
| public void register() { |
| mController.register(); |
| DndTile.setCombinedIcon(mContext, true); |
| } |
| |
| @Override |
| public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { |
| mController.dump(fd, pw, args); |
| mDialog.dump(pw); |
| } |
| |
| private void startSettings(Intent intent) { |
| mSysui.getComponent(PhoneStatusBar.class).startActivityDismissingKeyguard(intent, |
| true /* onlyProvisioned */, true /* dismissShade */); |
| } |
| |
| private final VolumeDialog.Callback mVolumeDialogCallback = new VolumeDialog.Callback() { |
| @Override |
| public void onSettingsClicked() { |
| startSettings(new Intent(Settings.ACTION_NOTIFICATION_SETTINGS)); |
| } |
| |
| @Override |
| public void onZenSettingsClicked() { |
| startSettings(ZenModePanel.ZEN_SETTINGS); |
| } |
| |
| @Override |
| public void onZenPrioritySettingsClicked() { |
| startSettings(ZenModePanel.ZEN_PRIORITY_SETTINGS); |
| } |
| }; |
| |
| } |