1/*
2 * Copyright (C) 2015 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
17package com.android.messaging.ui.mediapicker;
18
19import android.Manifest;
20import android.content.pm.PackageManager;
21import android.view.LayoutInflater;
22import android.view.View;
23import android.view.ViewGroup;
24
25import com.android.messaging.R;
26import com.android.messaging.datamodel.data.MessagePartData;
27import com.android.messaging.util.OsUtil;
28
29/**
30 * Chooser which allows the user to record audio
31 */
32class AudioMediaChooser extends MediaChooser implements
33        AudioRecordView.HostInterface {
34    private View mEnabledView;
35    private View mMissingPermissionView;
36
37    AudioMediaChooser(final MediaPicker mediaPicker) {
38        super(mediaPicker);
39    }
40
41    @Override
42    public int getSupportedMediaTypes() {
43        return MediaPicker.MEDIA_TYPE_AUDIO;
44    }
45
46    @Override
47    public int getIconResource() {
48        return R.drawable.ic_audio_light;
49    }
50
51    @Override
52    public int getIconDescriptionResource() {
53        return R.string.mediapicker_audioChooserDescription;
54    }
55
56    @Override
57    public void onAudioRecorded(final MessagePartData item) {
58        mMediaPicker.dispatchItemsSelected(item, true);
59    }
60
61    @Override
62    public void setThemeColor(final int color) {
63        if (mView != null) {
64            ((AudioRecordView) mView).setThemeColor(color);
65        }
66    }
67
68    @Override
69    protected View createView(final ViewGroup container) {
70        final LayoutInflater inflater = getLayoutInflater();
71        final AudioRecordView view = (AudioRecordView) inflater.inflate(
72                R.layout.mediapicker_audio_chooser,
73                container /* root */,
74                false /* attachToRoot */);
75        view.setHostInterface(this);
76        view.setThemeColor(mMediaPicker.getConversationThemeColor());
77        mEnabledView = view.findViewById(R.id.mediapicker_enabled);
78        mMissingPermissionView = view.findViewById(R.id.missing_permission_view);
79        return view;
80    }
81
82    @Override
83    int getActionBarTitleResId() {
84        return R.string.mediapicker_audio_title;
85    }
86
87    @Override
88    public boolean isHandlingTouch() {
89        // Whenever the user is in the process of recording audio, we want to allow the user
90        // to move the finger within the panel without interpreting that as dragging the media
91        // picker panel.
92        return ((AudioRecordView) mView).shouldHandleTouch();
93    }
94
95    @Override
96    public void stopTouchHandling() {
97        ((AudioRecordView) mView).stopTouchHandling();
98    }
99
100    @Override
101    public void onPause() {
102        super.onPause();
103        if (mView != null) {
104            ((AudioRecordView) mView).onPause();
105        }
106    }
107
108    @Override
109    protected void setSelected(final boolean selected) {
110        super.setSelected(selected);
111        if (selected && !OsUtil.hasRecordAudioPermission()) {
112            requestRecordAudioPermission();
113        }
114    }
115
116    private void requestRecordAudioPermission() {
117        mMediaPicker.requestPermissions(new String[] { Manifest.permission.RECORD_AUDIO },
118                MediaPicker.RECORD_AUDIO_PERMISSION_REQUEST_CODE);
119    }
120
121    @Override
122    protected void onRequestPermissionsResult(
123            final int requestCode, final String permissions[], final int[] grantResults) {
124        if (requestCode == MediaPicker.RECORD_AUDIO_PERMISSION_REQUEST_CODE) {
125            final boolean permissionGranted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
126            mEnabledView.setVisibility(permissionGranted ? View.VISIBLE : View.GONE);
127            mMissingPermissionView.setVisibility(permissionGranted ? View.GONE : View.VISIBLE);
128        }
129    }
130}
131