/**
* **************************************************************************
* PickTimeFragment.java
* ****************************************************************************
* Copyright © 2015 VLC authors and VideoLAN
* Author: Geoffrey Métais
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
* ***************************************************************************
*/
package org.videolan.vlc.gui.dialogs;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
import org.videolan.vlc.PlaybackService;
import org.videolan.vlc.R;
import org.videolan.vlc.gui.PlaybackServiceFragment;
import org.videolan.vlc.util.Util;
public abstract class PickTimeFragment extends DialogFragment implements View.OnClickListener, View.OnFocusChangeListener,
PlaybackService.Client.Callback {
public final static String TAG = "VLC/PickTimeFragment";
public static final int ACTION_JUMP_TO_TIME = 0;
public static final int ACTION_SLEEP_TIMER = 1;
protected int mTextColor;
protected static long MILLIS_IN_MICROS = 1000;
protected static long SECONDS_IN_MICROS = 1000 * MILLIS_IN_MICROS;
protected static long MINUTES_IN_MICROS = 60 * SECONDS_IN_MICROS;
protected static long HOURS_IN_MICROS = 60 * MINUTES_IN_MICROS;
protected String mHours = "", mMinutes = "", mSeconds = "", mFormatTime, mRawTime = "";
protected int mMaxTimeSize = 6;
protected TextView mTVTimeToJump;
protected PlaybackService mService;
public PickTimeFragment(){
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialog_time_picker, container);
mTVTimeToJump = (TextView) view.findViewById(R.id.tim_pic_timetojump);
((TextView)view.findViewById(R.id.tim_pic_title)).setText(getTitle());
((ImageView) view.findViewById(R.id.tim_pic_icon)).setImageResource(Util.getResourceFromAttribute(getActivity(), getIcon()));
view.findViewById(R.id.tim_pic_1).setOnClickListener(this);
view.findViewById(R.id.tim_pic_1).setOnFocusChangeListener(this);
view.findViewById(R.id.tim_pic_2).setOnClickListener(this);
view.findViewById(R.id.tim_pic_2).setOnFocusChangeListener(this);
view.findViewById(R.id.tim_pic_3).setOnClickListener(this);
view.findViewById(R.id.tim_pic_3).setOnFocusChangeListener(this);
view.findViewById(R.id.tim_pic_4).setOnClickListener(this);
view.findViewById(R.id.tim_pic_4).setOnFocusChangeListener(this);
view.findViewById(R.id.tim_pic_5).setOnClickListener(this);
view.findViewById(R.id.tim_pic_5).setOnFocusChangeListener(this);
view.findViewById(R.id.tim_pic_6).setOnClickListener(this);
view.findViewById(R.id.tim_pic_6).setOnFocusChangeListener(this);
view.findViewById(R.id.tim_pic_7).setOnClickListener(this);
view.findViewById(R.id.tim_pic_7).setOnFocusChangeListener(this);
view.findViewById(R.id.tim_pic_8).setOnClickListener(this);
view.findViewById(R.id.tim_pic_8).setOnFocusChangeListener(this);
view.findViewById(R.id.tim_pic_9).setOnClickListener(this);
view.findViewById(R.id.tim_pic_9).setOnFocusChangeListener(this);
view.findViewById(R.id.tim_pic_0).setOnClickListener(this);
view.findViewById(R.id.tim_pic_0).setOnFocusChangeListener(this);
view.findViewById(R.id.tim_pic_00).setOnClickListener(this);
view.findViewById(R.id.tim_pic_00).setOnFocusChangeListener(this);
view.findViewById(R.id.tim_pic_30).setOnClickListener(this);
view.findViewById(R.id.tim_pic_30).setOnFocusChangeListener(this);
view.findViewById(R.id.tim_pic_cancel).setOnClickListener(this);
view.findViewById(R.id.tim_pic_cancel).setOnFocusChangeListener(this);
view.findViewById(R.id.tim_pic_delete).setOnClickListener(this);
view.findViewById(R.id.tim_pic_delete).setOnFocusChangeListener(this);
view.findViewById(R.id.tim_pic_ok).setOnClickListener(this);
view.findViewById(R.id.tim_pic_ok).setOnFocusChangeListener(this);
mTextColor = mTVTimeToJump.getCurrentTextColor();
getDialog().setCancelable(true);
getDialog().setCanceledOnTouchOutside(true);
if (getDialog() != null) {
int dialogWidth = getResources().getDimensionPixelSize(R.dimen.dialog_time_picker_width);
int dialogHeight = ViewGroup.LayoutParams.WRAP_CONTENT;
getDialog().getWindow().setLayout(dialogWidth, dialogHeight);
getDialog().getWindow().setBackgroundDrawableResource(Util.getResourceFromAttribute(getActivity(), R.attr.rounded_bg));
}
return view;
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
((TextView)v).setTextColor(hasFocus ? getResources().getColor(R.color.orange500) : mTextColor);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.tim_pic_1:
updateValue("1");
break;
case R.id.tim_pic_2:
updateValue("2");
break;
case R.id.tim_pic_3:
updateValue("3");
break;
case R.id.tim_pic_4:
updateValue("4");
break;
case R.id.tim_pic_5:
updateValue("5");
break;
case R.id.tim_pic_6:
updateValue("6");
break;
case R.id.tim_pic_7:
updateValue("7");
break;
case R.id.tim_pic_8:
updateValue("8");
break;
case R.id.tim_pic_9:
updateValue("9");
break;
case R.id.tim_pic_0:
updateValue("0");
break;
case R.id.tim_pic_00:
updateValue("00");
break;
case R.id.tim_pic_30:
updateValue("30");
break;
case R.id.tim_pic_cancel:
dismiss();
break;
case R.id.tim_pic_delete:
deleteLastNumber();
break;
case R.id.tim_pic_ok:
executeAction();
break;
}
}
private String getLastNumbers(String rawTime){
if (rawTime.length() == 0)
return "";
return (rawTime.length() == 1) ?
rawTime:
rawTime.substring(rawTime.length()-2);
}
private String removeLastNumbers(String rawTime){
return rawTime.length() <= 1 ? "" : rawTime.substring(0, rawTime.length()-2);
}
private void deleteLastNumber(){
if (mRawTime != "") {
mRawTime = mRawTime.substring(0, mRawTime.length()-1);
updateValue("");
}
}
private void updateValue(String value) {
if (mRawTime.length() >= mMaxTimeSize)
return;
mRawTime = mRawTime.concat(value);
String tempRawTime = mRawTime;
mFormatTime = "";
if (mMaxTimeSize > 4) {
mSeconds = getLastNumbers(tempRawTime);
if (mSeconds != "")
mFormatTime = mSeconds + "s";
tempRawTime = removeLastNumbers(tempRawTime);
} else
mSeconds = "";
mMinutes = getLastNumbers(tempRawTime);
if (mMinutes != "")
mFormatTime = mMinutes + "m " + mFormatTime;
tempRawTime = removeLastNumbers(tempRawTime);
mHours = getLastNumbers(tempRawTime);
if (mHours != "")
mFormatTime = mHours + "h " + mFormatTime;
mTVTimeToJump.setText(mFormatTime);
}
@Override
public void onStart() {
super.onStart();
PlaybackServiceFragment.registerPlaybackService(this, this);
}
@Override
public void onStop() {
super.onStop();
PlaybackServiceFragment.unregisterPlaybackService(this, this);
}
@Override
public void onConnected(PlaybackService service) {
mService = service;
}
@Override
public void onDisconnected() {
mService = null;
}
abstract protected int getTitle();
abstract protected int getIcon();
abstract protected void executeAction();
}