diff --git a/src/main/java/org/thoughtcrime/securesms/qr/QrActivity.java b/src/main/java/org/thoughtcrime/securesms/qr/QrActivity.java index 209b51b72..75d14b70d 100644 --- a/src/main/java/org/thoughtcrime/securesms/qr/QrActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/qr/QrActivity.java @@ -12,10 +12,10 @@ import android.preference.PreferenceManager; import android.util.Log; import android.view.Menu; import android.view.MenuItem; +import android.view.View; import android.widget.Toast; import androidx.annotation.NonNull; -import androidx.core.view.MenuCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentStatePagerAdapter; @@ -42,7 +42,7 @@ import org.thoughtcrime.securesms.util.ViewUtil; import java.io.FileNotFoundException; import java.io.InputStream; -public class QrActivity extends BaseActionBarActivity { +public class QrActivity extends BaseActionBarActivity implements View.OnClickListener { private final static String TAG = QrActivity.class.getSimpleName(); private final static int REQUEST_CODE_IMAGE = 46243; @@ -64,7 +64,7 @@ public class QrActivity extends BaseActionBarActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_qr); - qrShowFragment = new QrShowFragment(); + qrShowFragment = new QrShowFragment(this); tabLayout = ViewUtil.findById(this, R.id.tab_layout); viewPager = ViewUtil.findById(this, R.id.pager); ProfilePagerAdapter adapter = new ProfilePagerAdapter(this, getSupportFragmentManager()); @@ -115,7 +115,6 @@ public class QrActivity extends BaseActionBarActivity { menu.findItem(R.id.new_classic_contact).setVisible(!DcHelper.getContext(this).isChatmail()); if(tabLayout.getSelectedTabPosition() == TAB_SCAN) { menu.findItem(R.id.withdraw).setVisible(false); - menu.findItem(R.id.copy).setVisible(false); } return super.onPrepareOptionsMenu(menu); } @@ -131,12 +130,6 @@ public class QrActivity extends BaseActionBarActivity { case R.id.new_classic_contact: this.startActivity(new Intent(this, NewContactActivity.class)); break; - case R.id.share: - qrShowFragment.shareInviteURL(); - break; - case R.id.copy: - qrShowFragment.copyQrData(); - break; case R.id.withdraw: qrShowFragment.withdrawQr(); break; @@ -206,6 +199,11 @@ public class QrActivity extends BaseActionBarActivity { } } + @Override + public void onClick(View v) { + viewPager.setCurrentItem(TAB_SCAN); + } + private class ProfilePagerAdapter extends FragmentStatePagerAdapter { private final QrActivity activity; diff --git a/src/main/java/org/thoughtcrime/securesms/qr/QrShowActivity.java b/src/main/java/org/thoughtcrime/securesms/qr/QrShowActivity.java index bc0fa35a8..23d0f1e0b 100644 --- a/src/main/java/org/thoughtcrime/securesms/qr/QrShowActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/qr/QrShowActivity.java @@ -85,12 +85,6 @@ public class QrShowActivity extends AppCompatActivity { case android.R.id.home: finish(); return true; - case R.id.share: - fragment.shareInviteURL(); - break; - case R.id.copy: - fragment.copyQrData(); - break; case R.id.withdraw: fragment.withdrawQr(); break; diff --git a/src/main/java/org/thoughtcrime/securesms/qr/QrShowFragment.java b/src/main/java/org/thoughtcrime/securesms/qr/QrShowFragment.java index 3395db306..4e6f3fa24 100644 --- a/src/main/java/org/thoughtcrime/securesms/qr/QrShowFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/qr/QrShowFragment.java @@ -9,6 +9,8 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; +import android.widget.Button; +import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; @@ -46,6 +48,17 @@ public class QrShowFragment extends Fragment implements DcEventCenter.DcEventDel private DcContext dcContext; + private View.OnClickListener scanClicklistener; + + public QrShowFragment() { + this(null); + } + + public QrShowFragment(View.OnClickListener scanClicklistener) { + super(); + this.scanClicklistener = scanClicklistener; + } + @Override public void onCreate(Bundle bundle) { super.onCreate(bundle); @@ -86,7 +99,14 @@ public class QrShowFragment extends Fragment implements DcEventCenter.DcEventDel e.printStackTrace(); } - view.findViewById(R.id.share_link_button).setOnClickListener((v) -> shareInviteURL()); + view.findViewById(R.id.share_link_button).setOnClickListener((v) -> showInviteLinkDialog()); + Button scanBtn = view.findViewById(R.id.scan_qr_button); + if (scanClicklistener != null) { + scanBtn.setVisibility(View.VISIBLE); + scanBtn.setOnClickListener(scanClicklistener); + } else { + scanBtn.setVisibility(View.GONE); + } return view; } @@ -129,6 +149,19 @@ public class QrShowFragment extends Fragment implements DcEventCenter.DcEventDel builder.create().show(); } + public void showInviteLinkDialog() { + View view = View.inflate(getActivity(), R.layout.dialog_share_invite_link, null); + String inviteURL = Util.QrDataToInviteURL(dcContext.getSecurejoinQr(chatId)); + ((TextView)view.findViewById(R.id.invite_link)).setText(inviteURL); + new AlertDialog.Builder(getActivity()) + .setView(view) + .setNegativeButton(R.string.cancel, null) + .setNeutralButton(R.string.menu_copy_to_clipboard, (d, b) -> copyQrData()) + .setPositiveButton(R.string.menu_share, (d, b) -> shareInviteURL()) + .create() + .show(); + } + @Override public void onResume() { super.onResume(); diff --git a/src/main/res/drawable/ic_link_24.xml b/src/main/res/drawable/ic_link_24.xml new file mode 100644 index 000000000..54d9934a3 --- /dev/null +++ b/src/main/res/drawable/ic_link_24.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/src/main/res/drawable/ic_qr_code_scanner_24.xml b/src/main/res/drawable/ic_qr_code_scanner_24.xml new file mode 100644 index 000000000..725b35ea7 --- /dev/null +++ b/src/main/res/drawable/ic_qr_code_scanner_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/res/layout/dialog_share_invite_link.xml b/src/main/res/layout/dialog_share_invite_link.xml new file mode 100644 index 000000000..c2e3c99fa --- /dev/null +++ b/src/main/res/layout/dialog_share_invite_link.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + diff --git a/src/main/res/layout/qr_show_fragment.xml b/src/main/res/layout/qr_show_fragment.xml index 99b06d5ae..586179ed5 100644 --- a/src/main/res/layout/qr_show_fragment.xml +++ b/src/main/res/layout/qr_show_fragment.xml @@ -6,6 +6,13 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + + + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="@id/guideline" + /> -