diff --git a/src/main/java/org/thoughtcrime/securesms/proxy/ProxyListAdapter.java b/src/main/java/org/thoughtcrime/securesms/proxy/ProxyListAdapter.java index b8182228a..c513528b4 100644 --- a/src/main/java/org/thoughtcrime/securesms/proxy/ProxyListAdapter.java +++ b/src/main/java/org/thoughtcrime/securesms/proxy/ProxyListAdapter.java @@ -88,11 +88,22 @@ public View getView(final int position, View v, final ViewGroup parent) { checkmark.setVisibility(View.GONE); status.setVisibility(View.GONE); } + v.setOnClickListener(view -> { if (itemClickListener != null) { itemClickListener.onItemClick(proxyUrl); } }); + v.findViewById(R.id.share).setOnClickListener(view -> { + if (itemClickListener != null) { + itemClickListener.onItemShare(proxyUrl); + } + }); + v.findViewById(R.id.delete).setOnClickListener(view -> { + if (itemClickListener != null) { + itemClickListener.onItemDelete(proxyUrl); + } + }); return v; } @@ -148,5 +159,8 @@ public void setItemClickListener(@Nullable ItemClickListener listener) { public interface ItemClickListener { void onItemClick(String proxyUrl); + void onItemShare(String proxyUrl); + void onItemDelete(String proxyUrl); } + } diff --git a/src/main/java/org/thoughtcrime/securesms/proxy/ProxySettingsActivity.java b/src/main/java/org/thoughtcrime/securesms/proxy/ProxySettingsActivity.java index 2b85888f4..a8c729735 100644 --- a/src/main/java/org/thoughtcrime/securesms/proxy/ProxySettingsActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/proxy/ProxySettingsActivity.java @@ -3,6 +3,7 @@ import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_PROXY_ENABLED; import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_PROXY_URL; +import android.content.Intent; import android.os.Bundle; import android.view.MenuItem; import android.view.View; @@ -24,6 +25,9 @@ import org.thoughtcrime.securesms.connect.DcEventCenter; import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.util.DynamicTheme; +import org.thoughtcrime.securesms.util.Util; + +import java.util.LinkedList; public class ProxySettingsActivity extends BaseActionBarActivity implements ProxyListAdapter.ItemClickListener, DcEventCenter.DcEventDelegate { @@ -100,6 +104,43 @@ public void onItemClick(String proxyUrl) { } } + @Override + public void onItemShare(String proxyUrl) { + Intent intent = new Intent(Intent.ACTION_SEND); + intent.setType("text/plain"); + intent.putExtra(Intent.EXTRA_TEXT, proxyUrl); + startActivity(Intent.createChooser(intent, getString(R.string.chat_share_with_title))); + } + + @Override + public void onItemDelete(String proxyUrl) { + String host = DcHelper.getContext(this).checkQr(proxyUrl).getText1(); + AlertDialog dialog = new AlertDialog.Builder(this) + .setTitle(R.string.proxy_delete) + .setMessage(getString(R.string.proxy_delete_explain, host)) + .setPositiveButton(R.string.delete, (dlg, btn) -> deleteProxy(proxyUrl)) + .setNegativeButton(android.R.string.cancel, null) + .show(); + Util.redPositiveButton(dialog); + } + + private void deleteProxy(String proxyUrl) { + final LinkedList proxies = new LinkedList<>(); + for (String proxy: DcHelper.get(this, CONFIG_PROXY_URL).split("\n")) { + if (!proxy.equals(proxyUrl)) { + proxies.add(proxy); + } + } + if (proxies.isEmpty()) { + DcHelper.set(this, CONFIG_PROXY_ENABLED, "0"); + proxySwitch.setChecked(false); + } + String proxyUrls = String.join("\n", proxies); + DcHelper.set(this, CONFIG_PROXY_URL, proxyUrls); + restartIO(); + adapter.changeData(proxyUrls); + } + private void showAddProxyDialog() { View view = View.inflate(this, R.layout.single_line_input, null); EditText inputField = view.findViewById(R.id.input_field); diff --git a/src/main/res/layout/proxy_list_item.xml b/src/main/res/layout/proxy_list_item.xml index bb2c1f03e..fc6328587 100644 --- a/src/main/res/layout/proxy_list_item.xml +++ b/src/main/res/layout/proxy_list_item.xml @@ -18,6 +18,7 @@ android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentStart="true" + android:layout_toStartOf="@id/share" android:drawablePadding="5dp" android:singleLine="true" android:ellipsize="marquee" @@ -31,6 +32,7 @@ android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_below="@+id/host" + android:layout_toStartOf="@id/share" android:layout_marginTop="5dp" android:gravity="center_vertical" > @@ -41,6 +43,7 @@ android:layout_height="wrap_content" android:layout_gravity="center_vertical|end" android:layout_marginEnd="5dp" + android:contentDescription="@null" android:src="@drawable/ic_delivery_status_sent" app:tint="?attr/conversation_list_item_date_color" /> @@ -75,4 +78,29 @@ + + + + diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 828cda10a..2440faff5 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -611,6 +611,8 @@ Enter proxy URL here Invalid or unsupported proxy URL Connections + Delete Proxy + Are you sure you want to delete \"%1$s\"? SOCKS5