Java tutorial
/* * Copyright (C) 2016 Claymain Twinkle. All rights reserved. * * 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 org.kesar.lazy.lazychat.presentation.module.chat; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; import org.kesar.lazy.im.utils.VoiceRecorder; import org.kesar.lazy.lazychat.R; import java.io.Serializable; import butterknife.BindView; import butterknife.ButterKnife; /** * ? * Created by chenqitian on 2016/12/19. */ public class VoiceVolumeDialog extends DialogFragment implements VoiceRecorder.VoiceRecorderListener { private static final int[] volumesPics = { R.drawable.v1, R.drawable.v2, R.drawable.v3, R.drawable.v4, R.drawable.v5, R.drawable.v6, R.drawable.v7 }; private static final String KEY_USERID = "userId"; @BindView(R.id.mIvRecorder) ImageView mIvRecorder; @BindView(R.id.mIvVoice) ImageView mIvVoice; @BindView(R.id.mIvCancel) ImageView mIvCancel; @BindView(R.id.mIvShort) ImageView mIvShort; @BindView(R.id.mRLShowImage) RelativeLayout mRLShowImage; @BindView(R.id.mTvMessage) TextView mTvMessage; @BindView(R.id.mProgressBar) ProgressBar mProgressBar; private VoiceRecorder voiceRecorder; public final static int STATE_LOADING = 0; public final static int STATE_RECORDING = 1; public final static int STATE_CANCEL = 2; public final static int STATE_TOO_SHORT = 3; private int mState; private VoiceMessageListener mListener; public static VoiceVolumeDialog newInstance(String userId, VoiceMessageListener listener) { Bundle args = new Bundle(); args.putString(KEY_USERID, userId); args.putSerializable(VoiceMessageListener.class.getName(), listener); VoiceVolumeDialog fragment = new VoiceVolumeDialog(); fragment.setArguments(args); return fragment; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); int style = DialogFragment.STYLE_NO_FRAME; setStyle(style, 0); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View layoutView = inflater.inflate(R.layout.fragment_dialog_voice_volume, container, false); ButterKnife.bind(this, layoutView); String userId = getArguments().getString(KEY_USERID); mListener = (VoiceMessageListener) getArguments().getSerializable(VoiceMessageListener.class.getName()); showLoading(); voiceRecorder = new VoiceRecorder(this); voiceRecorder.startRecording(userId, getContext()); return layoutView; } @Override public void onDestroy() { super.onDestroy(); } public void show(FragmentManager manager) { show(manager, "VoiceVolumeDialog"); } public void showLoading() { mState = STATE_LOADING; mProgressBar.setVisibility(View.VISIBLE); mIvRecorder.setVisibility(View.GONE); mIvVoice.setVisibility(View.GONE); mIvCancel.setVisibility(View.GONE); mIvShort.setVisibility(View.GONE); mTvMessage.setVisibility(View.GONE); } public void showVolume() { mState = STATE_RECORDING; mIvRecorder.setVisibility(View.VISIBLE); mIvVoice.setVisibility(View.VISIBLE); mTvMessage.setVisibility(View.VISIBLE); mTvMessage.setText(R.string.finger_slide_cancel_sending); mIvCancel.setVisibility(View.GONE); mIvShort.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE); } public void showCancel() { mState = STATE_CANCEL; mIvCancel.setVisibility(View.VISIBLE); mTvMessage.setVisibility(View.VISIBLE); mTvMessage.setText(R.string.loosen_the_finger_cancel_sending); mIvRecorder.setVisibility(View.GONE); mIvVoice.setVisibility(View.GONE); mIvShort.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE); } public void showShort() { mState = STATE_TOO_SHORT; mIvShort.setVisibility(View.VISIBLE); mTvMessage.setVisibility(View.VISIBLE); mTvMessage.setText(R.string.record_too_short); mIvRecorder.setVisibility(View.GONE); mIvVoice.setVisibility(View.GONE); mIvCancel.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE); } public int getState() { return mState; } private void changeVolume(int volume) { if (mState == STATE_RECORDING) { int index = volume % 7; index = index < 0 ? 0 : (index > 7 ? 6 : index); mIvVoice.setImageResource(volumesPics[index]); } } @Override public void dismiss() { voiceRecorder.stopRecoding(); super.dismiss(); } @Override public void onPrepareSuccess() { showVolume(); } @Override public void onShowVolume(int volume) { changeVolume(volume); } @Override public void onRecordSuccess(String voiceFilePath, int seconds) { if (mListener != null) { mListener.onRecordSuccess(voiceFilePath, seconds); } } @Override public void onRecordTooShort() { showShort(); voiceRecorder.discardRecording(); } public interface VoiceMessageListener extends Serializable { void onRecordSuccess(String voiceFilePath, int seconds); } }