aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin/SeekBarDialog.java
diff options
context:
space:
mode:
authorTadashi G. Takaoka <takaoka@google.com>2012-12-27 17:05:07 +0900
committerTadashi G. Takaoka <takaoka@google.com>2012-12-28 15:49:36 +0900
commita2982dd5a7b44a388464b5885366e52c2f828b43 (patch)
tree56539837cd8a1cb1db542dddd66d203cd28b43ca /java/src/com/android/inputmethod/latin/SeekBarDialog.java
parentff778fd406a7c13a9af9e2c59d45d94b8540017d (diff)
downloadlatinime-a2982dd5a7b44a388464b5885366e52c2f828b43.tar.gz
latinime-a2982dd5a7b44a388464b5885366e52c2f828b43.tar.xz
latinime-a2982dd5a7b44a388464b5885366e52c2f828b43.zip
Refactor to add SeekBarDialog
Change-Id: Id8e08a1d5ec5efb2baf96a2634111619fcb9fd4e
Diffstat (limited to 'java/src/com/android/inputmethod/latin/SeekBarDialog.java')
-rw-r--r--java/src/com/android/inputmethod/latin/SeekBarDialog.java179
1 files changed, 179 insertions, 0 deletions
diff --git a/java/src/com/android/inputmethod/latin/SeekBarDialog.java b/java/src/com/android/inputmethod/latin/SeekBarDialog.java
new file mode 100644
index 000000000..e576c0984
--- /dev/null
+++ b/java/src/com/android/inputmethod/latin/SeekBarDialog.java
@@ -0,0 +1,179 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * 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.android.inputmethod.latin;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.TextView;
+
+public final class SeekBarDialog implements DialogInterface.OnClickListener,
+ OnSeekBarChangeListener {
+ public interface Listener {
+ public void onPositiveButtonClick(final SeekBarDialog dialog);
+ public void onNegativeButtonClick(final SeekBarDialog dialog);
+ public void onProgressChanged(final SeekBarDialog dialog);
+ public void onStartTrackingTouch(final SeekBarDialog dialog);
+ public void onStopTrackingTouch(final SeekBarDialog dialog);
+ }
+
+ public static class Adapter implements Listener {
+ @Override
+ public void onPositiveButtonClick(final SeekBarDialog dialog) {}
+ @Override
+ public void onNegativeButtonClick(final SeekBarDialog dialog) { dialog.dismiss(); }
+ @Override
+ public void onProgressChanged(final SeekBarDialog dialog) {}
+ @Override
+ public void onStartTrackingTouch(final SeekBarDialog dialog) {}
+ @Override
+ public void onStopTrackingTouch(final SeekBarDialog dialog) {}
+ }
+
+ private static final Listener EMPTY_ADAPTER = new Adapter();
+
+ private final AlertDialog mDialog;
+ private final Listener mListener;
+ private final TextView mValueView;
+ private final SeekBar mSeekBar;
+ private final String mValueFormat;
+
+ private int mValue;
+
+ private SeekBarDialog(final Builder builder) {
+ final AlertDialog.Builder dialogBuilder = builder.mDialogBuilder;
+ dialogBuilder.setView(builder.mView);
+ dialogBuilder.setPositiveButton(android.R.string.ok, this);
+ dialogBuilder.setNegativeButton(android.R.string.cancel, this);
+ mDialog = dialogBuilder.create();
+ mListener = (builder.mListener == null) ? EMPTY_ADAPTER : builder.mListener;
+ mValueView = (TextView)builder.mView.findViewById(R.id.seek_bar_dialog_value);
+ mSeekBar = (SeekBar)builder.mView.findViewById(R.id.seek_bar_dialog_bar);
+ mSeekBar.setMax(builder.mMaxValue);
+ mSeekBar.setOnSeekBarChangeListener(this);
+ if (builder.mValueFormatResId == 0) {
+ mValueFormat = "%s";
+ } else {
+ mValueFormat = mDialog.getContext().getString(builder.mValueFormatResId);
+ }
+ }
+
+ public void setValue(final int value, final boolean fromUser) {
+ mValue = value;
+ mValueView.setText(String.format(mValueFormat, value));
+ if (!fromUser) {
+ mSeekBar.setProgress(value);
+ }
+ }
+
+ public int getValue() {
+ return mValue;
+ }
+
+ public CharSequence getValueText() {
+ return mValueView.getText();
+ }
+
+ public void show() {
+ mDialog.show();
+ }
+
+ public void dismiss() {
+ mDialog.dismiss();
+ }
+
+ @Override
+ public void onClick(final DialogInterface dialog, int which) {
+ if (which == DialogInterface.BUTTON_POSITIVE) {
+ mListener.onPositiveButtonClick(this);
+ return;
+ }
+ if (which == DialogInterface.BUTTON_NEGATIVE) {
+ mListener.onNegativeButtonClick(this);
+ return;
+ }
+ }
+
+ @Override
+ public void onProgressChanged(final SeekBar seekBar, final int progress,
+ final boolean fromUser) {
+ setValue(progress, fromUser);
+ if (fromUser) {
+ mListener.onProgressChanged(this);
+ }
+ }
+
+ @Override
+ public void onStartTrackingTouch(final SeekBar seekBar) {
+ mListener.onStartTrackingTouch(this);
+ }
+
+ @Override
+ public void onStopTrackingTouch(final SeekBar seekBar) {
+ mListener.onStopTrackingTouch(this);
+ }
+
+ public static final class Builder {
+ final AlertDialog.Builder mDialogBuilder;
+ final View mView;
+
+ int mMaxValue;
+ int mValueFormatResId;
+ int mValue;
+ Listener mListener;
+
+ public Builder(final Context context) {
+ mDialogBuilder = new AlertDialog.Builder(context);
+ mView = LayoutInflater.from(context).inflate(R.layout.seek_bar_dialog, null);
+ }
+
+ public Builder setTitle(final int resId) {
+ mDialogBuilder.setTitle(resId);
+ return this;
+ }
+
+ public Builder setMaxValue(final int max) {
+ mMaxValue = max;
+ return this;
+ }
+
+ public Builder setValueFromat(final int resId) {
+ mValueFormatResId = resId;
+ return this;
+ }
+
+ public Builder setValue(final int value) {
+ mValue = value;
+ return this;
+ }
+
+ public Builder setListener(final Listener listener) {
+ mListener = listener;
+ return this;
+ }
+
+ public SeekBarDialog create() {
+ final SeekBarDialog dialog = new SeekBarDialog(this);
+ dialog.setValue(mValue, false /* fromUser */);
+ return dialog;
+ }
+ }
+}