mirror of
https://github.com/ArcaneChat/android.git
synced 2026-07-03 14:05:24 +02:00
display xdc community files
This commit is contained in:
@@ -50,7 +50,8 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout android:layout_width="match_parent"
|
||||
<LinearLayout android:id="@+id/avatar_and_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
<resources>
|
||||
<string name="community">Comunidad</string>
|
||||
<string name="description">Descripción</string>
|
||||
<string name="ask_join_community">¿Quieres unirte a la comunidad \"%1$s\"?</string>
|
||||
<string name="community_set_name_explain">Establece un nombre que otros puedan reconocer.</string>
|
||||
<!-- common strings without special context -->
|
||||
<string name="app_name">DeltaLab</string>
|
||||
<string name="ok">OK</string>
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
<resources>
|
||||
<string name="community">Community</string>
|
||||
<string name="description">Description</string>
|
||||
<string name="ask_join_community">Do you want to join the Community \"%1$s\"?</string>
|
||||
<string name="community_set_name_explain">Set a name that other will recognize.</string>
|
||||
<string name="could_not_open_file">Could not open file</string>
|
||||
<!-- common strings without special context -->
|
||||
<string name="app_name">DeltaLab</string>
|
||||
|
||||
@@ -22,6 +22,7 @@ import android.content.res.TypedArray;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.graphics.Rect;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.text.Spannable;
|
||||
import android.text.TextUtils;
|
||||
@@ -32,10 +33,12 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.DimenRes;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
|
||||
import com.b44t.messenger.DcChat;
|
||||
import com.b44t.messenger.DcContact;
|
||||
@@ -43,6 +46,7 @@ import com.b44t.messenger.DcMsg;
|
||||
import com.b44t.messenger.rpc.Reactions;
|
||||
import com.b44t.messenger.rpc.RpcException;
|
||||
|
||||
import org.json.JSONObject;
|
||||
import org.thoughtcrime.securesms.audio.AudioSlidePlayer;
|
||||
import org.thoughtcrime.securesms.components.AudioView;
|
||||
import org.thoughtcrime.securesms.components.AvatarImageView;
|
||||
@@ -62,8 +66,10 @@ import org.thoughtcrime.securesms.mms.Slide;
|
||||
import org.thoughtcrime.securesms.mms.SlideClickListener;
|
||||
import org.thoughtcrime.securesms.mms.SlideDeck;
|
||||
import org.thoughtcrime.securesms.mms.StickerSlide;
|
||||
import org.thoughtcrime.securesms.providers.PersistentBlobProvider;
|
||||
import org.thoughtcrime.securesms.reactions.ReactionsConversationView;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.util.JsonUtils;
|
||||
import org.thoughtcrime.securesms.util.LongClickMovementMethod;
|
||||
import org.thoughtcrime.securesms.util.MarkdownUtil;
|
||||
import org.thoughtcrime.securesms.util.MediaUtil;
|
||||
@@ -414,10 +420,14 @@ public class ConversationItem extends BaseConversationItem
|
||||
} else if (messageRecord.getType() == DcMsg.DC_MSG_WEBXDC) {
|
||||
msgActionButton.setVisibility(View.VISIBLE);
|
||||
msgActionButton.setEnabled(true);
|
||||
msgActionButton.setText(R.string.start_app);
|
||||
msgActionButton.setText(webxdcViewStub.get().isCommunity()? R.string.join: R.string.start_app);
|
||||
msgActionButton.setOnClickListener(view -> {
|
||||
if (batchSelected.isEmpty()) {
|
||||
WebxdcActivity.openWebxdcActivity(getContext(), messageRecord);
|
||||
if (webxdcViewStub.get().isCommunity()) {
|
||||
joinCommunity(messageRecord);
|
||||
} else {
|
||||
WebxdcActivity.openWebxdcActivity(getContext(), messageRecord);
|
||||
}
|
||||
} else {
|
||||
passthroughClickListener.onClick(view);
|
||||
}
|
||||
@@ -629,6 +639,29 @@ public class ConversationItem extends BaseConversationItem
|
||||
mediaThumbnailStub.get().setOutlineCorners(topLeft, topRight, bottomRight, bottomLeft);
|
||||
}
|
||||
|
||||
private void joinCommunity(DcMsg dcMsg) {
|
||||
JSONObject info = dcMsg.getWebxdcInfo();
|
||||
String name = JsonUtils.optString(info, "name");
|
||||
new AlertDialog.Builder(getContext())
|
||||
.setMessage(getContext().getString(R.string.ask_join_community, name))
|
||||
.setPositiveButton(R.string.yes, (dialog, which) -> {
|
||||
String filename = "backup.tar";
|
||||
byte[] blob = dcMsg.getWebxdcBlob(filename);
|
||||
if (blob == null) {
|
||||
Toast.makeText(getContext(), "invalid community file", Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
Intent intent = new Intent(getContext(), WelcomeActivity.class);
|
||||
String mimeType = "application/octet-stream";
|
||||
Uri uri = PersistentBlobProvider.getInstance().create(getContext(), blob, mimeType, filename);
|
||||
intent.setType(mimeType);
|
||||
intent.putExtra(WelcomeActivity.COMMUNITY_EXTRA, uri);
|
||||
getContext().startActivity(intent);
|
||||
})
|
||||
.setNegativeButton(R.string.no, null)
|
||||
.show();
|
||||
}
|
||||
|
||||
private void setContactPhoto() {
|
||||
if (contactPhoto == null) return;
|
||||
|
||||
@@ -852,7 +885,7 @@ public class ConversationItem extends BaseConversationItem
|
||||
if (shouldInterceptClicks(messageRecord) || !batchSelected.isEmpty()) {
|
||||
performClick();
|
||||
} else if (messageRecord.getType() == DcMsg.DC_MSG_WEBXDC) {
|
||||
WebxdcActivity.openWebxdcActivity(context, messageRecord);
|
||||
msgActionButton.performClick();
|
||||
} else if (MediaPreviewActivity.isTypeSupported(slide) && slide.getUri() != null) {
|
||||
Intent intent = new Intent(context, MediaPreviewActivity.class);
|
||||
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||
|
||||
@@ -211,8 +211,13 @@ public class CreateProfileActivity extends BaseActionBarActivity implements Emoj
|
||||
this.statusView = ViewUtil.findById(this, R.id.status_text);
|
||||
|
||||
if (fromWelcome) {
|
||||
String addr = DcHelper.get(this, "addr");
|
||||
loginSuccessText.setText(R.string.set_name_and_avatar_explain);
|
||||
if (DcHelper.getContext(this).isCommunity()) {
|
||||
ViewUtil.findById(this, R.id.community_user_container).setVisibility(View.VISIBLE);
|
||||
loginSuccessText.setText(R.string.community_set_name_explain);
|
||||
ViewUtil.findById(this, R.id.avatar_and_name).setVisibility(View.GONE);
|
||||
} else {
|
||||
loginSuccessText.setText(R.string.set_name_and_avatar_explain);
|
||||
}
|
||||
ViewUtil.findById(this, R.id.status_text_layout).setVisibility(View.GONE);
|
||||
ViewUtil.findById(this, R.id.information_label).setVisibility(View.GONE);
|
||||
} else {
|
||||
@@ -289,10 +294,12 @@ public class CreateProfileActivity extends BaseActionBarActivity implements Emoj
|
||||
}
|
||||
|
||||
private void updateProfile() {
|
||||
if (TextUtils.isEmpty(this.name.getText())) {
|
||||
boolean isCommunity = DcHelper.getContext(context).isCommunity();
|
||||
if (TextUtils.isEmpty(this.name.getText()) && !(isCommunity && fromWelcome)) {
|
||||
Toast.makeText(this, R.string.please_enter_name, Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
|
||||
final String name = this.name.getText().toString();
|
||||
final String ovName = this.overridenName.getText().toString().trim();
|
||||
|
||||
@@ -300,7 +307,7 @@ public class CreateProfileActivity extends BaseActionBarActivity implements Emoj
|
||||
@Override
|
||||
protected Boolean doInBackground(Void... params) {
|
||||
Context context = CreateProfileActivity.this;
|
||||
if (DcHelper.getContext(context).isCommunity()) {
|
||||
if (isCommunity) {
|
||||
DcHelper.getContext(context).setCommunityUser(ovName);
|
||||
}
|
||||
DcHelper.set(context, DcHelper.CONFIG_DISPLAY_NAME, name);
|
||||
|
||||
@@ -51,6 +51,7 @@ import java.io.OutputStream;
|
||||
|
||||
public class WelcomeActivity extends BaseActionBarActivity implements DcEventCenter.DcEventDelegate {
|
||||
public static final String BACKUP_QR_EXTRA = "backup_qr_extra";
|
||||
public static final String COMMUNITY_EXTRA = "community_extra";
|
||||
public static final int PICK_BACKUP = 20574;
|
||||
private final static String TAG = WelcomeActivity.class.getSimpleName();
|
||||
public static final String TMP_BACKUP_FILE = "tmp-backup-file";
|
||||
@@ -60,6 +61,7 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen
|
||||
private boolean imexUserAborted;
|
||||
DcContext dcContext;
|
||||
private NotificationController notificationController;
|
||||
private Uri communityUri;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle bundle) {
|
||||
@@ -141,6 +143,10 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
communityUri = getIntent().getParcelableExtra(COMMUNITY_EXTRA);
|
||||
if (communityUri != null) {
|
||||
startImport(null, communityUri, false);
|
||||
}
|
||||
String backupQr = getIntent().getStringExtra(BACKUP_QR_EXTRA);
|
||||
if (backupQr != null) {
|
||||
getIntent().removeExtra(BACKUP_QR_EXTRA);
|
||||
@@ -329,9 +335,15 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen
|
||||
private void progressSuccess() {
|
||||
DcHelper.getEventCenter(this).endCaptureNextError();
|
||||
progressDialog.dismiss();
|
||||
Intent intent = new Intent(getApplicationContext(), ConversationListActivity.class);
|
||||
intent.putExtra(ConversationListActivity.FROM_WELCOME, true);
|
||||
startActivity(intent);
|
||||
if (dcContext.isCommunity()) {
|
||||
Intent intent = new Intent(getApplicationContext(), CreateProfileActivity.class);
|
||||
intent.putExtra(CreateProfileActivity.FROM_WELCOME, true);
|
||||
startActivity(intent);
|
||||
} else {
|
||||
Intent intent = new Intent(getApplicationContext(), ConversationListActivity.class);
|
||||
intent.putExtra(ConversationListActivity.FROM_WELCOME, true);
|
||||
startActivity(intent);
|
||||
}
|
||||
finish();
|
||||
}
|
||||
|
||||
@@ -376,6 +388,10 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen
|
||||
notificationController.setProgress(1000, progress, String.format(" %d%%", (int) progress / 10));
|
||||
}
|
||||
else if (progress==1000/*done*/) {
|
||||
if (communityUri != null) dcContext.setCommunityMode(true);
|
||||
if (dcContext.isCommunity()) {
|
||||
dcContext.setCommunityUser(null);
|
||||
}
|
||||
DcHelper.getAccounts(this).startIo();
|
||||
progressSuccess();
|
||||
notificationController.close();
|
||||
|
||||
@@ -34,6 +34,7 @@ public class WebxdcView extends FrameLayout {
|
||||
private final @NonNull TextView appSubtitle;
|
||||
|
||||
private @Nullable SlideClickListener viewListener;
|
||||
private boolean isCommunity;
|
||||
|
||||
public WebxdcView(@NonNull Context context) {
|
||||
this(context, null);
|
||||
@@ -66,6 +67,7 @@ public class WebxdcView extends FrameLayout {
|
||||
public void setWebxdc(final @NonNull DcMsg dcMsg, String defaultSummary)
|
||||
{
|
||||
JSONObject info = dcMsg.getWebxdcInfo();
|
||||
isCommunity = JsonUtils.optBoolean(info, "community");
|
||||
setOnClickListener(new OpenClickedListener(getContext(), dcMsg));
|
||||
|
||||
// icon
|
||||
@@ -84,15 +86,20 @@ public class WebxdcView extends FrameLayout {
|
||||
// subtitle
|
||||
String summary = info.optString("summary");
|
||||
if (summary.isEmpty()) {
|
||||
summary = defaultSummary;
|
||||
summary = isCommunity? getContext().getString(R.string.community) : defaultSummary;
|
||||
}
|
||||
appSubtitle.setText(summary);
|
||||
}
|
||||
|
||||
public boolean isCommunity() {
|
||||
return isCommunity;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
String desc = getContext().getString(R.string.webxdc_app);
|
||||
String type = getContext().getString(isCommunity? R.string.community : R.string.webxdc_app);
|
||||
String desc = type;
|
||||
desc += "\n" + appName.getText();
|
||||
if (appSubtitle.getText() != null && !appSubtitle.getText().toString().equals("") && !appSubtitle.getText().toString().equals(getContext().getString(R.string.webxdc_app))) {
|
||||
if (appSubtitle.getText() != null && !appSubtitle.getText().toString().equals("") && !appSubtitle.getText().toString().equals(type)) {
|
||||
desc += "\n" + appSubtitle.getText();
|
||||
}
|
||||
return desc;
|
||||
|
||||
Reference in New Issue
Block a user