Mercurial > 510Connectbot
view app/src/main/java/com/five_ten_sg/connectbot/util/StringPickerDialog.java @ 465:7c8aebcc882a
request permissions if not already granted
author | Carl Byington <carl@five-ten-sg.com> |
---|---|
date | Mon, 19 Aug 2019 11:12:40 -0700 |
parents | d29cce60f393 |
children |
line wrap: on
line source
/* * 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; } } }