blob: 5643f9d966e8cc3216e68ae5dfdc3c40b486edf6 [file] [log] [blame]
/*
* Copyright (C) 2010 Google Inc.
*
* 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 com.googlecode.android_scripting.facade.ui;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.util.AndroidRuntimeException;
import android.widget.SeekBar;
import com.googlecode.android_scripting.Log;
import com.googlecode.android_scripting.facade.EventFacade;
import org.json.JSONException;
import org.json.JSONObject;
/**
* Wrapper class for dialog box with seek bar.
*
* @author MeanEYE.rcf (meaneye.rcf@gmail.com)
*/
public class SeekBarDialogTask extends DialogTask {
private SeekBar mSeekBar;
private final int mProgress;
private final int mMax;
private final String mTitle;
private final String mMessage;
private String mPositiveButtonText;
private String mNegativeButtonText;
public SeekBarDialogTask(int progress, int max, String title, String message) {
mProgress = progress;
mMax = max;
mTitle = title;
mMessage = message;
}
public void setPositiveButtonText(String text) {
mPositiveButtonText = text;
}
public void setNegativeButtonText(String text) {
mNegativeButtonText = text;
}
@Override
public void onCreate() {
super.onCreate();
mSeekBar = new SeekBar(getActivity());
mSeekBar.setMax(mMax);
mSeekBar.setProgress(mProgress);
mSeekBar.setPadding(10, 0, 10, 3);
mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar arg0) {
}
@Override
public void onStartTrackingTouch(SeekBar arg0) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
EventFacade eventFacade = getEventFacade();
if (eventFacade != null) {
JSONObject result = new JSONObject();
try {
result.put("which", "seekbar");
result.put("progress", mSeekBar.getProgress());
result.put("fromuser", fromUser);
eventFacade.postEvent("dialog", result);
} catch (JSONException e) {
Log.e(e);
}
}
}
});
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
if (mTitle != null) {
builder.setTitle(mTitle);
}
if (mMessage != null) {
builder.setMessage(mMessage);
}
builder.setView(mSeekBar);
configureButtons(builder, getActivity());
addOnCancelListener(builder, getActivity());
mDialog = builder.show();
mShowLatch.countDown();
}
private Builder addOnCancelListener(final AlertDialog.Builder builder, final Activity activity) {
return builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
JSONObject result = new JSONObject();
try {
result.put("canceled", true);
result.put("progress", mSeekBar.getProgress());
} catch (JSONException e) {
Log.e(e);
}
dismissDialog();
setResult(result);
}
});
}
private void configureButtons(final AlertDialog.Builder builder, final Activity activity) {
DialogInterface.OnClickListener buttonListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
JSONObject result = new JSONObject();
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
try {
result.put("which", "positive");
result.put("progress", mSeekBar.getProgress());
} catch (JSONException e) {
throw new AndroidRuntimeException(e);
}
break;
case DialogInterface.BUTTON_NEGATIVE:
try {
result.put("which", "negative");
result.put("progress", mSeekBar.getProgress());
} catch (JSONException e) {
throw new AndroidRuntimeException(e);
}
break;
}
dismissDialog();
setResult(result);
}
};
if (mNegativeButtonText != null) {
builder.setNegativeButton(mNegativeButtonText, buttonListener);
}
if (mPositiveButtonText != null) {
builder.setPositiveButton(mPositiveButtonText, buttonListener);
}
}
}