1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.googlecode.android_scripting.facade.ui; 18 19 import android.app.Activity; 20 import android.app.AlertDialog; 21 import android.app.AlertDialog.Builder; 22 import android.content.DialogInterface; 23 import android.util.AndroidRuntimeException; 24 import android.widget.SeekBar; 25 26 import com.googlecode.android_scripting.Log; 27 import com.googlecode.android_scripting.facade.EventFacade; 28 29 import org.json.JSONException; 30 import org.json.JSONObject; 31 32 /** 33 * Wrapper class for dialog box with seek bar. 34 * 35 */ 36 public class SeekBarDialogTask extends DialogTask { 37 38 private SeekBar mSeekBar; 39 private final int mProgress; 40 private final int mMax; 41 private final String mTitle; 42 private final String mMessage; 43 private String mPositiveButtonText; 44 private String mNegativeButtonText; 45 SeekBarDialogTask(int progress, int max, String title, String message)46 public SeekBarDialogTask(int progress, int max, String title, String message) { 47 mProgress = progress; 48 mMax = max; 49 mTitle = title; 50 mMessage = message; 51 } 52 setPositiveButtonText(String text)53 public void setPositiveButtonText(String text) { 54 mPositiveButtonText = text; 55 } 56 setNegativeButtonText(String text)57 public void setNegativeButtonText(String text) { 58 mNegativeButtonText = text; 59 } 60 61 @Override onCreate()62 public void onCreate() { 63 super.onCreate(); 64 mSeekBar = new SeekBar(getActivity()); 65 mSeekBar.setMax(mMax); 66 mSeekBar.setProgress(mProgress); 67 mSeekBar.setPadding(10, 0, 10, 3); 68 mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 69 70 @Override 71 public void onStopTrackingTouch(SeekBar arg0) { 72 } 73 74 @Override 75 public void onStartTrackingTouch(SeekBar arg0) { 76 } 77 78 @Override 79 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 80 EventFacade eventFacade = getEventFacade(); 81 if (eventFacade != null) { 82 JSONObject result = new JSONObject(); 83 try { 84 result.put("which", "seekbar"); 85 result.put("progress", mSeekBar.getProgress()); 86 result.put("fromuser", fromUser); 87 eventFacade.postEvent("dialog", result); 88 } catch (JSONException e) { 89 Log.e(e); 90 } 91 } 92 } 93 }); 94 95 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 96 if (mTitle != null) { 97 builder.setTitle(mTitle); 98 } 99 if (mMessage != null) { 100 builder.setMessage(mMessage); 101 } 102 builder.setView(mSeekBar); 103 configureButtons(builder, getActivity()); 104 addOnCancelListener(builder, getActivity()); 105 mDialog = builder.show(); 106 mShowLatch.countDown(); 107 } 108 addOnCancelListener(final AlertDialog.Builder builder, final Activity activity)109 private Builder addOnCancelListener(final AlertDialog.Builder builder, final Activity activity) { 110 return builder.setOnCancelListener(new DialogInterface.OnCancelListener() { 111 @Override 112 public void onCancel(DialogInterface dialog) { 113 JSONObject result = new JSONObject(); 114 try { 115 result.put("canceled", true); 116 result.put("progress", mSeekBar.getProgress()); 117 } catch (JSONException e) { 118 Log.e(e); 119 } 120 dismissDialog(); 121 setResult(result); 122 } 123 }); 124 } 125 126 private void configureButtons(final AlertDialog.Builder builder, final Activity activity) { 127 DialogInterface.OnClickListener buttonListener = new DialogInterface.OnClickListener() { 128 @Override 129 public void onClick(DialogInterface dialog, int which) { 130 JSONObject result = new JSONObject(); 131 switch (which) { 132 case DialogInterface.BUTTON_POSITIVE: 133 try { 134 result.put("which", "positive"); 135 result.put("progress", mSeekBar.getProgress()); 136 } catch (JSONException e) { 137 throw new AndroidRuntimeException(e); 138 } 139 break; 140 case DialogInterface.BUTTON_NEGATIVE: 141 try { 142 result.put("which", "negative"); 143 result.put("progress", mSeekBar.getProgress()); 144 } catch (JSONException e) { 145 throw new AndroidRuntimeException(e); 146 } 147 break; 148 } 149 dismissDialog(); 150 setResult(result); 151 } 152 }; 153 if (mNegativeButtonText != null) { 154 builder.setNegativeButton(mNegativeButtonText, buttonListener); 155 } 156 if (mPositiveButtonText != null) { 157 builder.setPositiveButton(mPositiveButtonText, buttonListener); 158 } 159 } 160 } 161