From 8aac521e0c61ccdc95c72980a8ca6cb3d5145bfc Mon Sep 17 00:00:00 2001 From: tom79 Date: Mon, 31 Jul 2017 19:29:14 +0200 Subject: [PATCH] Improves layout for accounts --- .../activities/ShowAccountActivity.java | 55 +++--- .../mastodon/drawers/AccountsListAdapter.java | 3 +- .../drawers/NotificationsListAdapter.java | 29 ++-- .../mastodon/drawers/SearchListAdapter.java | 3 +- .../mastodon/drawers/StatusListAdapter.java | 3 +- .../fragments/DisplayAccountsFragment.java | 6 +- .../fragments/DisplayStatusFragment.java | 9 +- .../gouv/etalab/mastodon/helper/Helper.java | 39 ++--- .../main/res/drawable-hdpi/ic_unlock_alt.png | Bin 0 -> 855 bytes .../main/res/drawable-hdpi/ic_user_plus.png | Bin 0 -> 939 bytes .../main/res/drawable-hdpi/ic_user_times.png | Bin 0 -> 1186 bytes .../main/res/drawable-hdpi/ic_volume_up.png | Bin 0 -> 1710 bytes .../main/res/drawable-ldpi/ic_unlock_alt.png | Bin 0 -> 451 bytes .../main/res/drawable-ldpi/ic_user_plus.png | Bin 0 -> 556 bytes .../main/res/drawable-ldpi/ic_user_times.png | Bin 0 -> 640 bytes .../main/res/drawable-ldpi/ic_volume_up.png | Bin 0 -> 776 bytes .../main/res/drawable-mdpi/ic_unlock_alt.png | Bin 0 -> 606 bytes .../main/res/drawable-mdpi/ic_user_plus.png | Bin 0 -> 602 bytes .../main/res/drawable-mdpi/ic_user_times.png | Bin 0 -> 683 bytes .../main/res/drawable-mdpi/ic_volume_up.png | Bin 0 -> 1048 bytes .../main/res/drawable-xhdpi/ic_unlock_alt.png | Bin 0 -> 1072 bytes .../main/res/drawable-xhdpi/ic_user_plus.png | Bin 0 -> 1068 bytes .../main/res/drawable-xhdpi/ic_user_times.png | Bin 0 -> 1216 bytes .../main/res/drawable-xhdpi/ic_volume_up.png | Bin 0 -> 2070 bytes .../res/drawable-xxhdpi/ic_unlock_alt.png | Bin 0 -> 1639 bytes .../main/res/drawable-xxhdpi/ic_user_plus.png | Bin 0 -> 1753 bytes .../res/drawable-xxhdpi/ic_user_times.png | Bin 0 -> 2254 bytes .../main/res/drawable-xxhdpi/ic_volume_up.png | Bin 0 -> 3375 bytes .../res/drawable-xxxhdpi/ic_unlock_alt.png | Bin 0 -> 1881 bytes .../res/drawable-xxxhdpi/ic_user_plus.png | Bin 0 -> 2058 bytes .../res/drawable-xxxhdpi/ic_user_times.png | Bin 0 -> 2557 bytes .../res/drawable-xxxhdpi/ic_volume_up.png | Bin 0 -> 3241 bytes .../main/res/layout/activity_show_account.xml | 158 ++++++++++-------- .../main/res/layout/drawer_notification.xml | 26 +-- app/src/main/res/layout/drawer_status.xml | 6 +- .../main/res/layout/showaccount_actionbar.xml | 34 ++++ 36 files changed, 220 insertions(+), 151 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/ic_unlock_alt.png create mode 100644 app/src/main/res/drawable-hdpi/ic_user_plus.png create mode 100644 app/src/main/res/drawable-hdpi/ic_user_times.png create mode 100644 app/src/main/res/drawable-hdpi/ic_volume_up.png create mode 100644 app/src/main/res/drawable-ldpi/ic_unlock_alt.png create mode 100644 app/src/main/res/drawable-ldpi/ic_user_plus.png create mode 100644 app/src/main/res/drawable-ldpi/ic_user_times.png create mode 100644 app/src/main/res/drawable-ldpi/ic_volume_up.png create mode 100644 app/src/main/res/drawable-mdpi/ic_unlock_alt.png create mode 100644 app/src/main/res/drawable-mdpi/ic_user_plus.png create mode 100644 app/src/main/res/drawable-mdpi/ic_user_times.png create mode 100644 app/src/main/res/drawable-mdpi/ic_volume_up.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_unlock_alt.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_user_plus.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_user_times.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_volume_up.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_unlock_alt.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_user_plus.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_user_times.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_volume_up.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_unlock_alt.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_user_plus.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_user_times.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_volume_up.png create mode 100644 app/src/main/res/layout/showaccount_actionbar.xml diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowAccountActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowAccountActivity.java index 456832da0..14781d2df 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowAccountActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowAccountActivity.java @@ -24,6 +24,7 @@ import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.os.Handler; +import android.support.design.widget.FloatingActionButton; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; @@ -32,9 +33,13 @@ import android.support.v4.content.ContextCompat; import android.support.v4.content.LocalBroadcastManager; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; +import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.text.Html; +import android.text.SpannableString; +import android.text.method.LinkMovementMethod; import android.util.Log; +import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.widget.Button; @@ -46,6 +51,7 @@ import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; +import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer; import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer; @@ -87,14 +93,14 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi private DisplayImageOptions options; private List statuses; private StatusListAdapter statusListAdapter; - private Button account_follow; + private FloatingActionButton account_follow; private static final int NUM_PAGES = 3; private ViewPager mPager; private String accountId; private TabLayout tabLayout; private BroadcastReceiver hide_header; - private TextView account_note; + private TextView account_note, account_follow_request; private String userId; private boolean isHiddingShowing = false; private static int instanceValue = 0; @@ -118,10 +124,12 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi }else { setTheme(R.style.AppThemeDark); } + setTitle(""); setContentView(R.layout.activity_show_account); instanceValue += 1; Bundle b = getIntent().getExtras(); - account_follow = (Button) findViewById(R.id.account_follow); + account_follow = (FloatingActionButton) findViewById(R.id.account_follow); + account_follow_request = (TextView) findViewById(R.id.account_follow_request); account_follow.setEnabled(false); if(b != null){ accountId = b.getString("accountId"); @@ -148,7 +156,7 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi boolean isOnWifi = Helper.isOnWIFI(getApplicationContext()); int behaviorWithAttachments = sharedpreferences.getInt(Helper.SET_ATTACHMENT_ACTION, Helper.ATTACHMENT_ALWAYS); statusListAdapter = new StatusListAdapter(getApplicationContext(), RetrieveFeedsAsyncTask.Type.USER, accountId, isOnWifi, behaviorWithAttachments, this.statuses); - options = new DisplayImageOptions.Builder().displayer(new SimpleBitmapDisplayer()).cacheInMemory(false) + options = new DisplayImageOptions.Builder().displayer(new RoundedBitmapDisplayer(80)).cacheInMemory(false) .cacheOnDisk(true).resetViewBeforeLoading(true).build(); @@ -210,13 +218,11 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi if( !isHiddingShowing ){ isHiddingShowing = true; ImageView account_pp = (ImageView) findViewById(R.id.account_pp); - TextView account_ac = (TextView) findViewById(R.id.account_ac); boolean hide = intent.getBooleanExtra("hide", false); if( hide){ account_follow.setVisibility(View.GONE); account_note.setVisibility(View.GONE); tabLayout.setVisibility(View.GONE); - account_ac.setVisibility(View.GONE); account_pp.getLayoutParams().width = (int) Helper.convertDpToPixel(50, context); account_pp.getLayoutParams().height = (int) Helper.convertDpToPixel(50, context); }else { @@ -224,7 +230,6 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi if( accountId != null && accountId.equals(userId)){ account_follow.setVisibility(View.GONE); } - account_ac.setVisibility(View.VISIBLE); account_pp.getLayoutParams().width = (int) Helper.convertDpToPixel(80, context); account_pp.getLayoutParams().height = (int) Helper.convertDpToPixel(80, context); tabLayout.setVisibility(View.VISIBLE); @@ -301,17 +306,26 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi ImageView account_pp = (ImageView) findViewById(R.id.account_pp); TextView account_dn = (TextView) findViewById(R.id.account_dn); TextView account_un = (TextView) findViewById(R.id.account_un); - TextView account_ac = (TextView) findViewById(R.id.account_ac); + ActionBar actionBar = getSupportActionBar(); + LayoutInflater mInflater = LayoutInflater.from(ShowAccountActivity.this); + if( actionBar != null){ + View show_account_actionbar = mInflater.inflate(R.layout.showaccount_actionbar, null); + TextView actionbar_title = (TextView) show_account_actionbar.findViewById(R.id.show_account_title); + if( account != null && account.getAcct() != null) + actionbar_title.setText(account.getAcct()); + actionBar.setCustomView(show_account_actionbar); + actionBar.setDisplayShowCustomEnabled(true); + }else { + if( account != null && account.getAcct() != null) + setTitle(account.getAcct()); + } if( account != null){ - setTitle(account.getAcct()); account_dn.setText(Helper.shortnameToUnicode(account.getDisplay_name(), true)); account_un.setText(String.format("@%s", account.getUsername())); - if( account.getAcct() != null && account.getAcct().equals(account.getUsername())) - account_ac.setVisibility(View.GONE); - else - account_ac.setText(account.getAcct()); - account_note = Helper.clickableElementsDescription(ShowAccountActivity.this, account_note,account.getNote()); + SpannableString spannableString = Helper.clickableElementsDescription(ShowAccountActivity.this, account.getNote()); + account_note.setText(spannableString, TextView.BufferType.SPANNABLE); + account_note.setMovementMethod(LinkMovementMethod.getInstance()); tabLayout.getTabAt(0).setText(getString(R.string.status_cnt, account.getStatuses_count())); tabLayout.getTabAt(1).setText(getString(R.string.following_cnt, account.getFollowing_count())); tabLayout.getTabAt(2).setText(getString(R.string.followers_cnt, account.getFollowers_count())); @@ -347,21 +361,20 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi } account_follow.setEnabled(true); if( relationship.isBlocking()){ - account_follow.setText(R.string.action_unblock); + account_follow.setImageResource(R.drawable.ic_unlock_alt); doAction = action.UNBLOCK; }else if( relationship.isRequested()){ - account_follow.setText(R.string.request_sent); - account_follow.getBackground().setColorFilter(ContextCompat.getColor(this, R.color.colorPrimary), PorterDuff.Mode.MULTIPLY); + account_follow_request.setVisibility(View.VISIBLE); + account_follow.setVisibility(View.GONE); doAction = action.NOTHING; }else if( relationship.isFollowing()){ - account_follow.setText(R.string.action_unfollow); + account_follow.setImageResource(R.drawable.ic_user_times); doAction = action.UNFOLLOW; }else if( !relationship.isFollowing()){ - account_follow.setText(R.string.action_follow); + account_follow.setImageResource(R.drawable.ic_user_plus); doAction = action.FOLLOW; }else{ - account_follow.setText(R.string.action_no_action); - account_follow.getBackground().setColorFilter(ContextCompat.getColor(this, R.color.red_1), PorterDuff.Mode.MULTIPLY); + account_follow.setVisibility(View.GONE); doAction = action.NOTHING; } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/AccountsListAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/AccountsListAdapter.java index c04fbc226..048932a36 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/AccountsListAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/AccountsListAdapter.java @@ -109,7 +109,8 @@ public class AccountsListAdapter extends BaseAdapter implements OnPostActionInte .denyCacheImageMultipleSizesInMemory() .diskCache(new UnlimitedDiskCache(cacheDir)) .build(); - imageLoader.init(configImg); + if( !imageLoader.isInited()) + imageLoader.init(configImg); DisplayImageOptions options = new DisplayImageOptions.Builder().displayer(new SimpleBitmapDisplayer()).cacheInMemory(false) .cacheOnDisk(true).resetViewBeforeLoading(true).build(); final Account account = accounts.get(position); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/NotificationsListAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/NotificationsListAdapter.java index 08b0f86b6..f73cf9c19 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/NotificationsListAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/NotificationsListAdapter.java @@ -119,7 +119,6 @@ public class NotificationsListAdapter extends BaseAdapter implements OnPostActio holder.notification_status_content = (TextView) convertView.findViewById(R.id.notification_status_content); holder.notification_account_username = (TextView) convertView.findViewById(R.id.notification_account_username); holder.notification_type = (TextView) convertView.findViewById(R.id.notification_type); - holder.notification_account_displayname = (TextView) convertView.findViewById(R.id.notification_account_displayname); holder.notification_account_profile = (ImageView) convertView.findViewById(R.id.notification_account_profile); holder.status_favorite_count = (TextView) convertView.findViewById(R.id.status_favorite_count); holder.status_reblog_count = (TextView) convertView.findViewById(R.id.status_reblog_count); @@ -136,16 +135,28 @@ public class NotificationsListAdapter extends BaseAdapter implements OnPostActio String typeString = ""; switch (type){ case "mention": - typeString = String.format("@%s %s", notification.getAccount().getAcct(),context.getString(R.string.notif_mention)); + if( notification.getAccount().getDisplay_name() != null && notification.getAccount().getDisplay_name().length() > 0) + typeString = String.format("%s %s", Helper.shortnameToUnicode(notification.getAccount().getDisplay_name(), true),context.getString(R.string.notif_mention)); + else + typeString = String.format("@%s %s", notification.getAccount().getAcct(),context.getString(R.string.notif_mention)); break; case "reblog": - typeString = String.format("@%s %s", notification.getAccount().getAcct(),context.getString(R.string.notif_reblog)); + if( notification.getAccount().getDisplay_name() != null && notification.getAccount().getDisplay_name().length() > 0) + typeString = String.format("%s %s", Helper.shortnameToUnicode(notification.getAccount().getDisplay_name(), true),context.getString(R.string.notif_reblog)); + else + typeString = String.format("@%s %s", notification.getAccount().getAcct(),context.getString(R.string.notif_reblog)); break; case "favourite": - typeString = String.format("@%s %s", notification.getAccount().getAcct(),context.getString(R.string.notif_favourite)); + if( notification.getAccount().getDisplay_name() != null && notification.getAccount().getDisplay_name().length() > 0) + typeString = String.format("%s %s", Helper.shortnameToUnicode(notification.getAccount().getDisplay_name(), true),context.getString(R.string.notif_favourite)); + else + typeString = String.format("@%s %s", notification.getAccount().getAcct(),context.getString(R.string.notif_favourite)); break; case "follow": - typeString = String.format("@%s %s", notification.getAccount().getAcct(),context.getString(R.string.notif_follow)); + if( notification.getAccount().getDisplay_name() != null && notification.getAccount().getDisplay_name().length() > 0) + typeString = String.format("%s %s", Helper.shortnameToUnicode(notification.getAccount().getDisplay_name(), true),context.getString(R.string.notif_follow)); + else + typeString = String.format("@%s %s", notification.getAccount().getAcct(),context.getString(R.string.notif_follow)); break; } holder.notification_type.setText(typeString); @@ -191,13 +202,13 @@ public class NotificationsListAdapter extends BaseAdapter implements OnPostActio if( (status.getIn_reply_to_account_id() != null && !status.getIn_reply_to_account_id().equals("null")) || (status.getIn_reply_to_id() != null && !status.getIn_reply_to_id().equals("null")) ){ Drawable img = ContextCompat.getDrawable(context, R.drawable.ic_reply); img.setBounds(0,0,(int) (20 * scale + 0.5f),(int) (15 * scale + 0.5f)); - holder.notification_account_displayname.setCompoundDrawables( img, null, null, null); + holder.notification_account_username.setCompoundDrawables( img, null, null, null); }else if( status.isReblogged()){ Drawable img = ContextCompat.getDrawable(context, R.drawable.ic_retweet); img.setBounds(0,0,(int) (20 * scale + 0.5f),(int) (15 * scale + 0.5f)); - holder.notification_account_displayname.setCompoundDrawables( img, null, null, null); + holder.notification_account_username.setCompoundDrawables( img, null, null, null); }else{ - holder.notification_account_displayname.setCompoundDrawables( null, null, null, null); + holder.notification_account_username.setCompoundDrawables( null, null, null, null); } SpannableString spannableString = Helper.clickableElements(context, status.getContent(), @@ -329,7 +340,6 @@ public class NotificationsListAdapter extends BaseAdapter implements OnPostActio displayConfirmationNotificationDialog(notification); } }); - holder.notification_account_displayname.setText(Helper.shortnameToUnicode(notification.getAccount().getDisplay_name(), true)); holder.notification_account_username.setText( String.format("@%s",notification.getAccount().getUsername())); //Profile picture imageLoader.displayImage(notification.getAccount().getAvatar(), holder.notification_account_profile, options); @@ -487,7 +497,6 @@ public class NotificationsListAdapter extends BaseAdapter implements OnPostActio TextView notification_status_content; TextView notification_type; TextView notification_account_username; - TextView notification_account_displayname; ImageView notification_account_profile; ImageView notification_delete; TextView status_favorite_count; diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/SearchListAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/SearchListAdapter.java index 23b339ddd..5d0b7b78a 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/SearchListAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/SearchListAdapter.java @@ -123,7 +123,8 @@ public class SearchListAdapter extends BaseAdapter { .denyCacheImageMultipleSizesInMemory() .diskCache(new UnlimitedDiskCache(cacheDir)) .build(); - imageLoader.init(configImg); + if( !imageLoader.isInited()) + imageLoader.init(configImg); DisplayImageOptions options = new DisplayImageOptions.Builder().displayer(new SimpleBitmapDisplayer()).cacheInMemory(false) .cacheOnDisk(true).resetViewBeforeLoading(true).build(); int type = getItemViewType(position); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java index c0d013ea4..1b5c65ec3 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java @@ -142,7 +142,8 @@ public class StatusListAdapter extends BaseAdapter implements OnPostActionInterf .denyCacheImageMultipleSizesInMemory() .diskCache(new UnlimitedDiskCache(cacheDir)) .build(); - imageLoader.init(configImg); + if( !imageLoader.isInited()) + imageLoader.init(configImg); options = new DisplayImageOptions.Builder().displayer(new SimpleBitmapDisplayer()).cacheInMemory(false) .cacheOnDisk(true).resetViewBeforeLoading(true).build(); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayAccountsFragment.java b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayAccountsFragment.java index 650b7bd0b..d8e93fb69 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayAccountsFragment.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayAccountsFragment.java @@ -118,7 +118,11 @@ public class DisplayAccountsFragment extends Fragment implements OnRetrieveAccou @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { - if (view.getId() == lv_accounts.getId() && totalItemCount > visibleItemCount) { + if(firstVisibleItem == 0 && Helper.listIsAtTop(lv_accounts)){ + Intent intent = new Intent(Helper.HEADER_ACCOUNT+instanceValue); + intent.putExtra("hide", false); + LocalBroadcastManager.getInstance(context).sendBroadcast(intent); + }else if (view.getId() == lv_accounts.getId() && totalItemCount > visibleItemCount) { final int currentFirstVisibleItem = lv_accounts.getFirstVisiblePosition(); if (currentFirstVisibleItem > lastFirstVisibleItem) { diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java index 0497acda3..e1b574641 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java @@ -128,9 +128,13 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { - if (view.getId() == lv_status.getId() && totalItemCount > visibleItemCount) { - final int currentFirstVisibleItem = lv_status.getFirstVisiblePosition(); + if(firstVisibleItem == 0 && Helper.listIsAtTop(lv_status)){ + Intent intent = new Intent(Helper.HEADER_ACCOUNT+instanceValue); + intent.putExtra("hide", false); + LocalBroadcastManager.getInstance(context).sendBroadcast(intent); + }else if (view.getId() == lv_status.getId() && totalItemCount > visibleItemCount) { + final int currentFirstVisibleItem = lv_status.getFirstVisiblePosition(); if (currentFirstVisibleItem > lastFirstVisibleItem) { Intent intent = new Intent(Helper.HEADER_ACCOUNT+instanceValue); intent.putExtra("hide", true); @@ -231,7 +235,6 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn } - @Override public void onCreate(Bundle saveInstance) { diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java index ec60b3b99..3260ebceb 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java @@ -56,6 +56,7 @@ import android.text.method.ArrowKeyMovementMethod; import android.text.method.LinkMovementMethod; import android.text.style.ClickableSpan; import android.util.DisplayMetrics; +import android.util.Patterns; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; @@ -67,6 +68,7 @@ import android.webkit.URLUtil; import android.webkit.WebSettings; import android.webkit.WebView; import android.widget.ImageView; +import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; @@ -226,7 +228,7 @@ public class Helper { private static final Pattern SHORTNAME_PATTERN = Pattern.compile(":([-+\\w]+):"); private static final Pattern urlPattern = Pattern.compile( - "(?i)\\b((?:[a-z][\\w-]+:(?:/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))", + "(?i)\\b((?:[a-z][\\w-]+:(?:/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,10}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); private static final Pattern hashtagPattern = Pattern.compile("(#[\\w_À-ú-]{1,})"); @@ -1023,7 +1025,7 @@ public class Helper { SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); boolean embedded_browser = sharedpreferences.getBoolean(Helper.SET_EMBEDDED_BROWSER, true); if( embedded_browser){ - Matcher matcher = urlPattern.matcher(spannableString); + Matcher matcher = Patterns.WEB_URL.matcher(spannableString); while (matcher.find()){ int matchStart = matcher.start(1); int matchEnd = matcher.end(); @@ -1033,7 +1035,10 @@ public class Helper { public void onClick(View textView) { Intent intent = new Intent(context, WebviewActivity.class); Bundle b = new Bundle(); - b.putString("url", url); + String finalUrl = url; + if( !url.startsWith("http://") && ! url.startsWith("https://")) + finalUrl = "http://" + url; + b.putString("url", finalUrl); intent.putExtras(b); context.startActivity(intent); } @@ -1098,14 +1103,6 @@ public class Helper { }, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); } return spannableString; - /* - statusTV.setText(spannableString, TextView.BufferType.SPANNABLE); - statusTV.setMovementMethod(null); - statusTV.setMovementMethod(LinkMovementMethod.getInstance()); - statusTV.setMovementMethod(ArrowKeyMovementMethod.getInstance()); - statusTV.setFocusable(true); - statusTV.setFocusableInTouchMode(true); - return statusTV;*/ } @@ -1115,11 +1112,10 @@ public class Helper { * Click on url => webview or external app * Click on tag => HashTagActivity * @param context Context - * @param statusTV Textview * @param fullContent String, should be the st * @return TextView */ - public static TextView clickableElementsDescription(final Context context, TextView statusTV, String fullContent) { + public static SpannableString clickableElementsDescription(final Context context, String fullContent) { SpannableString spannableString; fullContent = Helper.shortnameToUnicode(fullContent, true); @@ -1131,7 +1127,7 @@ public class Helper { SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); boolean embedded_browser = sharedpreferences.getBoolean(Helper.SET_EMBEDDED_BROWSER, true); if( embedded_browser){ - Matcher matcher = urlPattern.matcher(spannableString); + Matcher matcher = Patterns.WEB_URL.matcher(spannableString); while (matcher.find()){ int matchStart = matcher.start(1); int matchEnd = matcher.end(); @@ -1172,11 +1168,7 @@ public class Helper { } }, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); } - - statusTV.setText(spannableString, TextView.BufferType.SPANNABLE); - statusTV.setMovementMethod(null); - statusTV.setMovementMethod(LinkMovementMethod.getInstance()); - return statusTV; + return spannableString; } @@ -1398,4 +1390,13 @@ public class Helper { } } } + + /** + * Returns true if a ListView is at its top position + * @param listView ListView + * @return boolean + */ + public static boolean listIsAtTop(ListView listView) { + return listView.getChildCount() == 0 || listView.getChildAt(0).getTop() == 0; + } } diff --git a/app/src/main/res/drawable-hdpi/ic_unlock_alt.png b/app/src/main/res/drawable-hdpi/ic_unlock_alt.png new file mode 100644 index 0000000000000000000000000000000000000000..d2c8b39c441e96f8a79770db07632e8d846a26a2 GIT binary patch literal 855 zcmV-d1E~CoP)ppC6iCDxL6XU2ER)G}=W@AG&+~4B1@IO80KdVC!Lqrx1U`YA z=nSKqk`1Bmg7YSV$P@~NI|Q@{etBz`p8(aub+8*dO?4$f@GUqUAc$#`-LN9kZy>P` zoAG)DzmedN;P{pFyq`I3Yp}D4xd+ji4JsvkJk(0t&b}Vpqo&XQ zl{K6m*27&xGTP8Nu96F|H;=C&tE-@_;c!fK>T{;eX&i^0we)e#MW-9xY{34pgs;o^ zOjz4(6`%q&0ar>9XR7wI8rfH}<} z?8ea@QpxyQvR334V`-ZNc3||0>DQG6-ZIt~#*s*)d%$$0N&-sK1ID&n*%J(bK8!x~ z5l}bEh0T;H%^qyL^u740gl;gFvbh2xFkzE`WN>h>P5S~iCe5qK4A-a&r@Qtrr>{{H zc*$EoQOSNJmXkHDgq9HYGhSoJGO^qxrmeLQNSa>~8bMYFB}Yh||1yDTN5Bzq1RMcJ zz!7i+905nb5pV?lTLPgDG_wstKp+0@)q14VN4SgTj~VNEs4tn1erNPUL#=| zfFHn`@vp2&`xM7(YvZ zZS1o}LeVz*s@yh8M?r7`<5K!xNwJN6Dz?%KP9`!&n+{u~@syHcN=k`{)IrKi2_c|c zDc4M(pyqFf18pqIU~ja_Vs4ar)TfI71K(lm1xba&;Z9ul0at->;0v%QzvI&0$8i#b z=VIq4z;!;2_F>G^t(*XN3K$=eWm3FtW`P83UIBU$SwF`207nYY!*=wa;K>Z*XMm5m zjtgc4?_#moHTc%1i~uG-1n2KD+S?^1U=p^+fa^dQxG2B8A7ej|1RlZWDcI(DxvKzv z(|KhCFwtq~%vG4Mm=jiIS)|3;wA`=C)A}UN?-Hj=3SWv+1cGudEhSq7Fm^;i&9k)& z!QQMHd5a|VpOgq(PA@Ot^7;Iv2Y)&-_>GNhYegV#M&2q(sS@~}CxN4~1Pq4==uQ(j zC+oLq2|SRO&uG>q^u!{oHp@%=o&@3wUtseLP|-HZUDEb83IfRr3bbnFSD8fi2Wa=n zVa8q}1A&Y~OOzz$ipmHRA3*LgN!ZTBAh2vWCpme##mK_H>2f<&H3VK_e8zBBw%uy0 zA%eA5zODe>0jr?4SQs9RMvdKNmbrCiQB?0iNJNm2OcQ*x-sZosb($Dz~@JOh%t zGx8O93S7c`$9P6o_E|*^@_WpvI4C}u$LsiqEw}!K<;bVSmb7Gt$ZyREdFU>^U_Jl< N002ovPDHLkV1jbaxbgr1 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_user_times.png b/app/src/main/res/drawable-hdpi/ic_user_times.png new file mode 100644 index 0000000000000000000000000000000000000000..bd7fd96d1ed66e47aa1343703e0ab56c209f0174 GIT binary patch literal 1186 zcmV;T1YP@yP)wlJeSM06jXxypcOQO8n6@O!;=oLZLkSH62aCO zhH)9VKqvTV^iUW01YUt-@J?gQ;IIaQq$1E31bYI$8~*7dxQR6!PN&lrRV7$_2*NKy zpch7P^c4ka3knLxMSJ(hA;?_>`eg)9A5s1UbEHRW_eUVWK6Q!ykSP6-Ip&BZqp|zh z?EXEk!x}7oV2*7PVk5o#iR|1AJ-ELHpuiUtI3j@{(h4N8@O%V#IY0%zf^%#}Mnt2L zDzHG~dQ2)HE;KV{T`1-cu}2s!joC07qKoV#b7aI~D)CKH3E2Q&^MX`h3qqFR0lOlM zL&b#zUHTZ~{=0!XKi!#kZZcG~4~h-szhv1w+z7M@4o9k|4Ahgtm~!dF*U zC$NFpdKO=UHlB~dpJV3lDZE_8f_GqS(VhGN>givKKoXV4^ShAtEO?*=O$)dRcJXdD zZ6>@E8B?KxR`NUwL6TMYMvpV~1ze|pikT%;_*3w-du&#RDB&&q2rXEin}kjI-GpEV zX=l)8GjR@M#(=SkT>9+1n*h&3+B&sJJI^J&llk*iA@6`7)~r%XBznk{r90nl;-;?d z?(XfL2XzUZ&;0oIXLXT_2(=#+196d+U^6J^-3>7__@QIkgil>Z)@Zhv`;R-RtGV5# z%?JM{6sUD;n#&@$Jr)flJ@~9=p+$Z3t-3>(_d?8lNNNHJrz%v3k9j-cy@s{&P28rB z#ZcgHc!qhk3K1@9lAs`GOn3IQg%VvT(WIN>FIcohJ`Si7 zWftyX<-)zs3JRptS!ZJUaL^Np2P{4f;q^j^%mz2MI;9u?(DGQk0#O(px#8#JG z&rQsq^#L5Bfso`vYcv;H>?aqh^2&wE{NzG4qJU(NO<`0(ve6Bi?au0FHrnAM8{Hua zBxx$~HcSeLTb!2y1enzWojxzAo_fIBounQp|HmW;g3j}rS$+$H60+a{$$Hh5)~O}l zn}$a7icH+8RV%XcUKN=Prc{p58sC*zZ+tE11DNdoG-{|Bw?$uwVg8%>k07*qoM6N<$g1Blc Ad;kCd literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_volume_up.png b/app/src/main/res/drawable-hdpi/ic_volume_up.png new file mode 100644 index 0000000000000000000000000000000000000000..40d6ab336c7b79206a374bb4e5ee4bae6da083b5 GIT binary patch literal 1710 zcmV;f22uHmP)>rP$IUh3&21S7+jQ-FJ7lY2+l6y=Ttj&Uent zoH=thE9-LkpBJCcN16zl0P>7G;oI8U%7ek+qo9ZJe7)cApE7QMKu|9P|JZSyGoZ7e z?@@mVK!C%aHx>frf#P04^eckE2OxOJ`MdD9k3az8et?+DT}rzeu;66{ccc1oWo?at8eOFn<}}gTAQ;A;NFO%eq~wHxB@EV|X8Z&ZhBVo?9{QU9kx* z{orp81Onv*k&>M-YU7iY?+&y53nBradSTpDPywDNnt45_UkUzN*-Z=LBQ91t)F$Zs zyF>-R)yBBn(Wf5tCY~RG(A4uB18^GntI&SZ%-ap#YP3yGhuS0ppb%|MVzlSE04U9v zZyxQzfVcv@8nkzqxsQQ2E2(oLhT0?wV3!!XmP;bsLzv%dKop?wt7z+$euJntf?t|y zwMkTk?m(X{pi|OcOFP=uK)^zCQdfY#M?k77t)L4|rP?@27;y>uJODb(l{Mo#(e|Y3 zI(~CdzuTx%2xIosZtSW|0_8^{bS{aZHi_(jb)&ghm`cpO)2I~3w}LmDyJb}AEptW$ z(Y|bCqT%6T4;oj2)`4CLLmNPEU{IG6UkM99e0@<%OG`0*zDqS3&}}sWUO@d5+MBvp z)akj}rJcsV8M5aPz!nj%KMD;v@t6Mq5WSxb-gjs_jORKCSEh%V=z1kjaAOl(&RF`cK`YPk1Y1m(Ze^KT+j`llw$Z;pocAqikK8U_DQvj#}rQkj9 zI+(h^TdppVf}(zpiG_Mme@2{)M_lU9@{aQm{q2kZP!K$%Bz*2PYOhJVy*Q9DonN zD>6IqtpPAF7AiCyZQC_`z;lO&1p=TPY!#9!)WEw#1Qj}(X(Q%kZ8I zrT}#6(x4-#%Gk&U2LaWbTZBTWofx7osmEfKY}2Y?YXbx_uh; z_i3=2X@Kzg5cXLCrt0;%o)HpC)EeVI4cRLQfH$7s$PjelsK<5jNLGcKK)V^FLEvIU zrfM5{$!Rt3=>Tu8su#}+@V*r9#6{Q#*+;;!aRDY~QYsLJmVjR1l`l>Z5sjFBoSua0 zU<{kOeFMfcnTt&y#=p*cfC(|GWsx1($p&5pY)UX9N!IOgSC$~@8<|O=FsU^Q{SO-9 zxx!!5VD<7YLEa8&WBDEJixa(462$5_K*V#UWJ<9DeV%gdtQzi8%@^^PmwgjvU&6RO zbjitF>UAfMjp8I`+`mvx+a5D6B$J6{hi4Z)fGGB?5jjBU`Y#b^>++==HRfQSWv7xd4>UD72UXLO4Bu44wm zX6L|v+FXK$Bx!ups6K$W)ai*Z>J&38fpKN@>7bYKT+I-{CT%6;SZ@w3b*sy4E;SX& zU9W&R83w@oNO~$RRns=PhR4jsHJEd=E9B?`uU6e^s?+Okbs~Th8so>g5HxJ6%w3>^ z5`|jf>+znFbbjDabvhzC%VceNG+i}g3(@yMjCn`y%kEU;Itrh%Zv#1eBw$SDOUW~i)7orzB;sk8MLI3~&07*qoM6N<$ Ef>nX zUBAH*LfB1mq8361esa#7fBt{Y>@LKznnVx;Nss}DpahEG0BnGS)owVB)1S-b)_mW; z1|{$Ts)~0|1XplY;r1Dc+qT_J;SvH5Dp&!}o`#B7^z0t)A~i9S?kCW>^}phk^${Y= zsaF6#?&iDun*(a9tQu0GT(h0~G`<8n3w=SClTmfF!UZdj44MQ7~O z5e625DL69DbFj;PNb)8Ir%?tvCb@A6&N#orvTr&f6NB%Y$a%xg>kOvq48|JH)$r@> zMQ{$`yuRbd>`6PeLBylFk2A+DL<{TUoh}G t1|5TcZt!;>n*K%E1l6GZD1-G{%};ft!hO1>7;XRn002ovPDHLkV1lHV%`gA} literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-ldpi/ic_user_plus.png b/app/src/main/res/drawable-ldpi/ic_user_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..805a8d518886ff9a7ddd72f3b7cfe702c8eb1df4 GIT binary patch literal 556 zcmV+{0@MA8P)Mlo?MBpX?bu&}VwC|S#jh4LpTqR99hER?mSVn1bP;cH_hQ&zJb$&5^- zkn(lM^UEtY-I=*2DNa4zJNG^J{LVe+yzlsY|I#eWDuN2@(*jWXBf*2gU`ae4Z%(Jv zE0BN`?D4FhwZKmV581XIgM0hao*~8BB0g1xmc>VaS^{mtgY9lfeEJG1m+DR_f&@9U zv)dy+QGBZk5h&*6HiBH`5O~Gs1mEgk`vUI$j%o8}t-qrO8(w>$fc&0B^i*&^o0bZ5f|Nf>fHM{5+d8zW3bEy9)494eG- z`w!FJ*fLEXSEHc|7V|avT1S9K5hZhL(D;s;hG!pBeTJEq@0zA;Ow*KeqajdkYNqY( u)h@Itp%d~S6<-c4ucp7zVo!(NpSCw+Lq$il#eG)*0000GT6vubhOjprl9fVXQ5Oh76l1ajP$PSUGJy-`X-n<2oB9bPEe=Z%j0`cTEJXM#H zs1E&+QW06S)-I9O_^*uA(q{WSdqczG;{KtF4?a7y&)2Biwp5Q zga%>LIyhEY(;@9ksqa)+hR6%pjbpIKnm4j1sTx!u^1+H9VlbPI!GFC2dk+Q<*@I4d z4>)E@VR6PhBQ}{C2n2joSclM~I8!vrno22#X*z+~MJVCi?U+Qjj5(Zfj%PlJD+oM5 z=q@zDO_+zzFbVB&o;71|3U2T{0=K#LBpSAO6}c&R8;wTu_6L(q!{D_I?yGw;u>{u;l0AB=mD{leA?~2mHh2}Y;ILRjScc*pOgq}LuKQ%~NeFF^ z7(7eDU{{`GT2sw&Qa4jr;Cl=7aQ?+E1nqt?xU3_ZkO90zsDa}{t$12ClxH9t3OVo5 z=~_X1NDMq&ApMM(iN&J+GpdC<2wpv(7j$hAV3^EHueBp12zx`2E*cEGzR3v!Oe a4~Rd(M`P1A)a5S#0000JMbjS_`&gDbfqQR2c! zyLS}F*Cq+eOg?HYVlzIi^U5F%|a+V-Ylmua3cfve~T3H#6uv#5cp>DeYB^jRcV=l>7tu z0ft-wA(u>P-^Lz6Bm<`6_wZd2+`?}OBHyAJIV$kVC$NIp6Y!b1EX|x;F4u@XBg-XA z>fJB{Bm|JBHFKA|oIsR}>-laWu~YPY0XFT~#AUe#Xy;3%QZmG!!vr3H$KVl=tiC#9 zf4>AEh(Xi=*5jv0s0sf({h#RXA!cB=(tZPXrwEj2eD}dACjczS8nI`=JN%0XG=Q0q z4if9fPRF)^*HE8!1%iIw8Pv)K)4nMiir+1#jlQFD5WsvOB6p#FF>V3b0|;aIoiYpT z0XY=d&5|`(2AaWDs7I<5sKZ~U0{c~T+U25hp_A35to_{W7DwCE<^z-F)ubdyhtz;=RHKriS6wp^Zo87z^FmfH(? z2ER`)*A6b5iQT2gbftUI;w~7FV!%#W-#=Wmh+eb~siJZRfF#!pEUB*GAp*wlN`(yW z@`(5a8q*qO^}(afnXap?mjqTX-|@kg>*ods+ZWJ zz_*~xlNkkd{wLFOWb=AtrxCCDn~%QiMJt$#AO9!+dHe*V+)TB$6nbX>0000vF?kTTmohuaVSC#{Nc{I=lswAzL`kGr`2k;N$?(Qf-0zh4e%C> zM#8X6CUeg;%~9L7KRS-{8ytgk=gKZs`w09bW(kZC-$`C;g$=`y;&I5HLH-3?IPNB5 zcEMv2Asm5==kxiyjAjb5uMI_Hw7+a+(pIyg+a6tG@WcYoKrWXXfMmOY*upo@=!Th{ zw1D;qzD4>Z~h<3To_ z!3a#X$;AFb_6mQZNlq^@bHpB~oC`SC5zyy*{ULe;fn6U8LEp`1<_{ zkj*ziep&IH@cjXQuZP?uvCHI~soXydCX4@$9|0YZOlty;_+G%D@Q~Z1He^|yjN(lR zc;it(jDkaQQouXfGb}-m-z5kvpe_P*%WTML3UUNn640{!R{?Sam4K%W0$#T&!1Y~_ z*GukyuHZBUpUV+a0uJRA&_8GdG;;3?_q8JGkB_`!6#Jx}UEL1t;IY5RKXdg&^@j0-_cXP6P`ZtKdISQVIS8K|8AyDx#%7z*U2=sYGmSOrf0w zBPWE2QS*U!z9(aH#0$B*Y*f$(k1V@0JMU&@_b!3JKYlwjO$&m9S_2#hzawx!*Y!v? zn_V^xBMsgO)12cPZMqg5L81tDVwz?VteFjPT;v*Ux*~#4C&4RbYgA}MTje!pisi}M zp-5Y$J;5epotx6$3N_l&N2LIb&1Sj;Z8epRphAF?9@iQ>Edc|iQYkia{o>%5bFM_F zXhH_WeAWe@YL@ylrkE&G8wM=1U3U;m}=oOB_dj0M6{7qhw0mq0BkghOzpz< z3cLoF;_>)2epj2XV$R9hB6ta2z;_FK4EYiO$1!Yh2HO(&CVmg_OMwfqSZoqD6C}r+ z1Cz481FnN>nM`J0US8e=Aow2ao}KCp7T});&xLu}^9X{*nK>Irr0ex&0lNKI2tI;a zmemiNoSP$O>xB~b+?KM{yWI|l`{D}_yG#KqSbs9TfdV!tz$utpAhtyTNsM2AQoseq zRUZPBmEhji`EF5#|FJ_8k`b>>Sn-*`7m8peSPo$V37M0d)ZH*RQP|ul5>fDzfgY^Sf(KyE@Q+(?A3ZRG>w4JJ>losC!I0KD oLI~8?(FcjD{}sMJ$^IPP0lz=(bs9?$1ONa407*qoM6N<$g1Ni`V*mgE literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_user_times.png b/app/src/main/res/drawable-mdpi/ic_user_times.png new file mode 100644 index 0000000000000000000000000000000000000000..bf5ce0a0dbef441f092572f405f8a6e7474d737e GIT binary patch literal 683 zcmV;c0#yBpP)2usq0mleBB*8rhQ1~t~ zV<-I-5F+R#vHvJxxR13Gzy3aP8o zsn#OXg>@oYE|7>`fh+jc<6fZ&&d_HF^ir>Jlk>ikzER3Co}1n3PSbFkpijYj>UU$Y zSUdF|cPa+=XltYF1~ZJROHwm^9zn1QK2Yz=h{z(p3>LsIp5xi%r+6_z!-^iE*c!oS zK_9^{;1d>5kI2ZuFg}Ztl6iNY{sX#y#vBo})leSJBG1_GbUOXc5rD%jUVO{5#wjgC zM*d8XUN+}f8HGLtOOUh@qtiv;h@icn@>;$&1l({0;PlqRj{mFSwhhRiup}*%m+}y; z=?hJ{XU8E&MVlUxiG7z1i-_g|BK{-)w@DFjM|QO`HxV()a?~-SS9$)N$48d)X3hyg zzyq&YuT%o2T<3hxmmqE^z<3i*n+PyIhWy+&*n}wvULc^U=tRWNAs(I^Y()7#(9IGw z6_tub0HX-YwF(x%7kl?M&wbFrXd8>VjO026)u7HQ-h#&0@g99?l|MIgY!gRMRDKMv RDnbAN002ovPDHLkV1g1rHMjr( literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_volume_up.png b/app/src/main/res/drawable-mdpi/ic_volume_up.png new file mode 100644 index 0000000000000000000000000000000000000000..2994a360192a426cdf9e2cc6d94a0e494896d276 GIT binary patch literal 1048 zcmV+z1n2vSP)muHK782Nq}Vwb$PNf7V)i?R^pw{>LXhJ$*DX z5lONB$bts~fyKdK@C@(Wg@uLL_4W0>xRB5yNFp)`N%F863;4lMDAa|#qkRwAl$Vz` zIVNxxNZ^acu-HoEEbTRsNT3_VSROXDM&cXt0$n9*Op6Jeg;pUgNDlxtfK84>K*F4< z%qhn1F7{uLZu;lYPmcw>IrQ`CW8oWa0@$Vy?;L?MmMjm^&S8FyNE?Zh3P)5q;Q=0z z0PQi@Ze^^Mu@>5Un4f9u%%Ok9Jn@3@5+&wv!MzA1W512D#}@b3^e+kA)|26K52{aVFcyNC8#bT5$)w9A};zddpti+F+mLBO`>ct_l4 z15l0KM~nM0kwem$cV3}Tm}KK3zrtoMii6 zhgYK|;Y8Y(%mX*W1XMb|x+GcxsjB<74LfL8Spw=^+9oPlo3{GN7l}w7NYPoK^WNO9d^i;@%h>0lYqI0GF{+!9i^Ky5iAV$#-;LUW z$Zgu2b^2MA%&~mXE_uS(IvvkLxstg(Ap+OkArJ{W(Y4)tx}q^R-_8l$hC1mVP%#?L zz0m22x7y3Po_pj_qFl_JUD^STkW^^L#BwuMz1L62VcN?gxzTPu%dIeV8+g0j5&iM_ zG10YqoL3C3)E)wK;8LSd0lot8)RFo%lc#2wmz0Q^`du68pVI{MlJB4Yll}o+W8$PJ S0C4R90000tW}#fwFye1R#6c> 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 Iz&#@KUmuV6w*UYD literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_user_plus.png b/app/src/main/res/drawable-xxhdpi/ic_user_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..e1f60cc222fc85940c113541ba3792eb6dcf7124 GIT binary patch literal 1753 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 FV1iTEPR;-T literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_unlock_alt.png b/app/src/main/res/drawable-xxxhdpi/ic_unlock_alt.png new file mode 100644 index 0000000000000000000000000000000000000000..98052c59e7b0961b6f5522a91b1199bee8faa545 GIT binary patch literal 1881 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD~={ftew|C&U%V{XYr@O$Y#^V-(Oc z1pZ0{-v-*(QWE4B%)rRR%)-jX&cVsW&CACxASfg(A}S^>AtfWHps1{(rmmr>rDtel zY+`C=ZfRv>XYb_V?&;<2o;#bdh+b`+xH(ofBpXR_h0i_=fr_| zv&GZJF{I+w+uPp$!j3WwA8zXAJ{8Pd8KCVZ$2IjsfRt(PF_%uxV;r4FT)sSb&0X;^ zy5d_(P_N+BBNBNB9G@;=;S6|^8t4)tr=%N@k?HLnzE@&Sq}An{vOE4f-}Zm*+do#; z=kJC&)p%}tcJpne+UIpCI#OTH{}y-JBY&hgFt2s5A!uvkH*v8;vs?NR5!u0A} z?=H5K>vKIyJ-4h@R}@OfTCp^>bAR1x4(2OnGbD<1xBnAhKCvhA#Ejw>u0aeB9+(;z z-)m4mG3)AqSs(8#<@t8%RMC0X61JGKjkA zcHrt=mlv_Or*ZdH#BZFsG=hZo|-t!dZU&(#$g|W?~{D*7;-@b9w{+avb;l!-Ch8hNL zmg>l~hUpaxy2Jw-?l<}^6a7C+oLl77oQ9x1v-vmsHpNyX=&LW_u>N;o$5T$7L`L@a zx(E99u6f;1H#aMR-;QGg)4mtX2FbYwBI&Gu4!JYgG3*nZn;zG7bi=VphuIIPPjvlu zG+{#R&B<=OOFlBFE#p3LfWKqIbfwonf4qo4WTx_((^p!!uccR_Ib%2D{p05Ht=8LQ z8=~y;s?tj8ZLcnJ=TW%%XvLPle~V7tN{>IK=_0_eaHr+5bj^%*VdT78CbMAI--)NS zbJ9|d-79YiGo7-yMci%wMy6F#n_Frk|9_tUMfSz~l7CHsKDp_#^EnL|V!l3lSAI5Q z#x0KCUZvD0}Xsh;;i7J0h*xvXuS{ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_user_plus.png b/app/src/main/res/drawable-xxxhdpi/ic_user_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..ffa6139018803d68ef6089d8dd10432184240fe6 GIT binary patch literal 2058 zcmeH{{WlYO9LK*iHY2Ak!_;C?MAtTKTGBO4Z8vx1S<1&o_g@GQHWcj zrZS``dLFwNdCX%bbgN6T@>Cty)73fmPq@F_b9$fid4JCPx6gT<^ZuOmV(!w@S*rs8 z&|}bP-YZ-5ZM2~)K06|r0{{xVJbc|(;_`R>*92Cme%Jqk0FABUtQ^YYdoz6iL<6d+ z1%qoNboJJt4UI6yYu91do0xC3u-t5AZG$HeZS6_qt&ZD&bar*4xiftIg7@tY{Uz++ zA=Xh2H(C%AmvlZgJwuY2lbe@+`HHOUcE#PQ>W7czwTk*iWphj0z~IoxUt{mb)l)N{ zzs}7sesJ0p1b`-;L38mH45;&hJ@sACq8qb!(TC$h1U(PK1z$LgO?7LT@6 zZ?_+{3kI4f8q#IO#Lw|&{?9Ux@U0^+VX=wAk1?^0?l3XNrEx0F&Y_F5#8bB{9G{L*#ABt>2Y8&b)dahE<)>4 zw~jxMI`RO$Wx{5bP6Sm{%tZ_lD6bV>4oTW&? zjwrRl>Y8LsX}ePdajJi(ss!U-@MzjI>9Eu{7vxCAoqf{!%>EgzujaP6!V+t8fc?0I!;;GGS`)xjsyy z<-!jLCO8PAdNDyBy#PgC14G_J!ZzoiU>(pp5I~2LP%xyQK1{rlbY6hLQ@>i_iumF`nT6emnF!iLBz#{{4&zF&&zOU(#l;Aoc;%q CRf}@~ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_user_times.png b/app/src/main/res/drawable-xxxhdpi/ic_user_times.png new file mode 100644 index 0000000000000000000000000000000000000000..f46ae8a7e3744f2a05db53b373a8a09029fcb0cd GIT binary patch literal 2557 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_show_account.xml b/app/src/main/res/layout/activity_show_account.xml index f72fe067f..199f81efb 100644 --- a/app/src/main/res/layout/activity_show_account.xml +++ b/app/src/main/res/layout/activity_show_account.xml @@ -17,96 +17,108 @@ --> + android:orientation="vertical"> - + android:orientation="vertical"> + android:id="@+id/header_container" + android:layout_marginTop="5dp" + android:layout_width="match_parent" + android:gravity="center" + android:orientation="horizontal" + android:layout_height="wrap_content" + > + - + + android:gravity="center" + android:layout_marginTop="5dp" + android:orientation="horizontal"> + + + + + + /> - - -