1d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/*
2d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Copyright (C) 2015 The Android Open Source Project
3d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd *
4d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Licensed under the Apache License, Version 2.0 (the "License");
5d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * you may not use this file except in compliance with the License.
6d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * You may obtain a copy of the License at
7d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd *
8d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd *      http://www.apache.org/licenses/LICENSE-2.0
9d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd *
10d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Unless required by applicable law or agreed to in writing, software
11d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * distributed under the License is distributed on an "AS IS" BASIS,
12d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * See the License for the specific language governing permissions and
14d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * limitations under the License.
15d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */
16d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
17d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpackage com.android.messaging.ui.mediapicker;
18d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
19d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.Manifest;
20d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.content.pm.PackageManager;
21d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.view.LayoutInflater;
22d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.view.View;
23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.view.ViewGroup;
24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.R;
26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.MessagePartData;
27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.OsUtil;
28d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
29d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/**
30d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Chooser which allows the user to record audio
31d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */
32d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddclass AudioMediaChooser extends MediaChooser implements
33d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        AudioRecordView.HostInterface {
34d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    private View mEnabledView;
35d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    private View mMissingPermissionView;
36d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
37d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    AudioMediaChooser(final MediaPicker mediaPicker) {
38d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        super(mediaPicker);
39d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
40d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
41d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    @Override
42d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public int getSupportedMediaTypes() {
43d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        return MediaPicker.MEDIA_TYPE_AUDIO;
44d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
45d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
46d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    @Override
47d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public int getIconResource() {
48d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        return R.drawable.ic_audio_light;
49d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
50d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
51d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    @Override
52d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public int getIconDescriptionResource() {
53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        return R.string.mediapicker_audioChooserDescription;
54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    @Override
57d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public void onAudioRecorded(final MessagePartData item) {
58d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        mMediaPicker.dispatchItemsSelected(item, true);
59d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
60d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
61d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    @Override
62d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public void setThemeColor(final int color) {
63d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        if (mView != null) {
64d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            ((AudioRecordView) mView).setThemeColor(color);
65d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        }
66d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
67d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
68d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    @Override
69d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    protected View createView(final ViewGroup container) {
70d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        final LayoutInflater inflater = getLayoutInflater();
71d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        final AudioRecordView view = (AudioRecordView) inflater.inflate(
72d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd                R.layout.mediapicker_audio_chooser,
73d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd                container /* root */,
74d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd                false /* attachToRoot */);
75d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        view.setHostInterface(this);
76d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        view.setThemeColor(mMediaPicker.getConversationThemeColor());
77d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        mEnabledView = view.findViewById(R.id.mediapicker_enabled);
78d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        mMissingPermissionView = view.findViewById(R.id.missing_permission_view);
79d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        return view;
80d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
81d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
82d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    @Override
83d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    int getActionBarTitleResId() {
84d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        return R.string.mediapicker_audio_title;
85d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
86d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
87d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    @Override
88d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public boolean isHandlingTouch() {
89d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        // Whenever the user is in the process of recording audio, we want to allow the user
90d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        // to move the finger within the panel without interpreting that as dragging the media
91d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        // picker panel.
92d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        return ((AudioRecordView) mView).shouldHandleTouch();
93d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
94d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
95d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    @Override
96d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public void stopTouchHandling() {
97d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        ((AudioRecordView) mView).stopTouchHandling();
98d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
99d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
100d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    @Override
101d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public void onPause() {
102d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        super.onPause();
103d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        if (mView != null) {
104d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            ((AudioRecordView) mView).onPause();
105d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        }
106d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
107d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
108d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    @Override
109d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    protected void setSelected(final boolean selected) {
110d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        super.setSelected(selected);
111d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        if (selected && !OsUtil.hasRecordAudioPermission()) {
112d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            requestRecordAudioPermission();
113d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        }
114d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
115d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
116d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    private void requestRecordAudioPermission() {
117d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        mMediaPicker.requestPermissions(new String[] { Manifest.permission.RECORD_AUDIO },
118d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd                MediaPicker.RECORD_AUDIO_PERMISSION_REQUEST_CODE);
119d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
120d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
121d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    @Override
122d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    protected void onRequestPermissionsResult(
123d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            final int requestCode, final String permissions[], final int[] grantResults) {
124d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        if (requestCode == MediaPicker.RECORD_AUDIO_PERMISSION_REQUEST_CODE) {
125d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            final boolean permissionGranted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
126d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            mEnabledView.setVisibility(permissionGranted ? View.VISIBLE : View.GONE);
127d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            mMissingPermissionView.setVisibility(permissionGranted ? View.GONE : View.VISIBLE);
128d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        }
129d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
130d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd}
131