diff options
author | Ryan Hansberry <rhansby@gmail.com> | 2015-09-22 10:41:37 -0700 |
---|---|---|
committer | Ryan Hansberry <rhansby@gmail.com> | 2015-09-22 11:59:13 -0700 |
commit | 0f293ab7927470ab3a2d78064cc3c66e2523415f (patch) | |
tree | 0f503c5f09b19df25d9ec7799ac542ea866792d4 /app/src/main/java/org/connectbot/PortForwardListActivity.java | |
parent | d2164043d4748b0269937cb983929c6c2e8c6fff (diff) | |
download | connectbot-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.java | 375 |
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(); } } } |