aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/org/connectbot/PortForwardListActivity.java
diff options
context:
space:
mode:
authorRyan Hansberry <rhansby@gmail.com>2015-09-22 10:41:37 -0700
committerRyan Hansberry <rhansby@gmail.com>2015-09-22 11:59:13 -0700
commit0f293ab7927470ab3a2d78064cc3c66e2523415f (patch)
tree0f503c5f09b19df25d9ec7799ac542ea866792d4 /app/src/main/java/org/connectbot/PortForwardListActivity.java
parentd2164043d4748b0269937cb983929c6c2e8c6fff (diff)
downloadconnectbot-0f293ab7927470ab3a2d78064cc3c66e2523415f.tar.gz
connectbot-0f293ab7927470ab3a2d78064cc3c66e2523415f.tar.bz2
connectbot-0f293ab7927470ab3a2d78064cc3c66e2523415f.zip
Convert PubkeyListActivity, PortFowardListActivity, and HostListActivity to AppCompat, using AppCompatListActivity superclass
Diffstat (limited to 'app/src/main/java/org/connectbot/PortForwardListActivity.java')
-rw-r--r--app/src/main/java/org/connectbot/PortForwardListActivity.java375
1 files changed, 196 insertions, 179 deletions
diff --git a/app/src/main/java/org/connectbot/PortForwardListActivity.java b/app/src/main/java/org/connectbot/PortForwardListActivity.java
index 868c611..28b4331 100644
--- a/app/src/main/java/org/connectbot/PortForwardListActivity.java
+++ b/app/src/main/java/org/connectbot/PortForwardListActivity.java
@@ -26,7 +26,6 @@ import org.connectbot.service.TerminalManager;
import org.connectbot.util.HostDatabase;
import android.app.AlertDialog;
-import android.app.ListActivity;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
@@ -39,23 +38,23 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
+import android.support.annotation.VisibleForTesting;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
+import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View;
import android.view.ViewGroup;
-import android.view.MenuItem.OnMenuItemClickListener;
import android.widget.AdapterView;
-import android.widget.ArrayAdapter;
+import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.EditText;
-import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.AdapterView.OnItemSelectedListener;
/**
* List all portForwards for a particular host and provide a way for users to add more portForwards,
@@ -63,7 +62,7 @@ import android.widget.AdapterView.OnItemSelectedListener;
*
* @author Kenny Root
*/
-public class PortForwardListActivity extends ListActivity {
+public class PortForwardListActivity extends AppCompatListActivity {
public final static String TAG = "CB.PortForwardListAct";
private static final int LISTENER_CYCLE_TIME = 500;
@@ -104,6 +103,13 @@ public class PortForwardListActivity extends ListActivity {
setContentView(R.layout.act_portforwardlist);
+ mListView = (RecyclerView) findViewById(R.id.list);
+ mListView.setHasFixedSize(true);
+ mListView.setLayoutManager(new LinearLayoutManager(this));
+ mListView.addItemDecoration(new ListItemDecoration(this));
+
+ mEmptyView = findViewById(R.id.empty);
+
// connect with hosts database and populate list
this.hostdb = HostDatabase.get(this);
host = hostdb.findHostById(hostId);
@@ -134,25 +140,7 @@ public class PortForwardListActivity extends ListActivity {
this.updateList();
- this.registerForContextMenu(this.getListView());
-
- this.getListView().setOnItemClickListener(new OnItemClickListener() {
- public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {
- ListView lv = PortForwardListActivity.this.getListView();
- PortForwardBean pfb = (PortForwardBean) lv.getItemAtPosition(position);
-
- if (hostBridge != null) {
- if (pfb.isEnabled())
- hostBridge.disablePortForward(pfb);
- else {
- if (!hostBridge.enablePortForward(pfb))
- Toast.makeText(PortForwardListActivity.this, getString(R.string.portforward_problem), Toast.LENGTH_LONG).show();
- }
-
- updateHandler.sendEmptyMessage(-1);
- }
- }
- });
+ this.registerForContextMenu(mListView);
this.inflater = LayoutInflater.from(this);
}
@@ -200,18 +188,18 @@ public class PortForwardListActivity extends ListActivity {
break;
}
- PortForwardBean pfb = new PortForwardBean(
+ PortForwardBean portForward = new PortForwardBean(
host != null ? host.getId() : -1,
nicknameEdit.getText().toString(), type,
sourcePortEdit.getText().toString(),
destEdit.getText().toString());
if (hostBridge != null) {
- hostBridge.addPortForward(pfb);
- hostBridge.enablePortForward(pfb);
+ hostBridge.addPortForward(portForward);
+ hostBridge.enablePortForward(portForward);
}
- if (host != null && !hostdb.savePortForward(pfb)) {
+ if (host != null && !hostdb.savePortForward(portForward)) {
throw new SQLException("Could not save port forward");
}
@@ -231,188 +219,217 @@ public class PortForwardListActivity extends ListActivity {
return true;
}
- @Override
- public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
- // Create menu to handle deleting and editing port forward
- AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
- final PortForwardBean pfb = (PortForwardBean) this.getListView().getItemAtPosition(info.position);
+ protected Handler updateHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ PortForwardListActivity.this.updateList();
+ }
+ };
- menu.setHeaderTitle(pfb.getNickname());
+ protected void updateList() {
+ if (hostBridge != null) {
+ this.portForwards = hostBridge.getPortForwards();
+ } else {
+ if (this.hostdb == null) return;
+ this.portForwards = this.hostdb.getPortForwardsForHost(host);
+ }
- MenuItem edit = menu.add(R.string.portforward_edit);
- edit.setOnMenuItemClickListener(new OnMenuItemClickListener() {
- public boolean onMenuItemClick(MenuItem item) {
- final View editTunnelView = inflater.inflate(R.layout.dia_portforward, null, false);
-
- final Spinner typeSpinner = (Spinner) editTunnelView.findViewById(R.id.portforward_type);
- if (HostDatabase.PORTFORWARD_LOCAL.equals(pfb.getType()))
- typeSpinner.setSelection(0);
- else if (HostDatabase.PORTFORWARD_REMOTE.equals(pfb.getType()))
- typeSpinner.setSelection(1);
- else
- typeSpinner.setSelection(2);
-
- final EditText nicknameEdit = (EditText) editTunnelView.findViewById(R.id.nickname);
- nicknameEdit.setText(pfb.getNickname());
-
- final EditText sourcePortEdit = (EditText) editTunnelView.findViewById(R.id.portforward_source);
- sourcePortEdit.setText(String.valueOf(pfb.getSourcePort()));
-
- final EditText destEdit = (EditText) editTunnelView.findViewById(R.id.portforward_destination);
- if (HostDatabase.PORTFORWARD_DYNAMIC5.equals(pfb.getType())) {
- destEdit.setEnabled(false);
- } else {
- destEdit.setText(String.format("%s:%d", pfb.getDestAddr(), pfb.getDestPort()));
- }
+ mAdapter = new PortForwardAdapter(this, portForwards);
+ mListView.setAdapter(mAdapter);
+ adjustViewVisibility();
+ }
- typeSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
- public void onItemSelected(AdapterView<?> value, View view,
- int position, long id) {
- destEdit.setEnabled(position != 2);
- }
- public void onNothingSelected(AdapterView<?> arg0) {
- }
- });
+ private class PortForwardViewHolder extends ItemViewHolder {
+ public final TextView nickname;
+ public final TextView caption;
- new AlertDialog.Builder(PortForwardListActivity.this)
- .setView(editTunnelView)
- .setPositiveButton(R.string.button_change, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- try {
- if (hostBridge != null)
- hostBridge.disablePortForward(pfb);
+ public PortForwardBean portForward;
- pfb.setNickname(nicknameEdit.getText().toString());
+ public PortForwardViewHolder(View v) {
+ super(v);
- switch (typeSpinner.getSelectedItemPosition()) {
- case 0:
- pfb.setType(HostDatabase.PORTFORWARD_LOCAL);
- break;
- case 1:
- pfb.setType(HostDatabase.PORTFORWARD_REMOTE);
- break;
- case 2:
- pfb.setType(HostDatabase.PORTFORWARD_DYNAMIC5);
- break;
- }
+ nickname = (TextView) v.findViewById(android.R.id.text1);
+ caption = (TextView) v.findViewById(android.R.id.text2);
+ }
- pfb.setSourcePort(Integer.parseInt(sourcePortEdit.getText().toString()));
- pfb.setDest(destEdit.getText().toString());
+ @Override
+ public void onClick(View v) {
+ if (hostBridge != null) {
+ if (portForward.isEnabled())
+ hostBridge.disablePortForward(portForward);
+ else {
+ if (!hostBridge.enablePortForward(portForward))
+ Toast.makeText(PortForwardListActivity.this, getString(R.string.portforward_problem), Toast.LENGTH_LONG).show();
+ }
- // Use the new settings for the existing connection.
- if (hostBridge != null)
- updateHandler.postDelayed(new Runnable() {
- public void run() {
- hostBridge.enablePortForward(pfb);
- updateHandler.sendEmptyMessage(-1);
- }
- }, LISTENER_CYCLE_TIME);
+ updateHandler.sendEmptyMessage(-1);
+ }
+ }
+ @Override
+ public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
+ // Create menu to handle deleting and editing port forward
+ AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
+
+ menu.setHeaderTitle(portForward.getNickname());
+
+ MenuItem edit = menu.add(R.string.portforward_edit);
+ edit.setOnMenuItemClickListener(new OnMenuItemClickListener() {
+ public boolean onMenuItemClick(MenuItem item) {
+ final View editTunnelView = inflater.inflate(R.layout.dia_portforward, null, false);
+
+ final Spinner typeSpinner = (Spinner) editTunnelView.findViewById(R.id.portforward_type);
+ if (HostDatabase.PORTFORWARD_LOCAL.equals(portForward.getType()))
+ typeSpinner.setSelection(0);
+ else if (HostDatabase.PORTFORWARD_REMOTE.equals(portForward.getType()))
+ typeSpinner.setSelection(1);
+ else
+ typeSpinner.setSelection(2);
+
+ final EditText nicknameEdit = (EditText) editTunnelView.findViewById(R.id.nickname);
+ nicknameEdit.setText(portForward.getNickname());
+
+ final EditText sourcePortEdit = (EditText) editTunnelView.findViewById(R.id.portforward_source);
+ sourcePortEdit.setText(String.valueOf(portForward.getSourcePort()));
+
+ final EditText destEdit = (EditText) editTunnelView.findViewById(R.id.portforward_destination);
+ if (HostDatabase.PORTFORWARD_DYNAMIC5.equals(portForward.getType())) {
+ destEdit.setEnabled(false);
+ } else {
+ destEdit.setText(String.format("%s:%d", portForward.getDestAddr(), portForward.getDestPort()));
+ }
- if (!hostdb.savePortForward(pfb)) {
- throw new SQLException("Could not save port forward");
- }
+ typeSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
+ public void onItemSelected(AdapterView<?> value, View view,
+ int position, long id) {
+ destEdit.setEnabled(position != 2);
+ }
- updateHandler.sendEmptyMessage(-1);
- } catch (Exception e) {
- Log.e(TAG, "Could not update port forward", e);
- // TODO Show failure dialog.
- }
+ public void onNothingSelected(AdapterView<?> arg0) {
}
- })
- .setNegativeButton(android.R.string.cancel, null).create().show();
+ });
+
+ new AlertDialog.Builder(PortForwardListActivity.this)
+ .setView(editTunnelView)
+ .setPositiveButton(R.string.button_change, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ try {
+ if (hostBridge != null)
+ hostBridge.disablePortForward(portForward);
+
+ portForward.setNickname(nicknameEdit.getText().toString());
+
+ switch (typeSpinner.getSelectedItemPosition()) {
+ case 0:
+ portForward.setType(HostDatabase.PORTFORWARD_LOCAL);
+ break;
+ case 1:
+ portForward.setType(HostDatabase.PORTFORWARD_REMOTE);
+ break;
+ case 2:
+ portForward.setType(HostDatabase.PORTFORWARD_DYNAMIC5);
+ break;
+ }
- return true;
- }
- });
+ portForward.setSourcePort(Integer.parseInt(sourcePortEdit.getText().toString()));
+ portForward.setDest(destEdit.getText().toString());
- MenuItem delete = menu.add(R.string.portforward_delete);
- delete.setOnMenuItemClickListener(new OnMenuItemClickListener() {
- public boolean onMenuItemClick(MenuItem item) {
- // prompt user to make sure they really want this
- new AlertDialog.Builder(PortForwardListActivity.this)
- .setMessage(getString(R.string.delete_message, pfb.getNickname()))
- .setPositiveButton(R.string.delete_pos, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- try {
- // Delete the port forward from the host if needed.
- if (hostBridge != null)
- hostBridge.removePortForward(pfb);
+ // Use the new settings for the existing connection.
+ if (hostBridge != null)
+ updateHandler.postDelayed(new Runnable() {
+ public void run() {
+ hostBridge.enablePortForward(portForward);
+ updateHandler.sendEmptyMessage(-1);
+ }
+ }, LISTENER_CYCLE_TIME);
- hostdb.deletePortForward(pfb);
- } catch (Exception e) {
- Log.e(TAG, "Could not delete port forward", e);
- }
- updateHandler.sendEmptyMessage(-1);
- }
- })
- .setNegativeButton(R.string.delete_neg, null).create().show();
+ if (!hostdb.savePortForward(portForward)) {
+ throw new SQLException("Could not save port forward");
+ }
- return true;
- }
- });
- }
+ updateHandler.sendEmptyMessage(-1);
+ } catch (Exception e) {
+ Log.e(TAG, "Could not update port forward", e);
+ // TODO Show failure dialog.
+ }
+ }
+ })
+ .setNegativeButton(android.R.string.cancel, null).create().show();
- protected Handler updateHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- PortForwardListActivity.this.updateList();
- }
- };
+ return true;
+ }
+ });
+
+ MenuItem delete = menu.add(R.string.portforward_delete);
+ delete.setOnMenuItemClickListener(new OnMenuItemClickListener() {
+ public boolean onMenuItemClick(MenuItem item) {
+ // prompt user to make sure they really want this
+ new AlertDialog.Builder(PortForwardListActivity.this)
+ .setMessage(getString(R.string.delete_message, portForward.getNickname()))
+ .setPositiveButton(R.string.delete_pos, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ try {
+ // Delete the port forward from the host if needed.
+ if (hostBridge != null)
+ hostBridge.removePortForward(portForward);
+
+ hostdb.deletePortForward(portForward);
+ } catch (Exception e) {
+ Log.e(TAG, "Could not delete port forward", e);
+ }
+
+ updateHandler.sendEmptyMessage(-1);
+ }
+ })
+ .setNegativeButton(R.string.delete_neg, null).create().show();
- protected void updateList() {
- if (hostBridge != null) {
- this.portForwards = hostBridge.getPortForwards();
- } else {
- if (this.hostdb == null) return;
- this.portForwards = this.hostdb.getPortForwardsForHost(host);
+ return true;
+ }
+ });
}
-
- PortForwardAdapter adapter = new PortForwardAdapter(this, portForwards);
-
- this.setListAdapter(adapter);
}
- class PortForwardAdapter extends ArrayAdapter<PortForwardBean> {
- class ViewHolder {
- public TextView nickname;
- public TextView caption;
- }
-
- private List<PortForwardBean> portForwards;
+ @VisibleForTesting
+ private class PortForwardAdapter extends ItemAdapter {
+ private final List<PortForwardBean> portForwards;
public PortForwardAdapter(Context context, List<PortForwardBean> portForwards) {
- super(context, R.layout.item_portforward, portForwards);
-
+ super(context);
this.portForwards = portForwards;
}
@Override
- public View getView(int position, View convertView, ViewGroup parent) {
- ViewHolder holder;
-
- if (convertView == null) {
- convertView = inflater.inflate(R.layout.item_portforward, null, false);
-
- holder = new ViewHolder();
- holder.nickname = (TextView) convertView.findViewById(android.R.id.text1);
- holder.caption = (TextView) convertView.findViewById(android.R.id.text2);
+ public PortForwardViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ View v = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.item_portforward, parent, false);
+ PortForwardViewHolder vh = new PortForwardViewHolder(v);
+ return vh;
+ }
- convertView.setTag(holder);
- } else
- holder = (ViewHolder) convertView.getTag();
+ @Override
+ public void onBindViewHolder(ItemViewHolder holder, int position) {
+ PortForwardViewHolder portForwardHolder = (PortForwardViewHolder) holder;
+ PortForwardBean portForward = portForwards.get(position);
- PortForwardBean pfb = portForwards.get(position);
- holder.nickname.setText(pfb.getNickname());
- holder.caption.setText(pfb.getDescription());
+ portForwardHolder.portForward = portForward;
+ portForwardHolder.nickname.setText(portForward.getNickname());
+ portForwardHolder.caption.setText(portForward.getDescription());
- if (hostBridge != null && !pfb.isEnabled()) {
- holder.nickname.setPaintFlags(holder.nickname.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
- holder.caption.setPaintFlags(holder.caption.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
+ if (hostBridge != null && !portForward.isEnabled()) {
+ portForwardHolder.nickname.setPaintFlags(portForwardHolder.nickname.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
+ portForwardHolder.caption.setPaintFlags(portForwardHolder.caption.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
}
+ }
- return convertView;
+ @Override
+ public long getItemId(int position) {
+ return portForwards.get(position).getId();
+ }
+
+ @Override
+ public int getItemCount() {
+ return portForwards.size();
}
}
}