diff --git a/briar-android/AndroidManifest.xml b/briar-android/AndroidManifest.xml index 2d8dc0223dbda7c78ff07e0d0c0aac072421d204..53ce958da8eaf502249f316bb3f27652913365d1 100644 --- a/briar-android/AndroidManifest.xml +++ b/briar-android/AndroidManifest.xml @@ -149,6 +149,16 @@ /> </activity> + <activity + android:name=".android.blogs.CreateBlogActivity" + android:label="@string/blogs_my_blogs_label" + android:parentActivityName=".android.NavDrawerActivity"> + <meta-data + android:name="android.support.PARENT_ACTIVITY" + android:value=".android.NavDrawerActivity" + /> + </activity> + <activity android:name=".android.identity.CreateIdentityActivity" android:label="@string/new_identity_title" diff --git a/briar-android/res/layout/activity_create_blog.xml b/briar-android/res/layout/activity_create_blog.xml new file mode 100644 index 0000000000000000000000000000000000000000..31a1c3df85e8983dc973c65a3529486432c3e86b --- /dev/null +++ b/briar-android/res/layout/activity_create_blog.xml @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="utf-8"?> +<ScrollView + 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"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center_horizontal" + android:orientation="vertical" + android:padding="@dimen/margin_activity_horizontal" + tools:context=".android.blogs.CreateBlogActivity"> + + <android.support.design.widget.TextInputLayout + android:id="@+id/titleLayout" + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:counterEnabled="true" + app:counterOverflowTextAppearance="@style/BriarTextCounter.Overflow"> + + <android.support.design.widget.TextInputEditText + android:id="@+id/titleInput" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:hint="@string/blogs_my_blogs_create_hint_title"/> + + </android.support.design.widget.TextInputLayout> + + <android.support.design.widget.TextInputLayout + android:id="@+id/descLayout" + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:counterEnabled="true" + app:counterOverflowTextAppearance="@style/BriarTextCounter.Overflow"> + + <android.support.design.widget.TextInputEditText + android:id="@+id/descInput" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:hint="@string/blogs_my_blogs_create_hint_desc"/> + + </android.support.design.widget.TextInputLayout> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/blogs_my_blogs_create_hint_desc_explanation"/> + + <Button + android:id="@+id/createBlogButton" + style="@style/BriarButton" + android:layout_marginTop="@dimen/margin_activity_vertical" + android:enabled="false" + android:text="@string/blogs_my_blogs_create"/> + + <ProgressBar + android:id="@+id/createBlogProgressBar" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/margin_activity_vertical" + android:indeterminate="true" + android:visibility="gone"/> + + </LinearLayout> + +</ScrollView> \ No newline at end of file diff --git a/briar-android/res/layout/activity_create_forum.xml b/briar-android/res/layout/activity_create_forum.xml index b48bce90fac407609c4b4ad898636fe057e43563..96afb47a99fdc2174122ccf0635077a185ef73e5 100644 --- a/briar-android/res/layout/activity_create_forum.xml +++ b/briar-android/res/layout/activity_create_forum.xml @@ -32,9 +32,6 @@ <Button style="@style/BriarButton" android:id="@+id/createForumButton" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_centerHorizontal="true" android:text="@string/create_forum_button" /> <ProgressBar @@ -42,8 +39,6 @@ android:layout_height="wrap_content" android:layout_width="wrap_content" android:indeterminate="true" - android:layout_centerHorizontal="true" android:visibility="gone" /> - </LinearLayout> diff --git a/briar-android/res/layout/activity_create_identity.xml b/briar-android/res/layout/activity_create_identity.xml index 23309bfa83e7f539fcffad2c5340b0bc806707fe..5919662cfba59435b0dfb13028e77fa63c8a26cb 100644 --- a/briar-android/res/layout/activity_create_identity.xml +++ b/briar-android/res/layout/activity_create_identity.xml @@ -34,8 +34,6 @@ <Button android:id="@+id/createIdentityButton" style="@style/BriarButton" - android:layout_width="wrap_content" - android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:enabled="false" android:text="@string/create_identity_button"/> diff --git a/briar-android/res/layout/fragment_blogs_list.xml b/briar-android/res/layout/fragment_blogs_list.xml new file mode 100644 index 0000000000000000000000000000000000000000..a552dc0fce49e2a0f2c2ca14340ab4c38ae51fff --- /dev/null +++ b/briar-android/res/layout/fragment_blogs_list.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- This is just a placeholder to be replaced by the real My Blogs list --> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <TextView + android:id="@+id/num" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center_horizontal" + android:padding="@dimen/margin_activity_horizontal" + android:textSize="128sp" + tools:text="1"/> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:padding="@dimen/margin_activity_horizontal" + android:text="There is nothing for you to see here.\n\nMove along and come back later." + android:textSize="@dimen/text_size_large"/> + +</LinearLayout> \ No newline at end of file diff --git a/briar-android/res/layout/introduction_message.xml b/briar-android/res/layout/introduction_message.xml index 9438479911e0a38ccd4f867f605a3ecd0505da5c..409f4afacb7e067b5e66b44002535740bbdb8b64 100644 --- a/briar-android/res/layout/introduction_message.xml +++ b/briar-android/res/layout/introduction_message.xml @@ -88,10 +88,7 @@ <Button android:id="@+id/makeIntroductionButton" style="@style/BriarButton" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:text="@string/introduction_button" - /> + android:text="@string/introduction_button"/> </LinearLayout> diff --git a/briar-android/res/layout/share_forum_message.xml b/briar-android/res/layout/share_forum_message.xml index 522a0472d75bda5ea46a11b6e56ce7253d102e68..33863fc13d0a3c9d1f5f08aea1c9a8ac058a50b3 100644 --- a/briar-android/res/layout/share_forum_message.xml +++ b/briar-android/res/layout/share_forum_message.xml @@ -34,10 +34,7 @@ <Button android:id="@+id/shareForumButton" style="@style/BriarButton" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:text="@string/forum_share_button" - /> + android:text="@string/forum_share_button"/> </LinearLayout> diff --git a/briar-android/res/menu/blogs_my_actions.xml b/briar-android/res/menu/blogs_my_actions.xml new file mode 100644 index 0000000000000000000000000000000000000000..9a3ce5b49a27da3c2484e66fe542ca375b669b2b --- /dev/null +++ b/briar-android/res/menu/blogs_my_actions.xml @@ -0,0 +1,12 @@ +<?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_create_blog" + android:icon="@drawable/ic_add_white" + android:title="@string/blogs_my_blogs_create" + app:showAsAction="ifRoom"/> + +</menu> \ No newline at end of file diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml index 1618f97e3462bad1490e8c0c05bc40a51254b947..3447cf1ec3a3b136b7f7841edcc5fca35bad4cd1 100644 --- a/briar-android/res/values/strings.xml +++ b/briar-android/res/values/strings.xml @@ -249,7 +249,15 @@ <!-- Blogs --> <string name="blogs_button">Blogs</string> <string name="blogs_feed">Feed</string> + <string name="blogs_my_blogs">My Blogs</string> + <string name="blogs_my_blogs_create">Create Blog</string> + <string name="blogs_my_blogs_label">Add new Blog</string> + <string name="blogs_my_blogs_create_hint_title">Blog title (cannot be changed later)</string> + <string name="blogs_my_blogs_create_hint_desc">A short description of your new blog</string> + <string name="blogs_my_blogs_create_hint_desc_explanation">Potential readers may or may not subscribe to your blog based on the content of the description.</string> + <string name="blogs_my_blogs_created">Blog created</string> + <string name="blogs_blog_list">Blog List</string> <string name="blogs_available_blogs">Available Blogs</string> <string name="blogs_drafts">Drafts</string> diff --git a/briar-android/res/values/styles.xml b/briar-android/res/values/styles.xml index 9251475dad32cb3016d210ed13969b3174e934b1..1ecc1494c08b202af4dfd8b99301d5752a756a1e 100644 --- a/briar-android/res/values/styles.xml +++ b/briar-android/res/values/styles.xml @@ -23,6 +23,8 @@ </style> <style name="BriarButton" parent="Widget.AppCompat.Button.Colored"> + <item name="android:layout_width">match_parent</item> + <item name="android:layout_height">wrap_content</item> <item name="android:textSize">@dimen/text_size_medium</item> <item name="android:padding">@dimen/margin_large</item> </style> @@ -109,4 +111,9 @@ <item name="tabTextColor">@color/briar_text_primary_inverse</item> </style> + <!-- This fixes the missing TextAppearance.Design.Counter.Overflow style --> + <style name="BriarTextCounter.Overflow" parent="TextAppearance.Design.Counter"> + <item name="android:textColor">@color/briar_button_negative</item> + </style> + </resources> \ No newline at end of file diff --git a/briar-android/src/org/briarproject/android/ActivityComponent.java b/briar-android/src/org/briarproject/android/ActivityComponent.java index 4d82fe74dcfe02cf5e2d3243bc419edeb5550c19..50aa911d3dbc14efc568434504413c6ab1f7cbd8 100644 --- a/briar-android/src/org/briarproject/android/ActivityComponent.java +++ b/briar-android/src/org/briarproject/android/ActivityComponent.java @@ -2,6 +2,7 @@ package org.briarproject.android; import android.app.Activity; +import org.briarproject.android.blogs.CreateBlogActivity; import org.briarproject.android.blogs.MyBlogsFragment; import org.briarproject.android.contact.ContactListFragment; import org.briarproject.android.contact.ConversationActivity; @@ -64,6 +65,8 @@ public interface ActivityComponent { void inject(ForumActivity activity); + void inject(CreateBlogActivity activity); + void inject(SettingsActivity activity); void inject(ChangePasswordActivity activity); diff --git a/briar-android/src/org/briarproject/android/AndroidComponent.java b/briar-android/src/org/briarproject/android/AndroidComponent.java index 5bc21c1cc27c7d79099c6e82b545b692e3d11f1a..d6a495eb0ff57af79c6f3774f2aec8422aadb370 100644 --- a/briar-android/src/org/briarproject/android/AndroidComponent.java +++ b/briar-android/src/org/briarproject/android/AndroidComponent.java @@ -7,6 +7,8 @@ import org.briarproject.android.api.AndroidNotificationManager; import org.briarproject.android.api.ReferenceManager; import org.briarproject.android.forum.ForumPersistentData; import org.briarproject.android.report.BriarReportSender; +import org.briarproject.api.blogs.BlogManager; +import org.briarproject.api.blogs.BlogPostFactory; import org.briarproject.api.contact.ContactExchangeTask; import org.briarproject.api.contact.ContactManager; import org.briarproject.api.crypto.CryptoComponent; @@ -96,6 +98,10 @@ public interface AndroidComponent extends CoreEagerSingletons { ForumPostFactory forumPostFactory(); + BlogManager blogManager(); + + BlogPostFactory blogPostFactory(); + SettingsManager settingsManager(); ContactExchangeTask contactExchangeTask(); diff --git a/briar-android/src/org/briarproject/android/blogs/BlogListFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogListFragment.java new file mode 100644 index 0000000000000000000000000000000000000000..61f3dff54a547415013d1dc473f3406b763f2021 --- /dev/null +++ b/briar-android/src/org/briarproject/android/blogs/BlogListFragment.java @@ -0,0 +1,53 @@ +package org.briarproject.android.blogs; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import org.briarproject.R; +import org.briarproject.android.ActivityComponent; +import org.briarproject.android.fragment.BaseFragment; + +public class BlogListFragment extends BaseFragment { + + public final static String TAG = BlogListFragment.class.getName(); + + static BlogListFragment newInstance(int num) { + BlogListFragment f = new BlogListFragment(); + + Bundle args = new Bundle(); + args.putInt("num", num); + f.setArguments(args); + + return f; + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View v = inflater.inflate(R.layout.fragment_blogs_list, container, + false); + + TextView numView = (TextView) v.findViewById(R.id.num); + String num = String.valueOf(getArguments().getInt("num")); + numView.setText(num); + + return v; + } + + @Override + public void injectFragment(ActivityComponent component) { + component.inject(this); + } + + @Override + public String getUniqueTag() { + return TAG; + } + +} diff --git a/briar-android/src/org/briarproject/android/blogs/BlogsFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogsFragment.java index a736537ff9257943e90197255ef9b08e42079765..312a9d06c8218f2ab33f60e316e8de31cc71f00b 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogsFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogsFragment.java @@ -78,7 +78,7 @@ public class BlogsFragment extends BaseFragment { } - private static class TabAdapter extends FragmentStatePagerAdapter { + private class TabAdapter extends FragmentStatePagerAdapter { private String[] titles; TabAdapter(FragmentManager fm, String[] titles) { @@ -94,9 +94,10 @@ public class BlogsFragment extends BaseFragment { @Override public Fragment getItem(int position) { switch (position) { - // TODO add your fragments here + case 1: + return new MyBlogsFragment(); default: - return MyBlogsFragment.newInstance(position); + return BlogListFragment.newInstance(position); } } diff --git a/briar-android/src/org/briarproject/android/blogs/CreateBlogActivity.java b/briar-android/src/org/briarproject/android/blogs/CreateBlogActivity.java new file mode 100644 index 0000000000000000000000000000000000000000..97934a65f923dfe6cdba01db9aa6ee34d98df160 --- /dev/null +++ b/briar-android/src/org/briarproject/android/blogs/CreateBlogActivity.java @@ -0,0 +1,184 @@ +package org.briarproject.android.blogs; + +import android.os.Bundle; +import android.support.design.widget.TextInputEditText; +import android.support.design.widget.TextInputLayout; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.ProgressBar; +import android.widget.TextView; +import android.widget.TextView.OnEditorActionListener; +import android.widget.Toast; + +import org.briarproject.R; +import org.briarproject.android.ActivityComponent; +import org.briarproject.android.BriarActivity; +import org.briarproject.api.blogs.Blog; +import org.briarproject.api.blogs.BlogManager; +import org.briarproject.api.db.DbException; +import org.briarproject.api.identity.IdentityManager; +import org.briarproject.api.identity.LocalAuthor; +import org.briarproject.util.StringUtils; + +import java.util.Collection; +import java.util.logging.Logger; + +import javax.inject.Inject; + +import static android.view.View.GONE; +import static android.view.View.VISIBLE; +import static android.widget.Toast.LENGTH_LONG; +import static java.util.logging.Level.INFO; +import static java.util.logging.Level.WARNING; +import static org.briarproject.api.blogs.BlogConstants.MAX_BLOG_DESC_LENGTH; +import static org.briarproject.api.blogs.BlogConstants.MAX_BLOG_TITLE_LENGTH; + +public class CreateBlogActivity extends BriarActivity + implements OnEditorActionListener, OnClickListener { + + private static final Logger LOG = + Logger.getLogger(CreateBlogActivity.class.getName()); + + private TextInputEditText titleInput, descInput; + private Button button; + private ProgressBar progress; + + // Fields that are accessed from background threads must be volatile + @Inject + protected volatile IdentityManager identityManager; + @Inject + volatile BlogManager blogManager; + + @Override + public void onCreate(Bundle state) { + super.onCreate(state); + + setContentView(R.layout.activity_create_blog); + + TextInputLayout titleLayout = + (TextInputLayout) findViewById(R.id.titleLayout); + if (titleLayout != null) { + titleLayout.setCounterMaxLength(MAX_BLOG_TITLE_LENGTH); + } + titleInput = (TextInputEditText) findViewById(R.id.titleInput); + TextWatcher nameEntryWatcher = new TextWatcher() { + @Override + public void afterTextChanged(Editable s) { + } + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + } + @Override + public void onTextChanged(CharSequence text, int start, + int lengthBefore, int lengthAfter) { + enableOrDisableCreateButton(); + } + }; + titleInput.setOnEditorActionListener(this); + titleInput.addTextChangedListener(nameEntryWatcher); + + TextInputLayout descLayout = + (TextInputLayout) findViewById(R.id.descLayout); + if (descLayout != null) { + descLayout.setCounterMaxLength(MAX_BLOG_DESC_LENGTH); + } + descInput = (TextInputEditText) findViewById(R.id.descInput); + if (descInput != null) { + descInput.addTextChangedListener(nameEntryWatcher); + } + + button = (Button) findViewById(R.id.createBlogButton); + if (button != null) { + button.setOnClickListener(this); + } + + progress = (ProgressBar) findViewById(R.id.createBlogProgressBar); + } + + @Override + public void injectActivity(ActivityComponent component) { + component.inject(this); + } + + private void enableOrDisableCreateButton() { + if (progress == null) return; // Not created yet + button.setEnabled(validateTitle() && validateDescription()); + } + + @Override + public boolean onEditorAction(TextView textView, int actionId, KeyEvent e) { + descInput.requestFocus(); + return true; + } + + private boolean validateTitle() { + String name = titleInput.getText().toString(); + int length = StringUtils.toUtf8(name).length; + return length <= MAX_BLOG_TITLE_LENGTH && length > 0; + } + + private boolean validateDescription() { + String name = descInput.getText().toString(); + int length = StringUtils.toUtf8(name).length; + return length <= MAX_BLOG_DESC_LENGTH && length > 0; + } + + @Override + public void onClick(View view) { + if (view == button) { + hideSoftKeyboard(view); + if (!validateTitle()) return; + button.setVisibility(GONE); + progress.setVisibility(VISIBLE); + addBlog(titleInput.getText().toString(), + descInput.getText().toString()); + } + } + + private void addBlog(final String title, final String description) { + runOnDbThread(new Runnable() { + @Override + public void run() { + try { + long now = System.currentTimeMillis(); + Collection<LocalAuthor> authors = + identityManager.getLocalAuthors(); + // take first identity, don't support more for now + LocalAuthor author = authors.iterator().next(); + Blog f = blogManager.addBlog(author, title, description); + long duration = System.currentTimeMillis() - now; + if (LOG.isLoggable(INFO)) + LOG.info("Storing blog took " + duration + " ms"); + displayBlog(f); + } catch (DbException e) { + // TODO show error, e.g. blog with same title exists + if (LOG.isLoggable(WARNING)) + LOG.log(WARNING, e.toString(), e); + finishOnUiThread(); + } + } + }); + } + + private void displayBlog(final Blog b) { + runOnUiThread(new Runnable() { + @Override + public void run() { + // TODO +/* Intent i = new Intent(CreateBlogActivity.this, + BlogActivity.class); + i.putExtra(GROUP_ID, b.getId().getBytes()); + i.putExtra(BLOG_NAME, b.getName()); + startActivity(i); +*/ Toast.makeText(CreateBlogActivity.this, + R.string.blogs_my_blogs_created, LENGTH_LONG).show(); + supportFinishAfterTransition(); + } + }); + } +} diff --git a/briar-android/src/org/briarproject/android/blogs/MyBlogsFragment.java b/briar-android/src/org/briarproject/android/blogs/MyBlogsFragment.java index 572bc516eb02192deee98f8b4b0d9a7965e120c5..cb28dd0ea5500b8afe442b063616b5a57b7bc1d0 100644 --- a/briar-android/src/org/briarproject/android/blogs/MyBlogsFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/MyBlogsFragment.java @@ -1,8 +1,14 @@ package org.briarproject.android.blogs; +import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.ActivityOptionsCompat; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; @@ -13,6 +19,8 @@ import org.briarproject.android.fragment.BaseFragment; import javax.inject.Inject; +import static android.support.v4.app.ActivityOptionsCompat.makeCustomAnimation; + public class MyBlogsFragment extends BaseFragment { public final static String TAG = MyBlogsFragment.class.getName(); @@ -21,31 +29,52 @@ public class MyBlogsFragment extends BaseFragment { public MyBlogsFragment() { } - static MyBlogsFragment newInstance(int num) { - MyBlogsFragment f = new MyBlogsFragment(); - - Bundle args = new Bundle(); - args.putInt("num", num); - f.setArguments(args); - - return f; - } - @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + setHasOptionsMenu(true); View v = inflater.inflate(R.layout.fragment_blogs_my, container, false); TextView numView = (TextView) v.findViewById(R.id.num); - String num = String.valueOf(getArguments().getInt("num")); - numView.setText(num); + numView.setText("My Blogs"); return v; } + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + listener.getActivityComponent().inject(this); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.blogs_my_actions, menu); + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public boolean onOptionsItemSelected(final MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_create_blog: + Intent intent = + new Intent(getContext(), CreateBlogActivity.class); + ActivityOptionsCompat options = + makeCustomAnimation(getActivity(), + android.R.anim.slide_in_left, + android.R.anim.slide_out_right); + ActivityCompat.startActivity(getActivity(), intent, + options.toBundle()); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + @Override public String getUniqueTag() { return TAG; diff --git a/briar-android/src/org/briarproject/android/util/AndroidUtils.java b/briar-android/src/org/briarproject/android/util/AndroidUtils.java index af9cc2ae05019165d74a0df10f6fe17d4039a8d4..216ba316e46439d4305c4ab95759cb4a76764810 100644 --- a/briar-android/src/org/briarproject/android/util/AndroidUtils.java +++ b/briar-android/src/org/briarproject/android/util/AndroidUtils.java @@ -56,6 +56,11 @@ public class AndroidUtils { til.setError(null); } + public static void setError(TextInputLayout til, int res, + boolean condition) { + setError(til, til.getContext().getString(res), condition); + } + public static String getBluetoothAddress(Context ctx, BluetoothAdapter adapter) { // Return the adapter's address if it's valid and not fake diff --git a/briar-android/src/org/briarproject/android/util/TextAvatarView.java b/briar-android/src/org/briarproject/android/util/TextAvatarView.java index cc4ab91485f01f58350ce663ddcbd81e39a0c502..6033021eb2699f4410799252dff8bea808e6ee5f 100644 --- a/briar-android/src/org/briarproject/android/util/TextAvatarView.java +++ b/briar-android/src/org/briarproject/android/util/TextAvatarView.java @@ -38,7 +38,7 @@ public class TextAvatarView extends FrameLayout { } public void setText(String text) { - character.setText(text); + character.setText(text.toUpperCase()); } public void setUnreadCount(int count) {