diff --git a/briar-android/build.gradle b/briar-android/build.gradle index ebddc91df..7c74dd637 100644 --- a/briar-android/build.gradle +++ b/briar-android/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation "com.android.support:support-annotations:$supportVersion" implementation 'com.android.support.constraint:constraint-layout:1.1.0' - implementation('ch.acra:acra:4.8.5') { + implementation('ch.acra:acra:4.9.1') { exclude module: 'support-v4' exclude module: 'support-annotations' } @@ -61,7 +61,7 @@ dependencyVerification { 'android.arch.lifecycle:viewmodel:1.1.0:viewmodel-1.1.0.aar:6407c93a5ea9850661dca42a0068d6f3deccefd7228ee69bae1c35d70cbc2557', 'backport-util-concurrent:backport-util-concurrent:3.1:backport-util-concurrent-3.1.jar:f5759b7fcdfc83a525a036deedcbd32e5b536b625ebc282426f16ca137eb5902', 'cglib:cglib:3.2.0:cglib-3.2.0.jar:adb13bab79712ad6bdf1bd59f2a3918018a8016e722e8a357065afb9e6690861', - 'ch.acra:acra:4.8.5:acra-4.8.5.aar:afd5b28934d5166b55f261c85685ad59e8a4ebe9ca1960906afaa8c76d8dc9eb', + 'ch.acra:acra:4.9.1:acra-4.9.1.aar:d2762968c448757a7d6acc9f141881d9632f664988e9723ece33b5f7c79f3bc9', 'classworlds:classworlds:1.1-alpha-2:classworlds-1.1-alpha-2.jar:2bf4e59f3acd106fea6145a9a88fe8956509f8b9c0fdd11eb96fee757269e3f3', 'com.almworks.sqlite4java:sqlite4java:0.282:sqlite4java-0.282.jar:9e1d8dd83ca6003f841e3af878ce2dc7c22497493a7bb6d1b62ec1b0d0a83c05', 'com.android.support.constraint:constraint-layout-solver:1.1.0:constraint-layout-solver-1.1.0.jar:fcb4c7d705754ca3d69b1b2c3caf445a425599fda8caabbcf855d98ea0663e4e', diff --git a/briar-android/src/main/AndroidManifest.xml b/briar-android/src/main/AndroidManifest.xml index 366cb24e8..0f483f12b 100644 --- a/briar-android/src/main/AndroidManifest.xml +++ b/briar-android/src/main/AndroidManifest.xml @@ -44,7 +44,6 @@ android:finishOnTaskLaunch="true" android:label="@string/crash_report_title" android:launchMode="singleInstance" - android:process=":briar_error_handler" android:theme="@style/BriarTheme.NoActionBar" android:windowSoftInputMode="stateHidden"> diff --git a/briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java index bbb8a568c..0b2f03466 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java @@ -19,6 +19,7 @@ import org.briarproject.briar.android.logging.CachingLogHandler; import org.briarproject.briar.android.reporting.BriarReportPrimer; import org.briarproject.briar.android.reporting.BriarReportSenderFactory; import org.briarproject.briar.android.reporting.DevReportActivity; +import org.briarproject.briar.android.util.UiUtils; import java.util.Collection; import java.util.logging.Handler; @@ -85,6 +86,7 @@ public class BriarApplicationImpl extends Application Localizer.initialize(prefs); super.attachBaseContext( Localizer.getInstance().setLocale(base)); + setTheme(base, prefs); ACRA.init(this); } @@ -123,6 +125,17 @@ public class BriarApplicationImpl extends Application Localizer.getInstance().setLocale(this); } + private void setTheme(Context ctx, SharedPreferences prefs) { + String theme = prefs.getString("pref_key_theme", null); + if (theme == null) { + // set default value + theme = getString(R.string.pref_theme_light_value); + prefs.edit().putString("pref_key_theme", theme).apply(); + } + // set theme + UiUtils.setTheme(ctx, theme); + } + private void enableStrictMode() { ThreadPolicy.Builder threadPolicy = new ThreadPolicy.Builder(); threadPolicy.detectAll(); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java index d557e717f..3d2d8361c 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java @@ -92,7 +92,6 @@ public abstract class BriarActivity extends BaseActivity { window.setEnterTransition(slide); window.setTransitionBackgroundFadeDuration(getResources() .getInteger(android.R.integer.config_longAnimTime)); - window.setBackgroundDrawableResource(android.R.color.transparent); } /** diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java index 228059415..b330aeb7a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java @@ -11,7 +11,7 @@ import android.text.Spanned; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageView; +import android.widget.ImageButton; import android.widget.TextView; import org.briarproject.bramble.api.identity.Author; @@ -40,7 +40,7 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder { private final ViewGroup layout; private final AuthorView reblogger; private final AuthorView author; - private final ImageView reblogButton; + private final ImageButton reblogButton; private final TextView body; private final ViewGroup commentContainer; private final boolean fullText; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListAdapter.java index d2c4b96d3..f16e83970 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListAdapter.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListAdapter.java @@ -2,7 +2,6 @@ package org.briarproject.briar.android.forum; import android.content.Context; import android.content.Intent; -import android.support.v4.content.ContextCompat; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; @@ -55,12 +54,8 @@ class ForumListAdapter ui.postCount.setText(ctx.getResources() .getQuantityString(R.plurals.posts, postCount, postCount)); - ui.postCount.setTextColor( - ContextCompat.getColor(ctx, R.color.briar_text_secondary)); } else { ui.postCount.setText(ctx.getString(R.string.no_posts)); - ui.postCount.setTextColor( - ContextCompat.getColor(ctx, R.color.briar_text_tertiary)); } // Date diff --git a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ShowQrCodeFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ShowQrCodeFragment.java index aec6c26bb..2c38043fb 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ShowQrCodeFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ShowQrCodeFragment.java @@ -86,9 +86,8 @@ public class ShowQrCodeFragment extends BaseEventFragment private CameraView cameraView; private View statusView; private TextView status; + private View qrCodeContainer; private ImageView qrCode; - private TextView mainProgressTitle; - private ViewGroup mainProgressContainer; private boolean fullscreen = false; private boolean gotRemotePayload; @@ -131,12 +130,10 @@ public class ShowQrCodeFragment extends BaseEventFragment cameraView = view.findViewById(R.id.camera_view); statusView = view.findViewById(R.id.status_container); status = view.findViewById(R.id.connect_status); + qrCodeContainer = view.findViewById(R.id.qr_code_container); qrCode = view.findViewById(R.id.qr_code); - mainProgressTitle = view.findViewById(R.id.title_progress_bar); - mainProgressContainer = view.findViewById(R.id.container_progress); ImageView fullscreenButton = view.findViewById(R.id.fullscreen_button); fullscreenButton.setOnClickListener(v -> { - View qrCodeContainer = view.findViewById(R.id.qr_code_container); LinearLayout cameraOverlay = view.findViewById(R.id.camera_overlay); LayoutParams statusParams, qrCodeParams; if (fullscreen) { @@ -303,8 +300,8 @@ public class ShowQrCodeFragment extends BaseEventFragment keyAgreementAborted(event.didRemoteAbort()); } else if (e instanceof KeyAgreementFinishedEvent) { runOnUiThreadUnlessDestroyed(() -> { - mainProgressContainer.setVisibility(VISIBLE); - mainProgressTitle.setText(R.string.exchanging_contact_details); + statusView.setVisibility(VISIBLE); + status.setText(R.string.exchanging_contact_details); }); } } @@ -363,16 +360,18 @@ public class ShowQrCodeFragment extends BaseEventFragment private void keyAgreementStarted() { runOnUiThreadUnlessDestroyed(() -> { - mainProgressContainer.setVisibility(VISIBLE); - mainProgressTitle.setText(R.string.authenticating_with_device); + qrCodeContainer.setVisibility(INVISIBLE); + statusView.setVisibility(VISIBLE); + status.setText(R.string.authenticating_with_device); }); } private void keyAgreementAborted(boolean remoteAborted) { runOnUiThreadUnlessDestroyed(() -> { reset(); - mainProgressContainer.setVisibility(INVISIBLE); - mainProgressTitle.setText(""); + qrCodeContainer.setVisibility(VISIBLE); + statusView.setVisibility(INVISIBLE); + status.setText(null); // TODO show abort somewhere persistent? Toast.makeText(getActivity(), remoteAborted ? R.string.connection_aborted_remote : diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java index 55f08b204..f4368dd9a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java @@ -107,6 +107,7 @@ public class PasswordActivity extends BaseActivity { private void deleteAccount() { passwordController.deleteAccount(this); Localizer.reinitialize(); + UiUtils.setTheme(this, getString(R.string.pref_theme_light_value)); setResult(RESULT_CANCELED); Intent i = new Intent(this, SetupActivity.class); i.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupViewHolder.java index a2992ef89..b64eb25a2 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupViewHolder.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupViewHolder.java @@ -16,7 +16,6 @@ import org.briarproject.briar.android.privategroup.conversation.GroupActivity; import org.briarproject.briar.android.util.UiUtils; import org.briarproject.briar.android.view.TextAvatarView; -import static android.support.v4.content.ContextCompat.getColor; import static android.view.View.GONE; import static android.view.View.VISIBLE; import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID; @@ -83,8 +82,6 @@ class GroupViewHolder extends RecyclerView.ViewHolder { postCount.setText(ctx.getResources() .getQuantityString(R.plurals.messages, messageCount, messageCount)); - postCount.setTextColor( - getColor(ctx, R.color.briar_text_secondary)); long lastUpdate = group.getTimestamp(); date.setText(UiUtils.formatDate(ctx, lastUpdate)); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/reporting/DevReportActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/reporting/DevReportActivity.java index a25e1e41f..2bf0f9381 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/reporting/DevReportActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/reporting/DevReportActivity.java @@ -3,6 +3,7 @@ package org.briarproject.briar.android.reporting; import android.content.res.Configuration; import android.os.AsyncTask; import android.os.Bundle; +import android.support.annotation.Nullable; import android.support.v7.app.AppCompatDelegate; import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; @@ -33,6 +34,7 @@ import java.util.Map.Entry; import java.util.Set; import java.util.logging.Logger; +import static android.os.Build.VERSION.SDK_INT; import static android.view.View.GONE; import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; @@ -83,10 +85,27 @@ public class DevReportActivity extends BaseCrashReportDialog } @Override - public void onCreate(Bundle state) { + protected void preInit(@Nullable Bundle savedInstanceState) { + super.preInit(savedInstanceState); getDelegate().installViewFactory(); - getDelegate().onCreate(state); - super.onCreate(state); + getDelegate().onCreate(savedInstanceState); + if (getDelegate().applyDayNight()) { + // If DayNight has been applied, we need to re-apply the theme for + // the changes to take effect. On API 23+, we should bypass + // setTheme(), which will no-op if the theme ID is identical to the + // current theme ID. + int theme = R.style.BriarTheme_NoActionBar; + if (SDK_INT >= 23) { + onApplyThemeResource(getTheme(), theme, false); + } else { + setTheme(theme); + } + } + } + + @Override + public void init(Bundle state) { + super.init(state); getDelegate().setContentView(R.layout.activity_dev_report); @@ -94,6 +113,7 @@ public class DevReportActivity extends BaseCrashReportDialog getDelegate().setSupportActionBar(tb); View requestReport = findViewById(R.id.request_report); + View reportForm = findViewById(R.id.report_form); userCommentView = findViewById(R.id.user_comment); userEmailView = findViewById(R.id.user_email); includeDebugReport = findViewById(R.id.include_debug_report); @@ -111,13 +131,18 @@ public class DevReportActivity extends BaseCrashReportDialog if (isFeedback()) { includeDebugReport .setText(getString(R.string.include_debug_report_feedback)); + reportForm.setVisibility(VISIBLE); + requestReport.setVisibility(INVISIBLE); } else { includeDebugReport.setChecked(true); + reportForm.setVisibility(INVISIBLE); + requestReport.setVisibility(VISIBLE); } findViewById(R.id.acceptButton).setOnClickListener(v -> { reviewing = true; - requestReport.setVisibility(GONE); + reportForm.setVisibility(VISIBLE); + requestReport.setVisibility(INVISIBLE); ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)) .showSoftInput(userCommentView, SHOW_FORCED); }); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java index d9faceff5..349bbfe02 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java @@ -34,6 +34,7 @@ import org.briarproject.bramble.util.StringUtils; import org.briarproject.briar.R; import org.briarproject.briar.android.Localizer; import org.briarproject.briar.android.navdrawer.NavDrawerActivity; +import org.briarproject.briar.android.util.UiUtils; import org.briarproject.briar.android.util.UserFeedback; import java.util.ArrayList; @@ -44,6 +45,8 @@ import java.util.logging.Logger; import javax.inject.Inject; import static android.app.Activity.RESULT_OK; +import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK; +import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static android.media.RingtoneManager.ACTION_RINGTONE_PICKER; import static android.media.RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI; import static android.media.RingtoneManager.EXTRA_RINGTONE_EXISTING_URI; @@ -135,6 +138,8 @@ public class SettingsFragment extends PreferenceFragmentCompat language = (ListPreference) findPreference(LANGUAGE); setLanguageEntries(); + ListPreference theme = + (ListPreference) findPreference("pref_key_theme"); enableBluetooth = (ListPreference) findPreference("pref_key_bluetooth"); torNetwork = (ListPreference) findPreference("pref_key_tor_network"); notifyPrivateMessages = (CheckBoxPreference) findPreference( @@ -154,6 +159,24 @@ public class SettingsFragment extends PreferenceFragmentCompat setSettingsEnabled(false); language.setOnPreferenceChangeListener(this); + theme.setOnPreferenceChangeListener((preference, newValue) -> { + if (getActivity() != null) { + // activate new theme + UiUtils.setTheme(getActivity(), (String) newValue); + // bring up parent activity, so it can change its theme as well + // upstream bug: https://issuetracker.google.com/issues/38352704 + Intent intent = + new Intent(getActivity(), NavDrawerActivity.class); + intent.setFlags( + FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + // bring this activity back to the foreground + intent = new Intent(getActivity(), getActivity().getClass()); + startActivity(intent); + getActivity().finish(); + } + return true; + }); enableBluetooth.setOnPreferenceChangeListener(this); torNetwork.setOnPreferenceChangeListener(this); if (SDK_INT >= 21) { @@ -174,6 +197,9 @@ public class SettingsFragment extends PreferenceFragmentCompat } ); } else { + // TODO remove before releasing theme to public + theme.setVisible(false); + findPreference("pref_key_explode").setVisible(false); findPreference("pref_key_test_data").setVisible(false); PreferenceGroup testing = @@ -320,6 +346,7 @@ public class SettingsFragment extends PreferenceFragmentCompat } private void setSettingsEnabled(boolean enabled) { + // theme not needed here, because handled by SharedPreferences enableBluetooth.setEnabled(enabled); torNetwork.setEnabled(enabled); notifyPrivateMessages.setEnabled(enabled); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/BaseThreadItemViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/BaseThreadItemViewHolder.java index 0532e6a95..45f66b83b 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/BaseThreadItemViewHolder.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/BaseThreadItemViewHolder.java @@ -4,10 +4,8 @@ import android.animation.Animator; import android.animation.ArgbEvaluator; import android.animation.ValueAnimator; import android.content.Context; -import android.graphics.drawable.ColorDrawable; import android.support.annotation.CallSuper; import android.support.annotation.UiThread; -import android.support.v4.content.ContextCompat; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; @@ -20,6 +18,8 @@ import org.briarproject.briar.R; import org.briarproject.briar.android.threaded.ThreadItemAdapter.ThreadItemListener; import org.briarproject.briar.android.view.AuthorView; +import static android.support.v4.content.ContextCompat.getColor; + @UiThread @NotNullByDefault public abstract class BaseThreadItemViewHolder @@ -61,10 +61,9 @@ public abstract class BaseThreadItemViewHolder private void animateFadeOut() { setIsRecyclable(false); ValueAnimator anim = new ValueAnimator(); - ColorDrawable viewColor = new ColorDrawable(ContextCompat - .getColor(getContext(), R.color.forum_cell_highlight)); - anim.setIntValues(viewColor.getColor(), ContextCompat - .getColor(getContext(), R.color.window_background)); + int viewColor = getColor(getContext(), R.color.thread_item_highlight); + anim.setIntValues(viewColor, + getColor(getContext(), R.color.thread_item_background)); anim.setEvaluator(new ArgbEvaluator()); anim.setInterpolator(new AccelerateInterpolator()); anim.addListener(new Animator.AnimatorListener() { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java index 4c0e145dc..2d30f5c8d 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java @@ -286,6 +286,7 @@ public abstract class ThreadListActivity 0) ui.editText.setMaxLines(maxLines); if (fillHeight) { - LinearLayout layout = findViewById(R.id.input_layout); + ViewGroup layout = findViewById(R.id.input_layout); LayoutParams params = (LayoutParams) layout.getLayoutParams(); params.height = 0; params.weight = 1; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/TrustIndicatorView.java b/briar-android/src/main/java/org/briarproject/briar/android/view/TrustIndicatorView.java index 918755eb6..3aac50e9b 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/view/TrustIndicatorView.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/view/TrustIndicatorView.java @@ -38,7 +38,7 @@ public class TrustIndicatorView extends ImageView { res = R.drawable.trust_indicator_verified; break; case OURSELVES: - res = R.drawable.ic_our_identity_black; + res = R.drawable.ic_our_identity; break; default: res = R.drawable.trust_indicator_unknown; diff --git a/briar-android/src/main/java/org/thoughtcrime/securesms/components/RepeatableImageKey.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/RepeatableImageKey.java index 453f82f8c..51e740186 100644 --- a/briar-android/src/main/java/org/thoughtcrime/securesms/components/RepeatableImageKey.java +++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/RepeatableImageKey.java @@ -2,11 +2,11 @@ package org.thoughtcrime.securesms.components; import android.content.Context; import android.support.annotation.UiThread; +import android.support.v7.widget.AppCompatImageButton; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; -import android.widget.ImageButton; import static android.view.HapticFeedbackConstants.KEYBOARD_TAP; import static android.view.MotionEvent.ACTION_CANCEL; @@ -14,7 +14,7 @@ import static android.view.MotionEvent.ACTION_DOWN; import static android.view.MotionEvent.ACTION_UP; @UiThread -public class RepeatableImageKey extends ImageButton { +public class RepeatableImageKey extends AppCompatImageButton { private KeyEventListener listener; diff --git a/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java index 7ba1810f9..d54f4cbca 100644 --- a/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java +++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java @@ -1,10 +1,13 @@ package org.thoughtcrime.securesms.components.emoji; import android.content.Context; +import android.content.res.ColorStateList; import android.support.annotation.NonNull; import android.support.annotation.UiThread; +import android.support.v4.content.ContextCompat; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; +import android.support.v7.widget.AppCompatImageView; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -26,6 +29,7 @@ import java.util.logging.Logger; import javax.annotation.Nullable; +import static android.support.v4.widget.ImageViewCompat.setImageTintList; import static android.view.KeyEvent.ACTION_DOWN; import static android.view.KeyEvent.KEYCODE_DEL; import static android.widget.ImageView.ScaleType.CENTER_INSIDE; @@ -142,8 +146,10 @@ public class EmojiDrawer extends LinearLayout { return pages.size(); } + @NonNull @Override - public Object instantiateItem(ViewGroup container, int position) { + public Object instantiateItem(@NonNull ViewGroup container, + int position) { EmojiPageView page = new EmojiPageView(context); page.setModel(pages.get(position)); page.setEmojiSelectedListener(listener); @@ -152,21 +158,24 @@ public class EmojiDrawer extends LinearLayout { } @Override - public void destroyItem(ViewGroup container, int position, - Object object) { + public void destroyItem(@NonNull ViewGroup container, int position, + @NonNull Object object) { container.removeView((View) object); } @Override - public boolean isViewFromObject(View view, Object object) { + public boolean isViewFromObject(@NonNull View view, + @NonNull Object object) { return view == object; } @Override public View getCustomTabView(ViewGroup viewGroup, int i) { - ImageView image = new ImageView(context); + ImageView image = new AppCompatImageView(context); image.setScaleType(CENTER_INSIDE); image.setImageResource(pages.get(i).getIcon()); + setImageTintList(image, ColorStateList.valueOf( + ContextCompat.getColor(context, R.color.color_primary))); return image; } diff --git a/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiToggle.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiToggle.java index 75e79bb27..5858af0a7 100644 --- a/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiToggle.java +++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiToggle.java @@ -4,8 +4,8 @@ import android.content.Context; import android.graphics.drawable.Drawable; import android.support.annotation.UiThread; import android.support.v4.content.ContextCompat; +import android.support.v7.widget.AppCompatImageButton; import android.util.AttributeSet; -import android.widget.ImageButton; import org.briarproject.briar.R; import org.thoughtcrime.securesms.components.emoji.EmojiDrawer.EmojiDrawerListener; @@ -13,7 +13,8 @@ import org.thoughtcrime.securesms.components.emoji.EmojiDrawer.EmojiDrawerListen import javax.annotation.Nullable; @UiThread -public class EmojiToggle extends ImageButton implements EmojiDrawerListener { +public class EmojiToggle extends AppCompatImageButton + implements EmojiDrawerListener { private final Drawable emojiToggle; private final Drawable imeToggle; @@ -33,7 +34,7 @@ public class EmojiToggle extends ImageButton implements EmojiDrawerListener { emojiToggle = ContextCompat .getDrawable(getContext(), R.drawable.ic_emoji_toggle); imeToggle = ContextCompat - .getDrawable(getContext(), R.drawable.ic_keyboard_black); + .getDrawable(getContext(), R.drawable.ic_keyboard); setToEmoji(); } diff --git a/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiView.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiView.java index 50217e3b7..2b6d61039 100644 --- a/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiView.java +++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiView.java @@ -6,17 +6,15 @@ import android.graphics.Paint; import android.graphics.drawable.Drawable; import android.support.annotation.NonNull; import android.support.annotation.UiThread; -import android.support.v4.content.ContextCompat; import android.util.AttributeSet; import android.view.View; -import org.briarproject.briar.R; - import javax.annotation.Nullable; import static android.graphics.Paint.ANTI_ALIAS_FLAG; import static android.graphics.Paint.Align.CENTER; import static android.graphics.Paint.FILTER_BITMAP_FLAG; +import static org.briarproject.briar.android.util.UiUtils.resolveColorAttribute; @UiThread public class EmojiView extends View implements Drawable.Callback { @@ -63,8 +61,9 @@ public class EmojiView extends View implements Drawable.Callback { float targetFontSize = 0.75f * getHeight() - getPaddingTop() - getPaddingBottom(); paint.setTextSize(targetFontSize); - paint.setColor(ContextCompat - .getColor(getContext(), R.color.emoji_text_color)); + int color = resolveColorAttribute(getContext(), + android.R.attr.textColorPrimary); + paint.setColor(color); paint.setTextAlign(CENTER); int xPos = (canvas.getWidth() / 2); int yPos = (int) ((canvas.getHeight() / 2) - diff --git a/briar-android/src/main/res/color/button_text.xml b/briar-android/src/main/res/color/button_text.xml new file mode 100644 index 000000000..bbe56156e --- /dev/null +++ b/briar-android/src/main/res/color/button_text.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/briar-android/src/main/res/drawable-night-hdpi/msg_in.9.png b/briar-android/src/main/res/drawable-night-hdpi/msg_in.9.png new file mode 100644 index 000000000..008d7833b Binary files /dev/null and b/briar-android/src/main/res/drawable-night-hdpi/msg_in.9.png differ diff --git a/briar-android/src/main/res/drawable-night-hdpi/msg_in_top.9.png b/briar-android/src/main/res/drawable-night-hdpi/msg_in_top.9.png new file mode 100644 index 000000000..4d34c5065 Binary files /dev/null and b/briar-android/src/main/res/drawable-night-hdpi/msg_in_top.9.png differ diff --git a/briar-android/src/main/res/drawable-night-mdpi/msg_in.9.png b/briar-android/src/main/res/drawable-night-mdpi/msg_in.9.png new file mode 100644 index 000000000..4b8904541 Binary files /dev/null and b/briar-android/src/main/res/drawable-night-mdpi/msg_in.9.png differ diff --git a/briar-android/src/main/res/drawable-night-mdpi/msg_in_top.9.png b/briar-android/src/main/res/drawable-night-mdpi/msg_in_top.9.png new file mode 100644 index 000000000..ebad24e9f Binary files /dev/null and b/briar-android/src/main/res/drawable-night-mdpi/msg_in_top.9.png differ diff --git a/briar-android/src/main/res/drawable-night-xhdpi/msg_in.9.png b/briar-android/src/main/res/drawable-night-xhdpi/msg_in.9.png new file mode 100644 index 000000000..13597cfa4 Binary files /dev/null and b/briar-android/src/main/res/drawable-night-xhdpi/msg_in.9.png differ diff --git a/briar-android/src/main/res/drawable-night-xhdpi/msg_in_top.9.png b/briar-android/src/main/res/drawable-night-xhdpi/msg_in_top.9.png new file mode 100644 index 000000000..c3b950d4b Binary files /dev/null and b/briar-android/src/main/res/drawable-night-xhdpi/msg_in_top.9.png differ diff --git a/briar-android/src/main/res/drawable-night-xxhdpi/msg_in.9.png b/briar-android/src/main/res/drawable-night-xxhdpi/msg_in.9.png new file mode 100644 index 000000000..cef3f185e Binary files /dev/null and b/briar-android/src/main/res/drawable-night-xxhdpi/msg_in.9.png differ diff --git a/briar-android/src/main/res/drawable-night-xxhdpi/msg_in_top.9.png b/briar-android/src/main/res/drawable-night-xxhdpi/msg_in_top.9.png new file mode 100644 index 000000000..60ea93838 Binary files /dev/null and b/briar-android/src/main/res/drawable-night-xxhdpi/msg_in_top.9.png differ diff --git a/briar-android/src/main/res/drawable-night/contact_connected.xml b/briar-android/src/main/res/drawable-night/contact_connected.xml new file mode 100644 index 000000000..e4e45826a --- /dev/null +++ b/briar-android/src/main/res/drawable-night/contact_connected.xml @@ -0,0 +1,24 @@ + + + + + + + \ No newline at end of file diff --git a/briar-android/src/main/res/drawable-night/contact_disconnected.xml b/briar-android/src/main/res/drawable-night/contact_disconnected.xml new file mode 100644 index 000000000..1dd34144f --- /dev/null +++ b/briar-android/src/main/res/drawable-night/contact_disconnected.xml @@ -0,0 +1,9 @@ + + + diff --git a/briar-android/src/main/res/drawable-night/ic_our_identity.xml b/briar-android/src/main/res/drawable-night/ic_our_identity.xml new file mode 100644 index 000000000..685ad6b8c --- /dev/null +++ b/briar-android/src/main/res/drawable-night/ic_our_identity.xml @@ -0,0 +1,9 @@ + + + diff --git a/briar-android/src/main/res/drawable-night/qr_code_explanation.xml b/briar-android/src/main/res/drawable-night/qr_code_explanation.xml new file mode 100644 index 000000000..433179877 --- /dev/null +++ b/briar-android/src/main/res/drawable-night/qr_code_explanation.xml @@ -0,0 +1,28 @@ + + + + + + + + + + diff --git a/briar-android/src/main/res/drawable-night/splash_screen.xml b/briar-android/src/main/res/drawable-night/splash_screen.xml new file mode 100644 index 000000000..b1904b003 --- /dev/null +++ b/briar-android/src/main/res/drawable-night/splash_screen.xml @@ -0,0 +1,71 @@ + + + + + + + + + \ No newline at end of file diff --git a/briar-android/src/main/res/drawable/action_delete_black.xml b/briar-android/src/main/res/drawable/action_delete_black.xml index 814d0993f..2cedb57ff 100644 --- a/briar-android/src/main/res/drawable/action_delete_black.xml +++ b/briar-android/src/main/res/drawable/action_delete_black.xml @@ -1,7 +1,6 @@ - - - - - - - \ No newline at end of file diff --git a/briar-android/src/main/res/drawable/border_explanation.xml b/briar-android/src/main/res/drawable/border_explanation.xml index b2e380fbc..f54513376 100644 --- a/briar-android/src/main/res/drawable/border_explanation.xml +++ b/briar-android/src/main/res/drawable/border_explanation.xml @@ -8,6 +8,6 @@ + android:color="@color/color_primary"/> \ No newline at end of file diff --git a/briar-android/src/main/res/drawable/border_spinner.xml b/briar-android/src/main/res/drawable/border_spinner.xml deleted file mode 100644 index 9720073e4..000000000 --- a/briar-android/src/main/res/drawable/border_spinner.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/briar-android/src/main/res/drawable/bubble.xml b/briar-android/src/main/res/drawable/bubble.xml index a00f451ed..8d2dd0c80 100644 --- a/briar-android/src/main/res/drawable/bubble.xml +++ b/briar-android/src/main/res/drawable/bubble.xml @@ -12,7 +12,7 @@ android:bottom="1px"/> + android:color="@color/briar_accent"/> - diff --git a/briar-android/src/main/res/drawable/contact_connected.xml b/briar-android/src/main/res/drawable/contact_connected.xml index fc0426085..a53142509 100644 --- a/briar-android/src/main/res/drawable/contact_connected.xml +++ b/briar-android/src/main/res/drawable/contact_connected.xml @@ -1,26 +1,26 @@ + android:width="24dp" + android:height="24dp" + android:alpha="0.56" + android:viewportHeight="24" + android:viewportWidth="24"> +C7.58,20,4,16.42,4,12 S7.58,4,12,4 S20,7.58,20,12 S16.42,20,12,20 Z"/> + android:pathData="M0,0 L24,0 L24,24 L0,24 Z"/> - \ No newline at end of file +C16.4904,19.1779,13.581,20.3215,10.8973,19.9503 Z" + android:strokeLineCap="round" + android:strokeLineJoin="round" + android:strokeWidth="0.76779664"/> + diff --git a/briar-android/src/main/res/drawable/contact_disconnected.xml b/briar-android/src/main/res/drawable/contact_disconnected.xml index 76c100237..c1a088235 100644 --- a/briar-android/src/main/res/drawable/contact_disconnected.xml +++ b/briar-android/src/main/res/drawable/contact_disconnected.xml @@ -1,5 +1,10 @@ - - + + diff --git a/briar-android/src/main/res/drawable/ic_backspace_black.xml b/briar-android/src/main/res/drawable/ic_backspace.xml similarity index 94% rename from briar-android/src/main/res/drawable/ic_backspace_black.xml rename to briar-android/src/main/res/drawable/ic_backspace.xml index b0224405a..e4ecae7b1 100644 --- a/briar-android/src/main/res/drawable/ic_backspace_black.xml +++ b/briar-android/src/main/res/drawable/ic_backspace.xml @@ -1,7 +1,6 @@ \ No newline at end of file diff --git a/briar-android/src/main/res/drawable/ic_emoji_animals_nature.xml b/briar-android/src/main/res/drawable/ic_emoji_animals_nature.xml index d63c31365..29b9c0c45 100644 --- a/briar-android/src/main/res/drawable/ic_emoji_animals_nature.xml +++ b/briar-android/src/main/res/drawable/ic_emoji_animals_nature.xml @@ -4,6 +4,6 @@ android:viewportHeight="24.0" android:viewportWidth="24.0"> diff --git a/briar-android/src/main/res/drawable/ic_emoji_emoticons.xml b/briar-android/src/main/res/drawable/ic_emoji_emoticons.xml index cb97f4e15..262be839f 100644 --- a/briar-android/src/main/res/drawable/ic_emoji_emoticons.xml +++ b/briar-android/src/main/res/drawable/ic_emoji_emoticons.xml @@ -6,7 +6,7 @@ android:viewportWidth="24"> diff --git a/briar-android/src/main/res/drawable/ic_emoji_food_drink.xml b/briar-android/src/main/res/drawable/ic_emoji_food_drink.xml index 958664070..625a7c12b 100644 --- a/briar-android/src/main/res/drawable/ic_emoji_food_drink.xml +++ b/briar-android/src/main/res/drawable/ic_emoji_food_drink.xml @@ -4,6 +4,6 @@ android:viewportHeight="24.0" android:viewportWidth="24.0"> diff --git a/briar-android/src/main/res/drawable/ic_emoji_objects.xml b/briar-android/src/main/res/drawable/ic_emoji_objects.xml index 70f0ec6ea..7b15232cf 100644 --- a/briar-android/src/main/res/drawable/ic_emoji_objects.xml +++ b/briar-android/src/main/res/drawable/ic_emoji_objects.xml @@ -4,6 +4,6 @@ android:viewportHeight="24" android:viewportWidth="24"> \ No newline at end of file diff --git a/briar-android/src/main/res/drawable/ic_emoji_recent.xml b/briar-android/src/main/res/drawable/ic_emoji_recent.xml index 3f891e2e4..fc0081fc7 100644 --- a/briar-android/src/main/res/drawable/ic_emoji_recent.xml +++ b/briar-android/src/main/res/drawable/ic_emoji_recent.xml @@ -4,6 +4,6 @@ android:viewportHeight="24.0" android:viewportWidth="24.0"> diff --git a/briar-android/src/main/res/drawable/ic_emoji_smiley_people.xml b/briar-android/src/main/res/drawable/ic_emoji_smiley_people.xml index 12dfdcd2e..8af140980 100644 --- a/briar-android/src/main/res/drawable/ic_emoji_smiley_people.xml +++ b/briar-android/src/main/res/drawable/ic_emoji_smiley_people.xml @@ -4,6 +4,6 @@ android:viewportHeight="24.0" android:viewportWidth="24.0"> diff --git a/briar-android/src/main/res/drawable/ic_emoji_symbols.xml b/briar-android/src/main/res/drawable/ic_emoji_symbols.xml index 28d8ff8cf..524912968 100644 --- a/briar-android/src/main/res/drawable/ic_emoji_symbols.xml +++ b/briar-android/src/main/res/drawable/ic_emoji_symbols.xml @@ -4,6 +4,6 @@ android:viewportHeight="24.0" android:viewportWidth="24.0"> diff --git a/briar-android/src/main/res/drawable/ic_emoji_toggle.xml b/briar-android/src/main/res/drawable/ic_emoji_toggle.xml index b497d47fd..32324f57b 100644 --- a/briar-android/src/main/res/drawable/ic_emoji_toggle.xml +++ b/briar-android/src/main/res/drawable/ic_emoji_toggle.xml @@ -1,7 +1,6 @@ diff --git a/briar-android/src/main/res/drawable/ic_forums_black_24dp.xml b/briar-android/src/main/res/drawable/ic_forums_black_24dp.xml index 039f929dd..5bb4d8ebc 100644 --- a/briar-android/src/main/res/drawable/ic_forums_black_24dp.xml +++ b/briar-android/src/main/res/drawable/ic_forums_black_24dp.xml @@ -1,7 +1,6 @@ - + + diff --git a/briar-android/src/main/res/drawable/ic_group.xml b/briar-android/src/main/res/drawable/ic_group.xml index d7e92099b..b75169032 100644 --- a/briar-android/src/main/res/drawable/ic_group.xml +++ b/briar-android/src/main/res/drawable/ic_group.xml @@ -1,7 +1,6 @@ - - diff --git a/briar-android/src/main/res/drawable/ic_keyboard_black.xml b/briar-android/src/main/res/drawable/ic_keyboard.xml similarity index 95% rename from briar-android/src/main/res/drawable/ic_keyboard_black.xml rename to briar-android/src/main/res/drawable/ic_keyboard.xml index f1f26791a..dfcb91016 100644 --- a/briar-android/src/main/res/drawable/ic_keyboard_black.xml +++ b/briar-android/src/main/res/drawable/ic_keyboard.xml @@ -1,7 +1,6 @@ - + diff --git a/briar-android/src/main/res/drawable/list_item_thread_background.xml b/briar-android/src/main/res/drawable/list_item_thread_background.xml index c47b28c76..4d71497ab 100644 --- a/briar-android/src/main/res/drawable/list_item_thread_background.xml +++ b/briar-android/src/main/res/drawable/list_item_thread_background.xml @@ -3,9 +3,11 @@ xmlns:android="http://schemas.android.com/apk/res/android"> + android:drawable="@color/thread_item_background" + android:state_activated="false"/> + + android:drawable="@color/thread_item_highlight" + android:state_activated="true"/> \ No newline at end of file diff --git a/briar-android/src/main/res/drawable/message_delivered.xml b/briar-android/src/main/res/drawable/message_delivered.xml index 414c707b6..885356268 100644 --- a/briar-android/src/main/res/drawable/message_delivered.xml +++ b/briar-android/src/main/res/drawable/message_delivered.xml @@ -1,5 +1,9 @@ - - + + diff --git a/briar-android/src/main/res/drawable/message_sent.xml b/briar-android/src/main/res/drawable/message_sent.xml index 37dd9ca84..a205b178d 100644 --- a/briar-android/src/main/res/drawable/message_sent.xml +++ b/briar-android/src/main/res/drawable/message_sent.xml @@ -1,5 +1,9 @@ - - + + diff --git a/briar-android/src/main/res/drawable/message_stored.xml b/briar-android/src/main/res/drawable/message_stored.xml index d687ff520..f1a1a31b0 100644 --- a/briar-android/src/main/res/drawable/message_stored.xml +++ b/briar-android/src/main/res/drawable/message_stored.xml @@ -1,5 +1,9 @@ - - + + diff --git a/briar-android/src/main/res/drawable/social_send_now_white.xml b/briar-android/src/main/res/drawable/social_send_now_white.xml index 29d5069d5..9c8a759a3 100644 --- a/briar-android/src/main/res/drawable/social_send_now_white.xml +++ b/briar-android/src/main/res/drawable/social_send_now_white.xml @@ -1,6 +1,6 @@ - + + diff --git a/briar-android/src/main/res/drawable/transport_lan.xml b/briar-android/src/main/res/drawable/transport_lan.xml index ad12a9625..60844d4d4 100644 --- a/briar-android/src/main/res/drawable/transport_lan.xml +++ b/briar-android/src/main/res/drawable/transport_lan.xml @@ -1,6 +1,13 @@ - - - + + + diff --git a/briar-android/src/main/res/drawable/transport_tor.xml b/briar-android/src/main/res/drawable/transport_tor.xml index 9084ddbad..ce8f0060f 100644 --- a/briar-android/src/main/res/drawable/transport_tor.xml +++ b/briar-android/src/main/res/drawable/transport_tor.xml @@ -1,5 +1,9 @@ - - + + diff --git a/briar-android/src/main/res/layout-land/fragment_keyagreement_id.xml b/briar-android/src/main/res/layout-land/fragment_keyagreement_id.xml index 2c98d2974..c1f5cb114 100644 --- a/briar-android/src/main/res/layout-land/fragment_keyagreement_id.xml +++ b/briar-android/src/main/res/layout-land/fragment_keyagreement_id.xml @@ -46,7 +46,6 @@ + android:layout_weight="1"/> \ No newline at end of file diff --git a/briar-android/src/main/res/layout/activity_dev_report.xml b/briar-android/src/main/res/layout/activity_dev_report.xml index fc9e649ce..ab17da50e 100644 --- a/briar-android/src/main/res/layout/activity_dev_report.xml +++ b/briar-android/src/main/res/layout/activity_dev_report.xml @@ -6,9 +6,11 @@ android:layout_height="match_parent"> @@ -112,11 +114,10 @@ android:id="@+id/request_report" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/window_background" android:clickable="true" android:gravity="center" android:padding="@dimen/margin_large" - android:visibility="gone"> + android:visibility="invisible">