diff options
Diffstat (limited to 'app/src')
-rw-r--r-- | app/src/main/java/org/connectbot/HostListActivity.java | 160 | ||||
-rw-r--r-- | app/src/main/res/drawable-hdpi/ic_add.png | bin | 0 -> 127 bytes | |||
-rw-r--r-- | app/src/main/res/drawable-mdpi/ic_add.png | bin | 0 -> 88 bytes | |||
-rw-r--r-- | app/src/main/res/drawable-xhdpi/ic_add.png | bin | 0 -> 97 bytes | |||
-rw-r--r-- | app/src/main/res/drawable-xxhdpi/ic_add.png | bin | 0 -> 97 bytes | |||
-rw-r--r-- | app/src/main/res/drawable-xxxhdpi/ic_add.png | bin | 0 -> 102 bytes | |||
-rw-r--r-- | app/src/main/res/layout/act_hostlist.xml | 43 | ||||
-rw-r--r-- | app/src/main/res/layout/dia_add_host.xml | 47 | ||||
-rw-r--r-- | app/src/main/res/values/colors.xml | 5 | ||||
-rw-r--r-- | app/src/main/res/values/strings.xml | 2 |
10 files changed, 179 insertions, 78 deletions
diff --git a/app/src/main/java/org/connectbot/HostListActivity.java b/app/src/main/java/org/connectbot/HostListActivity.java index 4dfeffd..987a643 100644 --- a/app/src/main/java/org/connectbot/HostListActivity.java +++ b/app/src/main/java/org/connectbot/HostListActivity.java @@ -17,6 +17,7 @@ package org.connectbot; +import android.app.Activity; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Rect; @@ -27,6 +28,7 @@ import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import java.util.List; +import java.util.zip.Inflater; import org.connectbot.bean.HostBean; import org.connectbot.data.HostStorage; @@ -38,6 +40,8 @@ import org.connectbot.util.HostDatabase; import org.connectbot.util.PreferenceConstants; import android.app.AlertDialog; +import android.app.Dialog; +import android.app.ListActivity; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; @@ -52,6 +56,9 @@ import android.os.Bundle; import android.os.IBinder; import android.preference.PreferenceManager; import android.support.annotation.StyleRes; +import android.support.design.widget.FloatingActionButton; +import android.support.v4.app.DialogFragment; +import android.support.v4.app.FragmentActivity; import android.text.format.DateUtils; import android.util.Log; import android.view.ContextMenu; @@ -65,6 +72,8 @@ import android.view.View.OnKeyListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; +import android.widget.BaseAdapter; +import android.widget.Button; import android.widget.ImageView; import android.widget.Spinner; import android.widget.TextView; @@ -91,9 +100,6 @@ public class HostListActivity extends AppCompatActivity implements OnHostStatusC private MenuItem sortlast; - private Spinner transportSpinner; - private TextView quickconnect; - private SharedPreferences prefs = null; protected boolean makingShortcut = false; @@ -190,6 +196,7 @@ public class HostListActivity extends AppCompatActivity implements OnHostStatusC mEmptyView = findViewById(R.id.empty); this.prefs = PreferenceManager.getDefaultSharedPreferences(this); + this.inflater = LayoutInflater.from(this); // detect HTC Dream and apply special preferences if (Build.MANUFACTURER.equals("HTC") && Build.DEVICE.equals("dream")) { @@ -224,40 +231,18 @@ public class HostListActivity extends AppCompatActivity implements OnHostStatusC this.registerForContextMenu(mHostListView); - quickconnect = (TextView) this.findViewById(R.id.front_quickconnect); - quickconnect.setVisibility(makingShortcut ? View.GONE : View.VISIBLE); - quickconnect.setOnKeyListener(new OnKeyListener() { - - public boolean onKey(View v, int keyCode, KeyEvent event) { - - if (event.getAction() == KeyEvent.ACTION_UP) return false; - if (keyCode != KeyEvent.KEYCODE_ENTER) return false; - - return startConsoleActivity(); - } - }); - - transportSpinner = (Spinner) findViewById(R.id.transport_selection); - transportSpinner.setVisibility(makingShortcut ? View.GONE : View.VISIBLE); - ArrayAdapter<String> transportSelection = new ArrayAdapter<String>(this, - android.R.layout.simple_spinner_item, TransportFactory.getTransportNames()); - transportSelection.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - transportSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - public void onItemSelected(AdapterView<?> arg0, View view, int position, long id) { - String formatHint = TransportFactory.getFormatHint( - (String) transportSpinner.getSelectedItem(), - HostListActivity.this); - - quickconnect.setHint(formatHint); - quickconnect.setError(null); - quickconnect.requestFocus(); + FloatingActionButton addHostButton = + (FloatingActionButton) findViewById(R.id.add_host_button); + addHostButton.setVisibility(makingShortcut ? View.GONE : View.VISIBLE); + addHostButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + DialogFragment dialog = new AddHostDialogFragment(); + dialog.show(getSupportFragmentManager(), "AddHostDialogFragment"); } public void onNothingSelected(AdapterView<?> arg0) {} }); - transportSpinner.setAdapter(transportSelection); - - this.inflater = LayoutInflater.from(this); } @Override @@ -360,18 +345,7 @@ public class HostListActivity extends AppCompatActivity implements OnHostStatusC /** * @return */ - private boolean startConsoleActivity() { - Uri uri = TransportFactory.getUri((String) transportSpinner - .getSelectedItem(), quickconnect.getText().toString()); - - if (uri == null) { - quickconnect.setError(getString(R.string.list_format_error, - TransportFactory.getFormatHint( - (String) transportSpinner.getSelectedItem(), - HostListActivity.this))); - return false; - } - + private boolean startConsoleActivity(Uri uri) { HostBean host = TransportFactory.findHost(hostdb, uri); if (host == null) { host = TransportFactory.getTransport(uri.getScheme()).createHost(uri); @@ -384,9 +358,6 @@ public class HostListActivity extends AppCompatActivity implements OnHostStatusC intent.setData(uri); startActivity(intent); - // Clear the input box for the next entry. - quickconnect.setText(""); - return true; } @@ -688,4 +659,97 @@ public class HostListActivity extends AppCompatActivity implements OnHostStatusC outRect.set(0, top, 0, mDivider.getIntrinsicHeight()); } } + + public static class AddHostDialogFragment extends DialogFragment { + private TextView mAddressField; + private Spinner mSpinner; + + HostListActivity mListener; + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + mListener = (HostListActivity) activity; + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + LayoutInflater inflater = getActivity().getLayoutInflater(); + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + + View addHostDialog = inflater.inflate(R.layout.dia_add_host, null); + builder.setView(addHostDialog) + .setPositiveButton(R.string.button_add, null) + .setNegativeButton(R.string.button_cancel, null); + AlertDialog dialog = builder.create(); + + mAddressField = (TextView) addHostDialog.findViewById(R.id.front_quickconnect); + mAddressField.setOnKeyListener(new OnKeyListener() { + + public boolean onKey(View v, int keyCode, KeyEvent event) { + + if (event.getAction() == KeyEvent.ACTION_UP) return false; + if (keyCode != KeyEvent.KEYCODE_ENTER) return false; + + processNewUriEntered(); + return true; + } + }); + + mSpinner = (Spinner) addHostDialog.findViewById(R.id.transport_selection); + ArrayAdapter<String> transportSelection = new ArrayAdapter<String>(getActivity(), + android.R.layout.simple_spinner_item, TransportFactory.getTransportNames()); + transportSelection.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + public void onItemSelected(AdapterView<?> arg0, View view, int position, long id) { + String formatHint = TransportFactory.getFormatHint( + (String) mSpinner.getSelectedItem(), + getActivity()); + mAddressField.setHint(formatHint); + mAddressField.setError(null); + mAddressField.requestFocus(); + } + + public void onNothingSelected(AdapterView<?> arg0) { + } + }); + mSpinner.setAdapter(transportSelection); + + return dialog; + } + + @Override + public void onResume() + { + super.onResume(); + final AlertDialog alertDialog = (AlertDialog) getDialog(); + Button addButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); + addButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + processNewUriEntered(); + } + }); + } + + /** + * Processes the URI that has been entered. If it is a valid URI, adds that host + * and starts ConsoleActivity; otherwise, shows an error in the address field. + */ + private void processNewUriEntered() { + Uri uri = TransportFactory.getUri((String) mSpinner + .getSelectedItem(), mAddressField.getText().toString()); + if (uri == null) { + mAddressField.setError(getString(R.string.list_format_error, + TransportFactory.getFormatHint( + (String) mSpinner.getSelectedItem(), + getActivity()))); + mAddressField.requestFocus(); + return; + } + + mListener.startConsoleActivity(uri); + getDialog().dismiss(); + } + } } diff --git a/app/src/main/res/drawable-hdpi/ic_add.png b/app/src/main/res/drawable-hdpi/ic_add.png Binary files differnew file mode 100644 index 0000000..694179b --- /dev/null +++ b/app/src/main/res/drawable-hdpi/ic_add.png diff --git a/app/src/main/res/drawable-mdpi/ic_add.png b/app/src/main/res/drawable-mdpi/ic_add.png Binary files differnew file mode 100644 index 0000000..3856041 --- /dev/null +++ b/app/src/main/res/drawable-mdpi/ic_add.png diff --git a/app/src/main/res/drawable-xhdpi/ic_add.png b/app/src/main/res/drawable-xhdpi/ic_add.png Binary files differnew file mode 100644 index 0000000..67bb598 --- /dev/null +++ b/app/src/main/res/drawable-xhdpi/ic_add.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_add.png b/app/src/main/res/drawable-xxhdpi/ic_add.png Binary files differnew file mode 100644 index 0000000..0fdced8 --- /dev/null +++ b/app/src/main/res/drawable-xxhdpi/ic_add.png diff --git a/app/src/main/res/drawable-xxxhdpi/ic_add.png b/app/src/main/res/drawable-xxxhdpi/ic_add.png Binary files differnew file mode 100644 index 0000000..d64c22e --- /dev/null +++ b/app/src/main/res/drawable-xxxhdpi/ic_add.png diff --git a/app/src/main/res/layout/act_hostlist.xml b/app/src/main/res/layout/act_hostlist.xml index bf80b1d..216fedf 100644 --- a/app/src/main/res/layout/act_hostlist.xml +++ b/app/src/main/res/layout/act_hostlist.xml @@ -20,54 +20,37 @@ <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > - <LinearLayout - android:id="@+id/quickconnect" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:layout_alignParentBottom="true" - android:layout_alignParentLeft="true" - android:layout_alignParentStart="true" - android:orientation="horizontal" - > - - <Spinner - android:id="@+id/transport_selection" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - /> - - <EditText - android:id="@+id/front_quickconnect" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:ellipsize="end" - android:focusableInTouchMode="true" - android:hint="username@hostname:port" - android:inputType="textEmailAddress" - android:maxLines="1" - android:singleLine="true"/> - </LinearLayout> - <android.support.v7.widget.RecyclerView android:id="@+id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" - android:layout_above="@+id/quickconnect" /> <TextView android:id="@+id/empty" android:layout_width="fill_parent" android:layout_height="fill_parent" - android:layout_above="@+id/quickconnect" android:gravity="center" android:text="@string/list_host_empty" android:textAppearance="?android:attr/textAppearanceMedium" /> + <android.support.design.widget.FloatingActionButton + android:id="@+id/add_host_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentBottom="true" + android:layout_alignParentEnd="true" + android:layout_alignParentRight="true" + android:layout_margin="16dp" + android:src="@drawable/ic_add" + app:backgroundTint="@color/accent" + app:rippleColor="@color/dark_accent" /> + </RelativeLayout> diff --git a/app/src/main/res/layout/dia_add_host.xml b/app/src/main/res/layout/dia_add_host.xml new file mode 100644 index 0000000..609690f --- /dev/null +++ b/app/src/main/res/layout/dia_add_host.xml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ ConnectBot: simple, powerful, open-source SSH client for Android + ~ Copyright 2015 Kenny Root, Jeffrey Sharkey + ~ + ~ 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. + --> + +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:orientation="horizontal" + android:padding="10dp" + > + + <Spinner + android:id="@+id/transport_selection" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + /> + + <EditText + android:id="@+id/front_quickconnect" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:ellipsize="end" + android:focusableInTouchMode="true" + android:hint="username@hostname:port" + android:inputType="textEmailAddress" + android:maxLines="1" + android:singleLine="true" + android:layout_marginBottom="30dp" + /> + +</LinearLayout> diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 299b896..290431f 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -27,4 +27,9 @@ <color name="primary">#00BCD4</color> <color name="accent">#F4511E</color> + <color name="dark_accent">#BF360C</color> + + <color name="fab_color_pressed">#F4511E</color> + <color name="fab_color_normal">#F4511E</color> + </resources>
\ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4820846..1b786b3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -152,6 +152,8 @@ <!-- Add a new item (e.g., host or pubkey) to the list. --> <string name="button_add">"Add"</string> + <!-- Cancel an action. --> + <string name="button_cancel">Cancel</string> <!-- Change an existing item's (e.g., host or pubkey) details. --> <string name="button_change">"Change"</string> <!-- Button that begins the generation of a public key pair. --> |