diff src/com/five_ten_sg/connectbot/util/StringPickerDialog.java @ 223:61ed3984fc1d

proper labels on the soft 24 function keypad
author Carl Byington <carl@five-ten-sg.com>
date Tue, 08 Jul 2014 17:20:07 -0700
parents
children 071eccdff8ea
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/com/five_ten_sg/connectbot/util/StringPickerDialog.java	Tue Jul 08 17:20:07 2014 -0700
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2008 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.five_ten_sg.connectbot.util;
+
+import com.five_ten_sg.connectbot.R;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.os.Bundle;
+import android.text.*;
+import android.view.LayoutInflater;
+import android.view.View.OnClickListener;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
+import android.widget.Button;
+import android.widget.GridView;
+
+/**
+ * Dialog for choosing accented characters related to a base character.
+ */
+public class StringPickerDialog extends Dialog
+        implements OnItemClickListener, OnClickListener {
+    private View mView;
+    private Editable mText;
+    private String []mOptions;
+    private boolean mInsert;
+    private LayoutInflater mInflater;
+    private Button mCancelButton;
+
+    /**
+     * Creates a new StringPickerDialog that presents the specified
+     * <code>options</code> for insertion or replacement (depending on
+     * the sense of <code>insert</code>) into <code>text</code>.
+     */
+    public StringPickerDialog(Context context, View view,
+                                 Editable text, String []options,
+                                 boolean insert) {
+        //super(context, com.android.internal.R.style.Theme_Panel);
+
+        //Resources res = Resources.getSystem();
+        //int id = res.getIdentifier("Theme_Panel", "style", "android");
+        //int id = android.R.style.Theme_Panel;
+        super(context, android.R.style.Theme_Panel);
+        mView = view;
+        mText = text;
+        mOptions = options;
+        mInsert = insert;
+        mInflater = LayoutInflater.from(context);
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        WindowManager.LayoutParams params = getWindow().getAttributes();
+        params.token = mView.getApplicationWindowToken();
+        params.type = params.TYPE_APPLICATION_ATTACHED_DIALOG;
+        params.flags = params.flags | Window.FEATURE_NO_TITLE;
+
+        setContentView(R.layout.string_picker);
+
+        GridView grid = (GridView) findViewById(R.id.stringPicker);
+        grid.setAdapter(new OptionsAdapter(getContext()));
+        grid.setOnItemClickListener(this);
+
+        mCancelButton = (Button) findViewById(R.id.cancel);
+        mCancelButton.setOnClickListener(this);
+    }
+
+    /**
+     * Handles clicks on the character buttons.
+     */
+    public void onItemClick(AdapterView parent, View view, int position, long id) {
+        String result = mOptions[position];
+        replaceCharacterAndClose(result);
+    }
+
+    private void replaceCharacterAndClose(CharSequence replace) {
+        int selEnd = Selection.getSelectionEnd(mText);
+        if (mInsert || selEnd == 0) {
+            mText.insert(selEnd, replace);
+        } else {
+            mText.replace(selEnd - 1, selEnd, replace);
+        }
+
+        dismiss();
+    }
+
+    /**
+     * Handles clicks on the Cancel button.
+     */
+    public void onClick(View v) {
+        if (v == mCancelButton) {
+            dismiss();
+        } else if (v instanceof Button) {
+            CharSequence result = ((Button) v).getText();
+            replaceCharacterAndClose(result);
+        }
+    }
+
+    private class OptionsAdapter extends BaseAdapter {
+
+        public OptionsAdapter(Context context) {
+            super();
+        }
+
+        public View getView(int position, View convertView, ViewGroup parent) {
+            Button b = (Button)
+                mInflater.inflate(R.layout.string_picker_button, null);
+            b.setText(mOptions[position]);
+            b.setOnClickListener(StringPickerDialog.this);
+            return b;
+        }
+
+        public final int getCount() {
+            return mOptions.length;
+        }
+
+        public final Object getItem(int position) {
+            return mOptions[position];
+        }
+
+        public final long getItemId(int position) {
+            return position;
+        }
+    }
+}