Skip to content

Commit

Permalink
Merge pull request #3367 from deltachat/adb/issue-3385
Browse files Browse the repository at this point in the history
improve "show QR" screen
  • Loading branch information
adbenitez authored Oct 22, 2024
2 parents eaa6981 + cd8f799 commit 285f59e
Show file tree
Hide file tree
Showing 9 changed files with 151 additions and 38 deletions.
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 @@ -115,7 +115,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 @@ -131,12 +130,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 @@ -206,6 +199,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
5 changes: 5 additions & 0 deletions src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
<!-- 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>
<!-- a noun, used on a button, short for "show link" -->
<string name="link">Link</string>
<!-- "scan" in the meaning of "scan QR code" -->
<string name="scan">Scan</string>
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="select">Select</string>
Expand Down Expand Up @@ -234,6 +238,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

0 comments on commit 285f59e

Please sign in to comment.