mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-16 20:59:54 +01:00
Show QR code by default instead of link
This commit is contained in:
@@ -17,8 +17,10 @@ import org.briarproject.briar.android.blog.RssFeedManageActivity;
|
|||||||
import org.briarproject.briar.android.blog.WriteBlogPostActivity;
|
import org.briarproject.briar.android.blog.WriteBlogPostActivity;
|
||||||
import org.briarproject.briar.android.contact.ContactLinkInputActivity;
|
import org.briarproject.briar.android.contact.ContactLinkInputActivity;
|
||||||
import org.briarproject.briar.android.contact.ContactLinkOutputActivity;
|
import org.briarproject.briar.android.contact.ContactLinkOutputActivity;
|
||||||
|
import org.briarproject.briar.android.contact.ContactLinkOutputFragment;
|
||||||
import org.briarproject.briar.android.contact.ContactListFragment;
|
import org.briarproject.briar.android.contact.ContactListFragment;
|
||||||
import org.briarproject.briar.android.contact.ContactModule;
|
import org.briarproject.briar.android.contact.ContactModule;
|
||||||
|
import org.briarproject.briar.android.contact.ContactQrCodeOutputFragment;
|
||||||
import org.briarproject.briar.android.contact.ConversationActivity;
|
import org.briarproject.briar.android.contact.ConversationActivity;
|
||||||
import org.briarproject.briar.android.contact.PendingRequestsActivity;
|
import org.briarproject.briar.android.contact.PendingRequestsActivity;
|
||||||
import org.briarproject.briar.android.forum.CreateForumActivity;
|
import org.briarproject.briar.android.forum.CreateForumActivity;
|
||||||
@@ -173,6 +175,8 @@ public interface ActivityComponent {
|
|||||||
void inject(ContactLinkOutputActivity activity);
|
void inject(ContactLinkOutputActivity activity);
|
||||||
void inject(ContactLinkInputActivity activity);
|
void inject(ContactLinkInputActivity activity);
|
||||||
void inject(PendingRequestsActivity activity);
|
void inject(PendingRequestsActivity activity);
|
||||||
|
void inject(ContactLinkOutputFragment activity);
|
||||||
|
void inject(ContactQrCodeOutputFragment activity);
|
||||||
|
|
||||||
// Fragments
|
// Fragments
|
||||||
void inject(AuthorNameFragment fragment);
|
void inject(AuthorNameFragment fragment);
|
||||||
|
|||||||
@@ -1,27 +1,23 @@
|
|||||||
package org.briarproject.briar.android.contact;
|
package org.briarproject.briar.android.contact;
|
||||||
|
|
||||||
import android.content.ClipData;
|
|
||||||
import android.content.ClipboardManager;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v7.app.ActionBar;
|
import android.support.v7.app.ActionBar;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.TextView;
|
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
import org.briarproject.briar.R;
|
import org.briarproject.briar.R;
|
||||||
import org.briarproject.briar.android.activity.ActivityComponent;
|
import org.briarproject.briar.android.activity.ActivityComponent;
|
||||||
import org.briarproject.briar.android.activity.BriarActivity;
|
import org.briarproject.briar.android.activity.BriarActivity;
|
||||||
|
import org.briarproject.briar.android.fragment.BaseFragment.BaseFragmentListener;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import static android.content.Intent.ACTION_SEND;
|
public class ContactLinkOutputActivity extends BriarActivity implements
|
||||||
import static android.content.Intent.EXTRA_TEXT;
|
BaseFragmentListener {
|
||||||
import static android.widget.Toast.LENGTH_SHORT;
|
|
||||||
import static org.briarproject.bramble.util.StringUtils.getRandomBase32String;
|
|
||||||
|
|
||||||
public class ContactLinkOutputActivity extends BriarActivity {
|
private Menu menu;
|
||||||
|
private boolean showQrCode = true;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void injectActivity(ActivityComponent component) {
|
public void injectActivity(ActivityComponent component) {
|
||||||
@@ -32,38 +28,25 @@ public class ContactLinkOutputActivity extends BriarActivity {
|
|||||||
public void onCreate(@Nullable Bundle state) {
|
public void onCreate(@Nullable Bundle state) {
|
||||||
super.onCreate(state);
|
super.onCreate(state);
|
||||||
|
|
||||||
setContentView(R.layout.activity_contact_link_output);
|
setContentView(R.layout.activity_fragment_container);
|
||||||
|
|
||||||
ActionBar ab = getSupportActionBar();
|
ActionBar ab = getSupportActionBar();
|
||||||
if (ab != null) {
|
if (ab != null) {
|
||||||
ab.setDisplayHomeAsUpEnabled(true);
|
ab.setDisplayHomeAsUpEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
String link = "briar://" + getRandomBase32String(64);
|
if (state == null) {
|
||||||
|
showInitialFragment(new ContactQrCodeOutputFragment());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TextView linkView = findViewById(R.id.linkView);
|
@Override
|
||||||
linkView.setText(link);
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
MenuInflater inflater = getMenuInflater();
|
||||||
ClipboardManager clipboard = (ClipboardManager)
|
inflater.inflate(R.menu.contact_output_actions, menu);
|
||||||
getSystemService(CLIPBOARD_SERVICE);
|
menu.findItem(R.id.action_switch)
|
||||||
if (clipboard == null) throw new AssertionError();
|
.setTitle(showQrCode ? R.string.show_link : R.string.show_code);
|
||||||
ClipData clip = ClipData.newPlainText(
|
return super.onCreateOptionsMenu(menu);
|
||||||
getString(R.string.link_clip_label), link);
|
|
||||||
|
|
||||||
Button copyButton = findViewById(R.id.copyButton);
|
|
||||||
copyButton.setOnClickListener(v -> {
|
|
||||||
clipboard.setPrimaryClip(clip);
|
|
||||||
Toast.makeText(this, R.string.link_copied_toast, LENGTH_SHORT)
|
|
||||||
.show();
|
|
||||||
});
|
|
||||||
|
|
||||||
Button shareButton = findViewById(R.id.shareButton);
|
|
||||||
shareButton.setOnClickListener(v -> {
|
|
||||||
Intent i = new Intent(ACTION_SEND);
|
|
||||||
i.putExtra(EXTRA_TEXT, link);
|
|
||||||
i.setType("text/plain");
|
|
||||||
startActivity(i);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -72,9 +55,21 @@ public class ContactLinkOutputActivity extends BriarActivity {
|
|||||||
case android.R.id.home:
|
case android.R.id.home:
|
||||||
onBackPressed();
|
onBackPressed();
|
||||||
return true;
|
return true;
|
||||||
|
case R.id.action_switch:
|
||||||
|
switchFragment();
|
||||||
|
return true;
|
||||||
default:
|
default:
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void switchFragment() {
|
||||||
|
if (showQrCode) {
|
||||||
|
showInitialFragment(new ContactLinkOutputFragment());
|
||||||
|
} else {
|
||||||
|
showInitialFragment(new ContactQrCodeOutputFragment());
|
||||||
|
}
|
||||||
|
showQrCode = !showQrCode;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,82 @@
|
|||||||
|
package org.briarproject.briar.android.contact;
|
||||||
|
|
||||||
|
import android.content.ClipData;
|
||||||
|
import android.content.ClipboardManager;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
|
import org.briarproject.briar.R;
|
||||||
|
import org.briarproject.briar.android.activity.ActivityComponent;
|
||||||
|
import org.briarproject.briar.android.fragment.BaseFragment;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import static android.content.Context.CLIPBOARD_SERVICE;
|
||||||
|
import static android.content.Intent.ACTION_SEND;
|
||||||
|
import static android.content.Intent.EXTRA_TEXT;
|
||||||
|
import static android.widget.Toast.LENGTH_SHORT;
|
||||||
|
import static org.briarproject.bramble.util.StringUtils.getRandomBase32String;
|
||||||
|
|
||||||
|
@NotNullByDefault
|
||||||
|
public class ContactLinkOutputFragment extends BaseFragment {
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater,
|
||||||
|
@Nullable ViewGroup container,
|
||||||
|
@Nullable Bundle savedInstanceState) {
|
||||||
|
|
||||||
|
getActivity().setTitle(R.string.send_link_title);
|
||||||
|
|
||||||
|
View v = inflater.inflate(R.layout.fragment_contact_link_output,
|
||||||
|
container, false);
|
||||||
|
|
||||||
|
String link = "briar://" + getRandomBase32String(64);
|
||||||
|
|
||||||
|
TextView linkView = v.findViewById(R.id.linkView);
|
||||||
|
linkView.setText(link);
|
||||||
|
|
||||||
|
ClipboardManager clipboard = (ClipboardManager)
|
||||||
|
getContext().getSystemService(CLIPBOARD_SERVICE);
|
||||||
|
if (clipboard == null) throw new AssertionError();
|
||||||
|
ClipData clip = ClipData.newPlainText(
|
||||||
|
getString(R.string.link_clip_label), link);
|
||||||
|
|
||||||
|
Button copyButton = v.findViewById(R.id.copyButton);
|
||||||
|
copyButton.setOnClickListener(view -> {
|
||||||
|
clipboard.setPrimaryClip(clip);
|
||||||
|
Toast.makeText(getContext(), R.string.link_copied_toast,
|
||||||
|
LENGTH_SHORT).show();
|
||||||
|
});
|
||||||
|
|
||||||
|
Button shareButton = v.findViewById(R.id.shareButton);
|
||||||
|
shareButton.setOnClickListener(view -> {
|
||||||
|
Intent i = new Intent(ACTION_SEND);
|
||||||
|
i.putExtra(EXTRA_TEXT, link);
|
||||||
|
i.setType("text/plain");
|
||||||
|
startActivity(i);
|
||||||
|
});
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final String TAG = ContactLinkOutputFragment.class.getName();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUniqueTag() {
|
||||||
|
return TAG;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void injectFragment(ActivityComponent component) {
|
||||||
|
component.inject(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
package org.briarproject.briar.android.contact;
|
||||||
|
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.util.DisplayMetrics;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
|
import org.briarproject.briar.R;
|
||||||
|
import org.briarproject.briar.android.activity.ActivityComponent;
|
||||||
|
import org.briarproject.briar.android.fragment.BaseFragment;
|
||||||
|
import org.briarproject.briar.android.view.QrCodeView;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import static android.view.View.GONE;
|
||||||
|
import static android.view.View.VISIBLE;
|
||||||
|
import static org.briarproject.bramble.util.StringUtils.getRandomBase32String;
|
||||||
|
import static org.briarproject.briar.android.keyagreement.QrCodeUtils.createQrCode;
|
||||||
|
|
||||||
|
@NotNullByDefault
|
||||||
|
public class ContactQrCodeOutputFragment extends BaseFragment
|
||||||
|
implements QrCodeView.FullscreenListener {
|
||||||
|
|
||||||
|
private View linkIntro;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater,
|
||||||
|
@Nullable ViewGroup container,
|
||||||
|
@Nullable Bundle savedInstanceState) {
|
||||||
|
|
||||||
|
getActivity().setTitle(R.string.send_code_title);
|
||||||
|
|
||||||
|
View v = inflater.inflate(R.layout.fragment_contact_qr_code_output,
|
||||||
|
container, false);
|
||||||
|
linkIntro = v.findViewById(R.id.linkIntro);
|
||||||
|
|
||||||
|
String link = "briar://" + getRandomBase32String(64);
|
||||||
|
DisplayMetrics dm = getResources().getDisplayMetrics();
|
||||||
|
Bitmap qrCode = createQrCode(dm, link);
|
||||||
|
QrCodeView qrCodeView = v.findViewById(R.id.qrCodeView);
|
||||||
|
qrCodeView.setQrCode(qrCode);
|
||||||
|
qrCodeView.setFullscreenListener(this);
|
||||||
|
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final String TAG = ContactQrCodeOutputFragment.class.getName();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUniqueTag() {
|
||||||
|
return TAG;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void injectFragment(ActivityComponent component) {
|
||||||
|
component.inject(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setFullscreen(boolean fullscreen) {
|
||||||
|
linkIntro.setVisibility(fullscreen ? GONE : VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -21,13 +21,13 @@ import static java.util.logging.Level.WARNING;
|
|||||||
import static org.briarproject.bramble.util.LogUtils.logException;
|
import static org.briarproject.bramble.util.LogUtils.logException;
|
||||||
|
|
||||||
@NotNullByDefault
|
@NotNullByDefault
|
||||||
class QrCodeUtils {
|
public class QrCodeUtils {
|
||||||
|
|
||||||
private static final Logger LOG =
|
private static final Logger LOG =
|
||||||
Logger.getLogger(QrCodeUtils.class.getName());
|
Logger.getLogger(QrCodeUtils.class.getName());
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
static Bitmap createQrCode(DisplayMetrics dm, String input) {
|
public static Bitmap createQrCode(DisplayMetrics dm, String input) {
|
||||||
int smallestDimen = Math.min(dm.widthPixels, dm.heightPixels);
|
int smallestDimen = Math.min(dm.widthPixels, dm.heightPixels);
|
||||||
try {
|
try {
|
||||||
// Generate QR code
|
// Generate QR code
|
||||||
|
|||||||
9
briar-android/src/main/res/drawable/ic_qr_code.xml
Normal file
9
briar-android/src/main/res/drawable/ic_qr_code.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportHeight="24"
|
||||||
|
android:viewportWidth="24">
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFFFF"
|
||||||
|
android:pathData="M3,11H5V13H3V11M11,5H13V9H11V5M9,11H13V15H11V13H9V11M15,11H17V13H19V11H21V13H19V15H21V19H19V21H17V19H13V21H11V17H15V15H17V13H15V11M19,19V15H17V19H19M15,3H21V9H15V3M17,5V7H19V5H17M3,3H9V9H3V3M5,5V7H7V5H5M3,15H9V21H3V15M5,17V19H7V17H5Z"/>
|
||||||
|
</vector>
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<android.support.constraint.ConstraintLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/linkIntro"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_margin="@dimen/margin_large"
|
||||||
|
android:text="@string/send_code_instructions"
|
||||||
|
android:textIsSelectable="true"
|
||||||
|
android:textSize="18sp"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/qrCodeView"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintVertical_weight="1"
|
||||||
|
tools:visibility="visible"/>
|
||||||
|
|
||||||
|
<org.briarproject.briar.android.view.QrCodeView
|
||||||
|
android:id="@+id/qrCodeView"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:background="@android:color/white"
|
||||||
|
android:textIsSelectable="true"
|
||||||
|
android:textSize="18sp"
|
||||||
|
android:typeface="monospace"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/linkIntro"
|
||||||
|
app:layout_constraintVertical_weight="1"/>
|
||||||
|
|
||||||
|
</android.support.constraint.ConstraintLayout>
|
||||||
@@ -14,11 +14,17 @@
|
|||||||
android:icon="@drawable/ic_link"
|
android:icon="@drawable/ic_link"
|
||||||
android:title="@string/open_link_title"
|
android:title="@string/open_link_title"
|
||||||
app:showAsAction="never"/>
|
app:showAsAction="never"/>
|
||||||
|
<!--
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_send_link"
|
android:id="@+id/action_send_link"
|
||||||
android:icon="@drawable/ic_link"
|
android:icon="@drawable/ic_link"
|
||||||
android:title="@string/send_link_title"
|
android:title="@string/send_link_title"
|
||||||
app:showAsAction="never"/>
|
app:showAsAction="never"/>
|
||||||
|
-->
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_send_link"
|
||||||
|
android:icon="@drawable/ic_qr_code"
|
||||||
|
android:title="@string/send_code_title"
|
||||||
|
app:showAsAction="never"/>
|
||||||
|
|
||||||
</menu>
|
</menu>
|
||||||
11
briar-android/src/main/res/menu/contact_output_actions.xml
Normal file
11
briar-android/src/main/res/menu/contact_output_actions.xml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<menu
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_switch"
|
||||||
|
android:title="@string/show_link"
|
||||||
|
app:showAsAction="never"/>
|
||||||
|
|
||||||
|
</menu>
|
||||||
@@ -154,6 +154,9 @@
|
|||||||
<string name="add_contact_nearby_title">Add Contact Nearby</string>
|
<string name="add_contact_nearby_title">Add Contact Nearby</string>
|
||||||
<string name="open_link_title">Open Link</string>
|
<string name="open_link_title">Open Link</string>
|
||||||
<string name="send_link_title">Send My Link</string>
|
<string name="send_link_title">Send My Link</string>
|
||||||
|
<string name="send_code_title">Send My QR Code</string>
|
||||||
|
<string name="show_link">Show Link</string>
|
||||||
|
<string name="show_code">Show QR code</string>
|
||||||
<string name="contact_name_hint">Contact name</string>
|
<string name="contact_name_hint">Contact name</string>
|
||||||
<string name="contact_link_hint">Contact link</string>
|
<string name="contact_link_hint">Contact link</string>
|
||||||
<string name="paste_button">Paste</string>
|
<string name="paste_button">Paste</string>
|
||||||
@@ -161,6 +164,7 @@
|
|||||||
<string name="share_button">Share</string>
|
<string name="share_button">Share</string>
|
||||||
<string name="copy_button">Copy</string>
|
<string name="copy_button">Copy</string>
|
||||||
<string name="send_link_instructions">Send this link to your contact:</string>
|
<string name="send_link_instructions">Send this link to your contact:</string>
|
||||||
|
<string name="send_code_instructions">Let your contact scan this QR code with Briar:</string>
|
||||||
<string name="link_clip_label">Briar link</string>
|
<string name="link_clip_label">Briar link</string>
|
||||||
<string name="link_copied_toast">Link copied</string>
|
<string name="link_copied_toast">Link copied</string>
|
||||||
<string name="pending_contact_requests_snackbar">"There are pending contact requests"</string>
|
<string name="pending_contact_requests_snackbar">"There are pending contact requests"</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user