Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

improve "show QR" screen #3367

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 8 additions & 10 deletions src/main/java/org/thoughtcrime/securesms/qr/QrActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@
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;
Expand All @@ -42,7 +42,7 @@
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;
Expand All @@ -64,7 +64,7 @@ protected void onCreate(Bundle savedInstanceState) {
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());
Expand Down Expand Up @@ -118,7 +118,6 @@ public boolean onPrepareOptionsMenu(Menu menu) {
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);
}
Expand All @@ -141,12 +140,6 @@ public boolean onOptionsItemSelected(MenuItem item) {
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;
Expand Down Expand Up @@ -216,6 +209,11 @@ public void onActivityResult(int reqCode, int resultCode, final Intent data) {
}
}

@Override
public void onClick(View v) {
viewPager.setCurrentItem(TAB_SCAN);
}

private class ProfilePagerAdapter extends FragmentStatePagerAdapter {

private final QrActivity activity;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,12 +85,6 @@ public boolean onOptionsItemSelected(MenuItem item) {
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;
Expand Down
35 changes: 34 additions & 1 deletion src/main/java/org/thoughtcrime/securesms/qr/QrShowFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -86,7 +99,14 @@ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
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;
}
Expand Down Expand Up @@ -129,6 +149,19 @@ public void withdrawQr() {
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();
Expand Down
8 changes: 8 additions & 0 deletions src/main/res/drawable/ic_link_24.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#FFFFFF" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
<group
android:translateX="29"
android:translateY="12"
android:rotation="135">
<path android:fillColor="@android:color/white" android:pathData="M3.9,12c0,-1.71 1.39,-3.1 3.1,-3.1h4L11,7L7,7c-2.76,0 -5,2.24 -5,5s2.24,5 5,5h4v-1.9L7,15.1c-1.71,0 -3.1,-1.39 -3.1,-3.1zM8,13h8v-2L8,11v2zM17,7h-4v1.9h4c1.71,0 3.1,1.39 3.1,3.1s-1.39,3.1 -3.1,3.1h-4L13,17h4c2.76,0 5,-2.24 5,-5s-2.24,-5 -5,-5z"/>
</group>
</vector>
5 changes: 5 additions & 0 deletions src/main/res/drawable/ic_qr_code_scanner_24.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#FFFFFF" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">

<path android:fillColor="@android:color/white" android:pathData="M9.5,6.5v3h-3v-3H9.5M11,5H5v6h6V5L11,5zM9.5,14.5v3h-3v-3H9.5M11,13H5v6h6V13L11,13zM17.5,6.5v3h-3v-3H17.5M19,5h-6v6h6V5L19,5zM13,13h1.5v1.5H13V13zM14.5,14.5H16V16h-1.5V14.5zM16,13h1.5v1.5H16V13zM13,16h1.5v1.5H13V16zM14.5,17.5H16V19h-1.5V17.5zM16,16h1.5v1.5H16V16zM17.5,14.5H19V16h-1.5V14.5zM17.5,17.5H19V19h-1.5V17.5zM22,7h-2V4h-3V2h5V7zM22,22v-5h-2v3h-3v2H22zM2,22h5v-2H4v-3H2V22zM2,2v5h2V4h3V2H2z"/>

</vector>
47 changes: 47 additions & 0 deletions src/main/res/layout/dialog_share_invite_link.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:paddingTop="16dp"
android:paddingBottom="10dp"
android:orientation="vertical">

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16sp"
android:paddingBottom="16dp"
android:text="@string/share_invite_link_explain" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:padding="16dp"
android:background="@drawable/delete_account_item_background">

<TextView
android:id="@+id/invite_link"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:fontFamily="sans-serif"
android:textSize="16sp"
tools:text="https://i.delta.chat/#9AF055DB87EC48A1C009B6CA55E3712A6F7D346F&amp;a=botsindex%40nine.testrun.org&amp;n=Public%20Bots&amp;i=QpBSronexvP&amp;s=nAfQ0q_JomN"
/>

</LinearLayout>

</LinearLayout>

</ScrollView>

56 changes: 44 additions & 12 deletions src/main/res/layout/qr_show_fragment.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,36 +6,68 @@
android:layout_width="match_parent"
android:layout_height="match_parent">

<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.6"/>

<org.thoughtcrime.securesms.components.ScaleStableImageView
android:id="@+id/background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/background_hd"
tools:ignore="ContentDescription" />

<com.caverock.androidsvg.SVGImageView
android:id="@+id/qrImage"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="center"
android:padding="16dp"
android:contentDescription="@string/qrscan_title"
app:layout_constraintBottom_toTopOf="@id/share_link_button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="@id/guideline"
/>

<Button
android:id="@+id/share_link_button"
style="@style/ButtonPrimary"
android:layout_width="wrap_content"
<LinearLayout
android:id="@+id/buttons_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:paddingLeft="24dp"
android:paddingRight="24dp"
android:text="@string/share_invite_link"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
android:gravity="center"
app:layout_constraintTop_toBottomOf="@id/qrImage"
>

<Button
android:id="@+id/share_link_button"
style="@style/ButtonPrimary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:text="@string/link"
android:drawableStart="@drawable/ic_link_24"
/>

<Button
android:id="@+id/scan_qr_button"
style="@style/ButtonPrimary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:text="@string/scan"
android:drawableStart="@drawable/ic_qr_code_scanner_24"
android:drawablePadding="4dp"
/>

</LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>
9 changes: 0 additions & 9 deletions src/main/res/menu/qr_show.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,10 @@

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">

<item android:title="@string/menu_share"
android:id="@+id/share"
android:icon="@drawable/ic_share_white_24dp"
app:showAsAction="ifRoom"/>

<item android:title="@string/menu_new_classic_contact"
android:id="@+id/new_classic_contact"
app:showAsAction="never"/>

<item android:title="@string/menu_copy_to_clipboard"
android:id="@+id/copy"
app:showAsAction="never"/>

<item android:title="@string/paste_from_clipboard"
android:id="@+id/paste"
app:showAsAction="never"/>
Expand Down
3 changes: 3 additions & 0 deletions src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
<!-- deprecated, the word "or" to separate blocks in the user interface that are mutually exclusive -->
<string name="or_separator">or</string>
<string name="clear_search">Clear Search</string>
<string name="link">Link</string>
<string name="scan">Scan</string>
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="select">Select</string>
Expand Down Expand Up @@ -230,6 +232,7 @@
<string name="menu_message_details">Message Info</string>
<string name="menu_copy_to_clipboard">Copy to Clipboard</string>
<string name="share_invite_link">Share Invite Link</string>
<string name="share_invite_link_explain">Anyone with this link can view your profile and start a chat with you. Only share it with people you trust.</string>
<string name="invite_friends">Invite Friends</string>
<!-- %1$s is replaced by the user's invitation link ("https://i.delta.chat/...") -->
<string name="invite_friends_text">Contact me on Delta Chat:\n%1$s</string>
Expand Down
Loading