/*
The contents of this file are subject to the Mozilla Public License
Version 1.1 (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.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is collection of files collectively known as Open Camera.
The Initial Developer of the Original Code is Almalence Inc.
Portions created by Initial Developer are Copyright (C) 2013
by Almalence Inc. All Rights Reserved.
*/
/* <!-- +++
package com.almalence.opencam_plus.ui;
+++ --> */
// <!-- -+-
package com.almalence.opencam.ui;
//-+- -->
import java.util.ArrayList;
import java.util.List;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Build;
import android.preference.PreferenceManager;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.NumberPicker;
import android.widget.RelativeLayout;
import android.widget.Switch;
import android.widget.TextView;
import com.almalence.ui.RotateImageView;
//<!-- -+-
import com.almalence.opencam.MainScreen;
import com.almalence.opencam.PluginManager;
import com.almalence.opencam.PluginType;
import com.almalence.opencam.R;
//-+- -->
/* <!-- +++
import com.almalence.opencam_plus.MainScreen;
import com.almalence.opencam_plus.PluginManager;
import com.almalence.opencam_plus.PluginType;
import com.almalence.opencam_plus.R;
+++ --> */
public class SelfTimerAndPhotoTimeLapse
{
private TextView timeLapseCount = null;
private RotateImageView timeLapseButton = null;
private SelfTimerAndTimeLapseDialog dialog = null;
boolean swTimerChecked = false;
boolean swTimeLapseChecked = false;
int timeLapseInterval;
int timeLapseMeasurementVal;
String[] stringTimerInterval = { "3", "5", "10", "15", "30", "60" };
String[] stringTimelapseMeasurement = { "seconds", "minutes", "hours", "days" };
CheckBox flashCheckbox;
CheckBox soundCheckbox;
NumberPicker npTimeLapse;
NumberPicker npTimeLapseMeasurment;
NumberPicker npTimer;
public void selfTimerInitDialog()
{
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(MainScreen.getMainContext());
int interval = prefs.getInt(MainScreen.sDelayedCaptureIntervalPref, 0);
swTimerChecked = prefs.getBoolean(MainScreen.sSWCheckedPref, false);
npTimer = (NumberPicker) dialog.findViewById(R.id.numberPicker1);
npTimer.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
npTimer.setDisplayedValues(stringTimerInterval);
npTimer.setMaxValue(5);
npTimer.setMinValue(0);
// Fix for Acer Liquid E2 Duo.
if (!Build.MODEL.equals("V370")) {
npTimer.setValue(interval);
}
npTimer.setWrapSelectorWheel(false);
flashCheckbox = (CheckBox) dialog.findViewById(R.id.flashCheckbox);
boolean flash = prefs.getBoolean(MainScreen.sDelayedFlashPref, false);
flashCheckbox.setChecked(flash);
soundCheckbox = (CheckBox) dialog.findViewById(R.id.soundCheckbox);
boolean sound = prefs.getBoolean(MainScreen.sDelayedSoundPref, false);
soundCheckbox.setChecked(sound);
final Switch sw = (Switch) dialog.findViewById(R.id.selftimer_switcher);
// disable/enable controls in dialog
sw.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if (!sw.isChecked())
{
flashCheckbox.setEnabled(false);
soundCheckbox.setEnabled(false);
swTimerChecked = false;
} else
{
flashCheckbox.setEnabled(true);
soundCheckbox.setEnabled(true);
swTimerChecked = true;
Switch swTimelapse = (Switch) dialog.findViewById(R.id.photoTimeLapseTitle_switcher);
swTimelapse.setChecked(false);
}
}
});
npTimer.setOnScrollListener(new NumberPicker.OnScrollListener()
{
@Override
public void onScrollStateChange(NumberPicker numberPicker, int scrollState)
{
sw.setChecked(true);
}
});
// disable control in dialog by default
if (!swTimerChecked)
{
sw.setChecked(false);
flashCheckbox.setEnabled(false);
soundCheckbox.setEnabled(false);
} else
{
flashCheckbox.setEnabled(true);
soundCheckbox.setEnabled(true);
sw.setChecked(true);
}
}
public void photoTimeLapseInitDialog()
{
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(MainScreen.getMainContext());
timeLapseInterval = prefs.getInt(MainScreen.sPhotoTimeLapseCaptureIntervalPref, 5);
timeLapseMeasurementVal = prefs.getInt(MainScreen.sPhotoTimeLapseCaptureIntervalMeasurmentPref, 0);
swTimeLapseChecked = prefs.getBoolean(MainScreen.sPhotoTimeLapseActivePref, false);
npTimeLapse = (NumberPicker) dialog.findViewById(R.id.photoTimeLapseInterval_numberPicker);
npTimeLapse.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
npTimeLapse.setMaxValue(60);
npTimeLapse.setMinValue(1);
// Fix for Acer Liquid E2 Duo.
if (!Build.MODEL.equals("V370")) {
npTimeLapse.setValue(timeLapseInterval);
}
npTimeLapse.setWrapSelectorWheel(false);
npTimeLapseMeasurment = (NumberPicker) dialog.findViewById(R.id.photoTimeLapseMeasurment_numberPicker);
npTimeLapseMeasurment.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
npTimeLapseMeasurment.setDisplayedValues(stringTimelapseMeasurement);
npTimeLapseMeasurment.setMaxValue(3);
npTimeLapseMeasurment.setMinValue(0);
// Fix for Acer Liquid E2 Duo.
if (!Build.MODEL.equals("V370")) {
npTimeLapseMeasurment.setValue(timeLapseMeasurementVal);
}
npTimeLapseMeasurment.setWrapSelectorWheel(false);
final Switch sw = (Switch) dialog.findViewById(R.id.photoTimeLapseTitle_switcher);
// disable/enable controls in dialog
sw.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if (!sw.isChecked())
{
swTimeLapseChecked = false;
sw.setChecked(false);
} else
{
swTimeLapseChecked = true;
sw.setChecked(true);
Switch sw = (Switch) dialog.findViewById(R.id.selftimer_switcher);
sw.setChecked(false);
}
}
});
npTimeLapse.setOnScrollListener(new NumberPicker.OnScrollListener()
{
@Override
public void onScrollStateChange(NumberPicker numberPicker, int scrollState)
{
sw.setChecked(true);
}
});
npTimeLapseMeasurment.setOnScrollListener(new NumberPicker.OnScrollListener()
{
@Override
public void onScrollStateChange(NumberPicker numberPicker, int scrollState)
{
sw.setChecked(true);
}
});
// disable control in dialog by default
if (swTimeLapseChecked)
{
sw.setChecked(true);
} else
{
sw.setChecked(false);
}
}
public void initDismissDialog()
{
dialog.setOnDismissListener(new OnDismissListener()
{
@Override
public void onDismiss(DialogInterface dialog)
{
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(MainScreen
.getMainContext());
// time lapse
int intervalTimeLapse = 0;
int intervalTimeLapseMeasurment = 0;
Editor prefsEditor = prefs.edit();
if (swTimeLapseChecked)
{
intervalTimeLapse = npTimeLapse.getValue();
intervalTimeLapseMeasurment = npTimeLapseMeasurment.getValue();
} else
{
intervalTimeLapse = 0;
intervalTimeLapseMeasurment = 0;
}
prefsEditor.putBoolean(MainScreen.sPhotoTimeLapseActivePref, swTimeLapseChecked);
prefsEditor.putInt(MainScreen.sPhotoTimeLapseCaptureIntervalPref, intervalTimeLapse);
prefsEditor
.putInt(MainScreen.sPhotoTimeLapseCaptureIntervalMeasurmentPref, intervalTimeLapseMeasurment);
// timer
int intervalTimer = 0;
if (swTimerChecked)
intervalTimer = npTimer.getValue();
else
intervalTimer = 0;
int real_int = Integer.parseInt(stringTimerInterval[intervalTimer]);
prefsEditor.putBoolean(MainScreen.sSWCheckedPref, swTimerChecked);
if (swTimerChecked)
prefsEditor.putInt(MainScreen.sDelayedCapturePref, real_int);
else
{
prefsEditor.putInt(MainScreen.sDelayedCapturePref, 0);
real_int = 0;
}
prefsEditor.putBoolean(MainScreen.sDelayedFlashPref, flashCheckbox.isChecked());
prefsEditor.putBoolean(MainScreen.sDelayedSoundPref, soundCheckbox.isChecked());
prefsEditor.putInt(MainScreen.sDelayedCaptureIntervalPref, intervalTimer);
prefsEditor.commit();
updateTimelapseButton(real_int);
}
});
}
public void selfTimerAndPtotoTimeLapseDialog()
{
dialog = new SelfTimerAndTimeLapseDialog(MainScreen.getInstance());
selfTimerInitDialog();
photoTimeLapseInitDialog();
initDismissDialog();
dialog.show();
}
public void addSelfTimerControl(boolean needToShow)
{
View selfTimerControl = null;
// Calculate right sizes for plugin's controls
DisplayMetrics metrics = new DisplayMetrics();
MainScreen.getInstance().getWindowManager().getDefaultDisplay().getMetrics(metrics);
float screenDensity = metrics.density;
int iIndicatorSize = (int) (MainScreen.getMainContext().getResources().getInteger(R.integer.infoControlHeight) * screenDensity);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(iIndicatorSize, iIndicatorSize);
int topMargin = MainScreen.getInstance().findViewById(R.id.paramsLayout).getHeight()
+ (int) MainScreen.getInstance().getResources().getDimension(R.dimen.viewfinderViewsMarginTop);
params.setMargins((int) (2 * MainScreen.getGUIManager().getScreenDensity()), topMargin, 0, 0);
params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
LayoutInflater inflator = MainScreen.getInstance().getLayoutInflater();
selfTimerControl = inflator.inflate(R.layout.selftimer_capture_layout, null, false);
selfTimerControl.setVisibility(View.VISIBLE);
MainScreen.getGUIManager().removeViews(selfTimerControl, R.id.specialPluginsLayout2);
if (!needToShow
|| !PluginManager.getInstance().getActivePlugins(PluginType.Capture).get(0).delayedCaptureSupported())
{
return;
}
timeLapseCount = (TextView) selfTimerControl.findViewById(R.id.timelapseCount);
timeLapseButton = (RotateImageView) selfTimerControl.findViewById(R.id.buttonSelftimer);
timeLapseButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
selfTimerAndPtotoTimeLapseDialog();
}
});
List<View> specialView2 = new ArrayList<View>();
RelativeLayout specialLayout2 = (RelativeLayout) MainScreen.getInstance().findViewById(
R.id.specialPluginsLayout2);
for (int i = 0; i < specialLayout2.getChildCount(); i++)
specialView2.add(specialLayout2.getChildAt(i));
params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
params.height = (int) MainScreen.getInstance().getResources().getDimension(R.dimen.videobuttons_size);
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
((RelativeLayout) MainScreen.getInstance().findViewById(R.id.specialPluginsLayout2)).addView(selfTimerControl,
params);
selfTimerControl.setLayoutParams(params);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(MainScreen.getMainContext());
int delayInterval = prefs.getInt(MainScreen.sDelayedCapturePref, 0);
updateTimelapseButton(delayInterval);
updateTimelapseCount();
}
public void updateTimelapseCount() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(MainScreen.getMainContext());
boolean photoTimeLapseActive = prefs.getBoolean(MainScreen.sPhotoTimeLapseActivePref, false);
boolean photoTimeLapseIsRunning = prefs.getBoolean(MainScreen.sPhotoTimeLapseIsRunningPref, false);
if ((timeLapseCount != null) && (timeLapseButton != null))
{
if (photoTimeLapseActive && photoTimeLapseIsRunning) {
timeLapseCount.setVisibility(View.VISIBLE);
int count = prefs.getInt(MainScreen.sPhotoTimeLapseCount, 0);
timeLapseCount.setText(String.valueOf(count));
timeLapseButton.setVisibility(View.GONE);
} else {
timeLapseCount.setText(String.valueOf(0));
timeLapseCount.setVisibility(View.GONE);
timeLapseButton.setVisibility(View.VISIBLE);
}
}
}
private void updateTimelapseButton(int delayInterval)
{
if (timeLapseButton == null)
return;
timeLapseButton.setImageDrawable(MainScreen.getAppResources().getDrawable(R.drawable.gui_almalence_mode_selftimer_control));
if (swTimeLapseChecked)
timeLapseButton.setImageDrawable(MainScreen.getAppResources().getDrawable(R.drawable.gui_almalence_mode_selftimer_controlcative));
else if (swTimerChecked)
{
switch (delayInterval)
{
case 0:
if (swTimerChecked)
timeLapseButton.setImageDrawable(MainScreen.getAppResources().getDrawable(R.drawable.gui_almalence_mode_selftimer_controlcative));
else
timeLapseButton.setImageDrawable(MainScreen.getAppResources().getDrawable(R.drawable.gui_almalence_mode_selftimer_control));
break;
case 3:
if (swTimerChecked)
timeLapseButton.setImageDrawable(MainScreen.getAppResources().getDrawable(R.drawable.gui_almalence_mode_selftimer3_controlcative));
else
timeLapseButton.setImageDrawable(MainScreen.getAppResources().getDrawable(R.drawable.gui_almalence_mode_selftimer3_control));
break;
case 5:
if (swTimerChecked)
timeLapseButton.setImageDrawable(MainScreen.getAppResources().getDrawable(R.drawable.gui_almalence_mode_selftimer5_controlcative));
else
timeLapseButton.setImageDrawable(MainScreen.getAppResources().getDrawable(R.drawable.gui_almalence_mode_selftimer5_control));
break;
case 10:
if (swTimerChecked)
timeLapseButton.setImageDrawable(MainScreen.getAppResources().getDrawable(R.drawable.gui_almalence_mode_selftimer10_controlcative));
else
timeLapseButton.setImageDrawable(MainScreen.getAppResources().getDrawable(R.drawable.gui_almalence_mode_selftimer10_control));
break;
case 15:
if (swTimerChecked)
timeLapseButton.setImageDrawable(MainScreen.getAppResources().getDrawable(R.drawable.gui_almalence_mode_selftimer15_controlcative));
else
timeLapseButton.setImageDrawable(MainScreen.getAppResources().getDrawable(R.drawable.gui_almalence_mode_selftimer15_control));
break;
case 30:
if (swTimerChecked)
timeLapseButton.setImageDrawable(MainScreen.getAppResources().getDrawable(R.drawable.gui_almalence_mode_selftimer30_controlcative));
else
timeLapseButton.setImageDrawable(MainScreen.getAppResources().getDrawable(R.drawable.gui_almalence_mode_selftimer30_control));
break;
case 60:
if (swTimerChecked)
timeLapseButton.setImageDrawable(MainScreen.getAppResources().getDrawable(R.drawable.gui_almalence_mode_selftimer60_controlcative));
else
timeLapseButton.setImageDrawable(MainScreen.getAppResources().getDrawable(R.drawable.gui_almalence_mode_selftimer60_control));
break;
default:
break;
}
}
}
public void setOrientation()
{
if (timeLapseButton != null)
{
timeLapseButton.setOrientation(AlmalenceGUI.mDeviceOrientation);
timeLapseButton.invalidate();
timeLapseButton.requestLayout();
}
if (timeLapseCount != null)
{
timeLapseCount.setRotation(-AlmalenceGUI.mDeviceOrientation);
timeLapseCount.invalidate();
timeLapseCount.requestLayout();
}
if (dialog != null)
{
dialog.setRotate(AlmalenceGUI.mDeviceOrientation);
}
}
}