From 66f27ff805b73525ee63c9112bd2cae34bf0d206 Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Mon, 14 Jun 2021 15:38:29 +0200 Subject: [PATCH] Add ability to copy/share whitelist --- .../com/emanuelef/remote_capture/Utils.java | 14 +++++ .../activities/WhitelistActivity.java | 52 +++++++++++++++++++ .../adapters/WhitelistEditAdapter.java | 8 ++- .../interfaces/TextAdapter.java | 6 +++ 4 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/emanuelef/remote_capture/interfaces/TextAdapter.java diff --git a/app/src/main/java/com/emanuelef/remote_capture/Utils.java b/app/src/main/java/com/emanuelef/remote_capture/Utils.java index c6e30802..60de1348 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/Utils.java +++ b/app/src/main/java/com/emanuelef/remote_capture/Utils.java @@ -64,6 +64,7 @@ import androidx.appcompat.app.AppCompatDelegate; import androidx.appcompat.widget.SearchView; import androidx.preference.PreferenceManager; +import com.emanuelef.remote_capture.interfaces.TextAdapter; import com.emanuelef.remote_capture.model.AppDescriptor; import com.emanuelef.remote_capture.model.Prefs; import com.emanuelef.remote_capture.views.AppsListView; @@ -415,6 +416,19 @@ public class Utils { return builder.toString(); } + public static String adapter2Text(TextAdapter adapter) { + StringBuilder builder = new StringBuilder(); + + for(int i=0; i< adapter.getCount(); i++) { + String text = adapter.getItemText(i); + + builder.append(text); + builder.append("\n"); + } + + return builder.toString(); + } + public static boolean isTv(Context context) { UiModeManager uiModeManager = (UiModeManager) context.getSystemService(Context.UI_MODE_SERVICE); diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/WhitelistActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/WhitelistActivity.java index 674f0ac7..1b4ec4f4 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/WhitelistActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/WhitelistActivity.java @@ -19,14 +19,24 @@ package com.emanuelef.remote_capture.activities; +import android.content.Intent; import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.widget.ListView; + +import androidx.annotation.NonNull; import com.emanuelef.remote_capture.R; +import com.emanuelef.remote_capture.Utils; +import com.emanuelef.remote_capture.adapters.WhitelistEditAdapter; import com.emanuelef.remote_capture.fragments.AppsFragment; import com.emanuelef.remote_capture.fragments.WhitelistFragment; public class WhitelistActivity extends BaseActivity { private static final String TAG = "WhitelistActivity"; + private WhitelistFragment mFragment; @Override protected void onCreate(Bundle savedInstanceState) { @@ -39,4 +49,46 @@ public class WhitelistActivity extends BaseActivity { .replace(R.id.whitelist_fragment, new WhitelistFragment()) .commit(); } + + @Override + protected void onDestroy() { + super.onDestroy(); + mFragment = null; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.copy_share_menu, menu); + + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + int id = item.getItemId(); + ListView lv = findViewById(R.id.whitelist); + + if(lv == null) + return false; + + if(id == R.id.copy_to_clipboard) { + String contents = Utils.adapter2Text((WhitelistEditAdapter)lv.getAdapter()); + Utils.copyToClipboard(this, contents); + return true; + } else if(id == R.id.share) { + String contents = Utils.adapter2Text((WhitelistEditAdapter)lv.getAdapter()); + + Intent intent = new Intent(android.content.Intent.ACTION_SEND); + intent.setType("text/plain"); + intent.putExtra(android.content.Intent.EXTRA_SUBJECT, getString(R.string.whitelist)); + intent.putExtra(android.content.Intent.EXTRA_TEXT, contents); + + startActivity(Intent.createChooser(intent, getResources().getString(R.string.share))); + + return true; + } + + return super.onOptionsItemSelected(item); + } } diff --git a/app/src/main/java/com/emanuelef/remote_capture/adapters/WhitelistEditAdapter.java b/app/src/main/java/com/emanuelef/remote_capture/adapters/WhitelistEditAdapter.java index d1d488e9..5c599421 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/adapters/WhitelistEditAdapter.java +++ b/app/src/main/java/com/emanuelef/remote_capture/adapters/WhitelistEditAdapter.java @@ -30,11 +30,12 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.emanuelef.remote_capture.R; +import com.emanuelef.remote_capture.interfaces.TextAdapter; import com.emanuelef.remote_capture.model.ConnectionsMatcher; import java.util.Iterator; -public class WhitelistEditAdapter extends ArrayAdapter { +public class WhitelistEditAdapter extends ArrayAdapter implements TextAdapter { private final LayoutInflater mLayoutInflater; public WhitelistEditAdapter(Context context, Iterator items) { @@ -58,4 +59,9 @@ public class WhitelistEditAdapter extends ArrayAdapter return convertView; } + + @Override + public String getItemText(int pos) { + return getItem(pos).getLabel(); + } } diff --git a/app/src/main/java/com/emanuelef/remote_capture/interfaces/TextAdapter.java b/app/src/main/java/com/emanuelef/remote_capture/interfaces/TextAdapter.java new file mode 100644 index 00000000..7988416d --- /dev/null +++ b/app/src/main/java/com/emanuelef/remote_capture/interfaces/TextAdapter.java @@ -0,0 +1,6 @@ +package com.emanuelef.remote_capture.interfaces; + +public interface TextAdapter { + String getItemText(int pos); + int getCount(); +}