From f8464a1462c59e4d3ed797e6399df3329e104a65 Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Mon, 2 Dec 2019 15:03:12 +1100 Subject: [PATCH] Fix up UI --- AndroidManifest.xml | 2 +- res/layout/device_list_fragment.xml | 93 +++++++++---------- res/layout/device_list_item_view.xml | 15 +-- res/values/strings.xml | 12 +-- res/xml/preferences.xml | 8 +- .../securesms/ApplicationContext.java | 8 +- .../securesms/CreateProfileActivity.java | 5 +- .../securesms/DeviceListFragment.java | 26 ++++-- .../jobs/RetrieveProfileAvatarJob.java | 2 +- .../securesms/loki/MnemonicUtilities.kt | 1 + 10 files changed, 85 insertions(+), 87 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 3ed51067ca..7dfcd2cb5b 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -100,7 +100,6 @@ android:supportsRtl="true" android:theme="@style/TextSecure.DarkTheme" tools:replace="android:allowBackup"> - + - + - + - - - + - - - + + android:id="@+id/addDeviceButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentBottom="true" + android:layout_alignParentRight="true" + android:layout_margin="16dp" + android:src="@drawable/ic_add_white_original_24dp" + android:focusable="true" + android:contentDescription="@string/device_list_fragment__link_new_device" + fab:fab_colorNormal="?fab_color" + fab:fab_colorPressed="@color/textsecure_primary_dark" + fab:fab_colorRipple="@color/textsecure_primary_dark" /> - \ No newline at end of file + \ No newline at end of file diff --git a/res/layout/device_list_item_view.xml b/res/layout/device_list_item_view.xml index 11406f5f32..43039ba16a 100644 --- a/res/layout/device_list_item_view.xml +++ b/res/layout/device_list_item_view.xml @@ -1,14 +1,17 @@ - + + Unlink \'%s\'? - By unlinking this device, it will no longer be able to send or receive messages. + This device will no longer be able to send or receive messages. Network connection failed Try again Unlinking device... @@ -948,7 +948,7 @@ Link device - No devices linked + You don\'t have any linked devices yet Link new device @@ -1159,7 +1159,7 @@ Submit debug log Media preview Message details - Linked devices + Linked Devices Invite friends Archived conversations Remove photo @@ -1578,7 +1578,7 @@ Copied to clipboard Share Public Key Show QR Code - Linked Device + Linked Devices Show Seed Your Seed Copy @@ -1639,7 +1639,7 @@ Scan QR Code Scan the QR code of the person you\'d like to securely message. They can find their QR code by going into Loki Messenger\'s in-app settings and clicking \"Show QR Code\". - Scan the QR code of the device you would like to link. + Link to an existing device by going into its in-app settings and clicking \"Link Device\". Loki Messenger needs camera access to scan QR codes. Copy public key @@ -1650,6 +1650,6 @@ Unlink device Device unlinked - This device has been successfully unlinked. + This device has been successfully unlinked diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index 5cce165b4e..4f8b6e4663 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -33,6 +33,10 @@ android:title="@string/preferences__advanced" android:icon="@drawable/ic_advanced_24dp"/> --> + + @@ -41,10 +45,6 @@ android:title="@string/activity_settings_show_qr_code_button_title" android:icon="@drawable/icon_qr_code"/> - - diff --git a/src/org/thoughtcrime/securesms/ApplicationContext.java b/src/org/thoughtcrime/securesms/ApplicationContext.java index 94b4b3015f..a46c1bb69a 100644 --- a/src/org/thoughtcrime/securesms/ApplicationContext.java +++ b/src/org/thoughtcrime/securesms/ApplicationContext.java @@ -27,7 +27,6 @@ import android.database.ContentObserver; import android.os.AsyncTask; import android.os.Build; import android.os.Handler; -import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.multidex.MultiDexApplication; @@ -97,11 +96,11 @@ import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope; import org.whispersystems.signalservice.internal.push.SignalServiceProtos; import org.whispersystems.signalservice.loki.api.LokiAPIDatabaseProtocol; import org.whispersystems.signalservice.loki.api.LokiDotNetAPI; -import org.whispersystems.signalservice.loki.api.LokiPublicChat; -import org.whispersystems.signalservice.loki.api.LokiPublicChatAPI; import org.whispersystems.signalservice.loki.api.LokiLongPoller; import org.whispersystems.signalservice.loki.api.LokiP2PAPI; import org.whispersystems.signalservice.loki.api.LokiP2PAPIDelegate; +import org.whispersystems.signalservice.loki.api.LokiPublicChat; +import org.whispersystems.signalservice.loki.api.LokiPublicChatAPI; import org.whispersystems.signalservice.loki.api.LokiRSSFeed; import org.whispersystems.signalservice.loki.api.LokiStorageAPI; import org.whispersystems.signalservice.loki.utilities.Analytics; @@ -616,7 +615,7 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc } Set servers = DatabaseFactory.getLokiThreadDatabase(this).getAllPublicChatServers(); for (String server : servers) { - publicChatAPI.setProfileAvatar(server, profileKey, url); + publicChatAPI.setProfilePicture(server, profileKey, url); } } }); @@ -636,7 +635,6 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc if (this.deleteDatabase("signal.db")) { Log.d("Loki", "Deleted database"); } - } } diff --git a/src/org/thoughtcrime/securesms/CreateProfileActivity.java b/src/org/thoughtcrime/securesms/CreateProfileActivity.java index 89e9ffed19..14347fbb8f 100644 --- a/src/org/thoughtcrime/securesms/CreateProfileActivity.java +++ b/src/org/thoughtcrime/securesms/CreateProfileActivity.java @@ -39,7 +39,6 @@ import org.thoughtcrime.securesms.crypto.ProfileKeyUtil; import org.thoughtcrime.securesms.database.Address; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.dependencies.InjectableType; -import org.thoughtcrime.securesms.jobs.MultiDeviceProfileKeyUpdateJob; import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.permissions.Permissions; @@ -68,7 +67,6 @@ import java.io.File; import java.io.IOException; import java.security.SecureRandom; import java.util.Arrays; -import java.util.Collections; import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.regex.Matcher; @@ -76,7 +74,6 @@ import java.util.regex.Pattern; import javax.inject.Inject; -import kotlin.Triple; import network.loki.messenger.R; @SuppressLint("StaticFieldLeak") @@ -416,7 +413,7 @@ public class CreateProfileActivity extends BaseActionBarActivity implements Inje if (avatar != null) { Log.d("Loki", "Start uploading profile photo"); LokiStorageAPI storageAPI = LokiStorageAPI.shared; - LokiDotNetAPI.UploadResult result = storageAPI.uploadProfilePhoto(storageAPI.getServer(), profileKey, avatar); + LokiDotNetAPI.UploadResult result = storageAPI.uploadProfilePicture(storageAPI.getServer(), profileKey, avatar); Log.d("Loki", "Profile photo uploaded, the url is " + result.getUrl()); TextSecurePreferences.setProfileAvatarUrl(context, result.getUrl()); } else { diff --git a/src/org/thoughtcrime/securesms/DeviceListFragment.java b/src/org/thoughtcrime/securesms/DeviceListFragment.java index 2490012f23..dbabf62754 100644 --- a/src/org/thoughtcrime/securesms/DeviceListFragment.java +++ b/src/org/thoughtcrime/securesms/DeviceListFragment.java @@ -16,6 +16,7 @@ import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; +import android.widget.LinearLayout; import android.widget.ListView; import com.melnykov.fab.FloatingActionButton; @@ -28,17 +29,18 @@ import org.thoughtcrime.securesms.loki.DeviceListBottomSheetFragment; import org.thoughtcrime.securesms.loki.MnemonicUtilities; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.ViewUtil; +import org.whispersystems.libsignal.util.guava.Function; import java.io.File; import java.util.List; import java.util.Locale; -import org.whispersystems.libsignal.util.guava.Function; - import kotlin.Pair; import kotlin.Unit; import network.loki.messenger.R; +import static org.thoughtcrime.securesms.loki.GeneralUtilitiesKt.toPx; + public class DeviceListFragment extends ListFragment implements LoaderManager.LoaderCallbacks>, ListView.OnItemClickListener, InjectableType, Button.OnClickListener @@ -71,9 +73,9 @@ public class DeviceListFragment extends ListFragment public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) { View view = inflater.inflate(R.layout.device_list_fragment, container, false); - this.empty = view.findViewById(R.id.empty); - this.progressContainer = view.findViewById(R.id.progress_container); - this.addDeviceButton = ViewUtil.findById(view, R.id.add_device); + this.empty = view.findViewById(R.id.emptyStateTextView); + this.progressContainer = view.findViewById(R.id.activityIndicator); + this.addDeviceButton = ViewUtil.findById(view, R.id.addDeviceButton); this.addDeviceButton.setOnClickListener(this); updateAddDeviceButtonVisibility(); @@ -141,16 +143,22 @@ public class DeviceListFragment extends ListFragment DeviceListBottomSheetFragment bottomSheet = new DeviceListBottomSheetFragment(); bottomSheet.setOnEditTapped(() -> { bottomSheet.dismiss(); - EditText deviceNameText = new EditText(getContext()); - deviceNameText.setText(hasDeviceName ? deviceName : ""); + EditText deviceNameEditText = new EditText(getContext()); + LinearLayout deviceNameEditTextContainer = new LinearLayout(getContext()); + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); + layoutParams.setMarginStart(toPx(18, getResources())); + layoutParams.setMarginEnd(toPx(18, getResources())); + deviceNameEditText.setLayoutParams(layoutParams); + deviceNameEditTextContainer.addView(deviceNameEditText); + deviceNameEditText.setText(hasDeviceName ? deviceName : ""); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(R.string.DeviceListActivity_edit_device_name); - builder.setView(deviceNameText); + builder.setView(deviceNameEditTextContainer); builder.setNegativeButton(android.R.string.cancel, null); builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - if (handleDeviceNameChange != null) { handleDeviceNameChange.apply(new Pair<>(deviceId, deviceNameText.getText().toString().trim())); } + if (handleDeviceNameChange != null) { handleDeviceNameChange.apply(new Pair<>(deviceId, deviceNameEditText.getText().toString().trim())); } } }); builder.show(); diff --git a/src/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java b/src/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java index e6f281d565..aa29a41009 100644 --- a/src/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java +++ b/src/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java @@ -101,7 +101,7 @@ public class RetrieveProfileAvatarJob extends BaseJob implements InjectableType try { InputStream avatarStream = receiver.retrieveProfileAvatar(profileAvatar, downloadDestination, profileKey, MAX_PROFILE_SIZE_BYTES); - File decryptDestination = File.createTempFile("avatar", "jpg", context.getCacheDir()); + File decryptDestination = File.createTempFile("avatar", "jpg", context.getCacheDir()); Util.copy(avatarStream, new FileOutputStream(decryptDestination)); decryptDestination.renameTo(AvatarHelper.getAvatarFile(context, recipient.getAddress())); diff --git a/src/org/thoughtcrime/securesms/loki/MnemonicUtilities.kt b/src/org/thoughtcrime/securesms/loki/MnemonicUtilities.kt index a6e6a64538..b5275725f5 100644 --- a/src/org/thoughtcrime/securesms/loki/MnemonicUtilities.kt +++ b/src/org/thoughtcrime/securesms/loki/MnemonicUtilities.kt @@ -7,6 +7,7 @@ import java.io.File import java.io.FileOutputStream object MnemonicUtilities { + @JvmStatic public fun getLanguageFileDirectory(context: Context): File { val languages = listOf( "english", "japanese", "portuguese", "spanish" )