From b68cb689ca15470a830079582aee41b877b33755 Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 18 Sep 2020 18:10:04 +0200 Subject: [PATCH] Multi account --- app/src/acad/res/values/strings.xml | 2 + app/src/full/res/values/strings.xml | 3 + app/src/main/AndroidManifest.xml | 6 +- .../fedilab/fedilabtube/AboutActivity.java | 2 +- .../fedilab/fedilabtube/AccountActivity.java | 42 ++++++++ .../fedilabtube/PeertubeRegisterActivity.java | 9 +- .../drawer/OwnAccountsAdapter.java | 95 ++++++++++++++++++ .../fedilab/fedilabtube/helper/Helper.java | 42 +++++--- .../services/RetrieveInfoService.java | 19 +++- .../fedilabtube/viewmodel/AccountsVM.java | 3 +- .../drawable-hdpi/ic_notification_tubelab.png | Bin 499 -> 720 bytes .../drawable-mdpi/ic_notification_tubelab.png | Bin 359 -> 491 bytes .../ic_notification_tubelab.png | Bin 614 -> 937 bytes .../ic_notification_tubelab.png | Bin 905 -> 1309 bytes .../ic_notification_tubelab.png | Bin 0 -> 1656 bytes .../drawable/ic_baseline_person_add_24.xml | 10 ++ app/src/main/res/layout/activity_login.xml | 2 +- .../main/res/layout/drawer_account_owner.xml | 45 +++++++++ app/src/main/res/menu/main_profile.xml | 9 ++ 19 files changed, 262 insertions(+), 27 deletions(-) create mode 100644 app/src/main/java/app/fedilab/fedilabtube/drawer/OwnAccountsAdapter.java create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_notification_tubelab.png create mode 100644 app/src/main/res/drawable/ic_baseline_person_add_24.xml create mode 100644 app/src/main/res/layout/drawer_account_owner.xml create mode 100644 app/src/main/res/menu/main_profile.xml diff --git a/app/src/acad/res/values/strings.xml b/app/src/acad/res/values/strings.xml index 502b19a..c74c3a5 100644 --- a/app/src/acad/res/values/strings.xml +++ b/app/src/acad/res/values/strings.xml @@ -236,4 +236,6 @@ No opinion Pickup languages Mise à jour des informations + + Liste des comptes diff --git a/app/src/full/res/values/strings.xml b/app/src/full/res/values/strings.xml index 2b30f00..d69ea1b 100644 --- a/app/src/full/res/values/strings.xml +++ b/app/src/full/res/values/strings.xml @@ -252,4 +252,7 @@ Pickup categories Pickup languages Update information + + Add an account + List of accounts \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 574121e..9b64f31 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,15 +5,15 @@ - + + accounts = new AccountDAO(AccountActivity.this, db).getAllAccount(); + + AlertDialog.Builder builderSingle = new AlertDialog.Builder(AccountActivity.this); + builderSingle.setTitle(getString(R.string.list_of_accounts)); + final OwnAccountsAdapter accountsListAdapter = new OwnAccountsAdapter(AccountActivity.this, accounts); + final Account[] accountArray = new Account[accounts.size()]; + int i = 0; + for (Account account : accounts) { + accountArray[i] = account; + i++; + } + builderSingle.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss()); + builderSingle.setPositiveButton(R.string.add_account, (dialog, which) -> { + Intent intent = new Intent(AccountActivity.this, LoginActivity.class); + startActivity(intent); + finish(); + }); + builderSingle.setAdapter(accountsListAdapter, (dialog, which) -> { + final Account account = accountArray[which]; + SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); + SharedPreferences.Editor editor = sharedpreferences.edit(); + editor.putString(Helper.PREF_KEY_OAUTH_TOKEN, account.getToken()); + editor.putString(Helper.PREF_INSTANCE, account.getInstance()); + editor.putString(Helper.PREF_KEY_ID, account.getId()); + editor.apply(); + dialog.dismiss(); + Intent intent = new Intent(AccountActivity.this, MainActivity.class); + startActivity(intent); + finish(); + }); + builderSingle.show(); } return super.onOptionsItemSelected(item); } diff --git a/app/src/main/java/app/fedilab/fedilabtube/PeertubeRegisterActivity.java b/app/src/main/java/app/fedilab/fedilabtube/PeertubeRegisterActivity.java index 1a05923..b785210 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/PeertubeRegisterActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/PeertubeRegisterActivity.java @@ -83,6 +83,9 @@ public class PeertubeRegisterActivity extends AppCompatActivity { if (BuildConfig.full_instances) { login_instance_container.setVisibility(View.VISIBLE); title_login_instance.setVisibility(View.VISIBLE); + } else { + login_instance_container.setVisibility(View.GONE); + title_login_instance.setVisibility(View.GONE); } username.setOnFocusChangeListener((view, focused) -> { @@ -161,7 +164,11 @@ public class PeertubeRegisterActivity extends AppCompatActivity { signup.setEnabled(false); if (BuildConfig.full_instances) { - instance = login_instance.getText().toString(); + if (login_instance.getText() != null) { + instance = login_instance.getText().toString(); + } else { + instance = ""; + } } else { String host = emailArray[1]; instance = Helper.getPeertubeUrl(host); diff --git a/app/src/main/java/app/fedilab/fedilabtube/drawer/OwnAccountsAdapter.java b/app/src/main/java/app/fedilab/fedilabtube/drawer/OwnAccountsAdapter.java new file mode 100644 index 0000000..93fcc77 --- /dev/null +++ b/app/src/main/java/app/fedilab/fedilabtube/drawer/OwnAccountsAdapter.java @@ -0,0 +1,95 @@ +package app.fedilab.fedilabtube.drawer; +/* Copyright 2020 Thomas Schneider + * + * This file is a part of TubeLab + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * TubeLab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with TubeLab; if not, + * see . */ + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; + + +import java.util.List; + +import app.fedilab.fedilabtube.R; +import app.fedilab.fedilabtube.client.entities.Account; +import app.fedilab.fedilabtube.helper.Helper; + + +public class OwnAccountsAdapter extends ArrayAdapter { + + private List accounts; + private LayoutInflater layoutInflater; + + public OwnAccountsAdapter(Context context, List accounts) { + super(context, android.R.layout.simple_list_item_1, accounts); + this.accounts = accounts; + layoutInflater = LayoutInflater.from(context); + } + + + @Override + public int getCount() { + return accounts.size(); + } + + @Override + public Account getItem(int position) { + return accounts.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @NonNull + @Override + public View getView(final int position, View convertView, @NonNull ViewGroup parent) { + + final Account account = accounts.get(position); + final ViewHolder holder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.drawer_account_owner, parent, false); + holder = new ViewHolder(); + holder.account_pp = convertView.findViewById(R.id.account_pp); + holder.account_un = convertView.findViewById(R.id.account_un); + + holder.account_container = convertView.findViewById(R.id.account_container); + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } + + holder.account_un.setText(String.format("@%s", account.getAcct())); + //Profile picture + Helper.loadGiF(holder.account_pp.getContext(), account.getAvatar().compareTo("null") != 0 ? "https://" + account.getInstance() + account.getAvatar() : "null", holder.account_pp); + return convertView; + } + + + private static class ViewHolder { + ImageView account_pp; + TextView account_un; + LinearLayout account_container; + } + + +} \ No newline at end of file diff --git a/app/src/main/java/app/fedilab/fedilabtube/helper/Helper.java b/app/src/main/java/app/fedilab/fedilabtube/helper/Helper.java index 9922918..3cfc6e0 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/helper/Helper.java +++ b/app/src/main/java/app/fedilab/fedilabtube/helper/Helper.java @@ -57,6 +57,7 @@ import java.util.TimeZone; import java.util.regex.Pattern; import app.fedilab.fedilabtube.BuildConfig; +import app.fedilab.fedilabtube.LoginActivity; import app.fedilab.fedilabtube.MainActivity; import app.fedilab.fedilabtube.R; import app.fedilab.fedilabtube.WebviewActivity; @@ -627,29 +628,38 @@ public class Helper { * Log out the authenticated user by removing its token * * @param activity Activity + * @param account Account */ public static void logoutCurrentUser(Activity activity, Account account) { - SharedPreferences sharedpreferences = activity.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); - + SharedPreferences sharedpreferences = activity.getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE); + //Current user SQLiteDatabase db = Sqlite.getInstance(activity.getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); + if (account != null) { new AccountDAO(activity, db).removeUser(account); } + Account newAccount = new AccountDAO(activity, db).getLastUsedAccount(); SharedPreferences.Editor editor = sharedpreferences.edit(); - editor.putString(Helper.PREF_KEY_OAUTH_TOKEN, null); - editor.putString(Helper.CLIENT_ID, null); - editor.putString(Helper.CLIENT_SECRET, null); - editor.putString(Helper.PREF_KEY_ID, null); - editor.putBoolean(Helper.PREF_IS_MODERATOR, false); - editor.putBoolean(Helper.PREF_IS_ADMINISTRATOR, false); - editor.putString(Helper.PREF_INSTANCE, null); - editor.putString(Helper.ID, null); - editor.apply(); - Intent mainActivity = new Intent(activity, MainActivity.class); - mainActivity.putExtra(Helper.INTENT_ACTION, Helper.ADD_USER_INTENT); - activity.startActivity(mainActivity); - activity.finish(); - + if (newAccount == null) { + editor.putString(PREF_KEY_OAUTH_TOKEN, null); + editor.putString(CLIENT_ID, null); + editor.putString(CLIENT_SECRET, null); + editor.putString(PREF_KEY_ID, null); + editor.putString(PREF_INSTANCE, null); + editor.putString(ID, null); + editor.apply(); + Intent loginActivity = new Intent(activity, LoginActivity.class); + activity.startActivity(loginActivity); + activity.finish(); + } else { + editor.putString(PREF_KEY_OAUTH_TOKEN, newAccount.getToken()); + editor.putString(PREF_KEY_ID, newAccount.getId()); + editor.putString(PREF_INSTANCE, newAccount.getInstance().trim()); + editor.commit(); + Intent changeAccount = new Intent(activity, MainActivity.class); + changeAccount.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); + activity.startActivity(changeAccount); + } } diff --git a/app/src/main/java/app/fedilab/fedilabtube/services/RetrieveInfoService.java b/app/src/main/java/app/fedilab/fedilabtube/services/RetrieveInfoService.java index 10cba08..9f79951 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/services/RetrieveInfoService.java +++ b/app/src/main/java/app/fedilab/fedilabtube/services/RetrieveInfoService.java @@ -15,7 +15,10 @@ package app.fedilab.fedilabtube.services; * see . */ import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; import android.app.Service; +import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Build; @@ -25,6 +28,7 @@ import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; import java.util.LinkedHashMap; +import java.util.Objects; import app.fedilab.fedilabtube.R; import app.fedilab.fedilabtube.client.HttpsConnection; @@ -37,7 +41,7 @@ import static app.fedilab.fedilabtube.MainActivity.peertubeInformation; public class RetrieveInfoService extends Service implements NetworkStateReceiver.NetworkStateReceiverListener { - static String NOTIFICATION_CHANNEL_ID = "update_info"; + static String NOTIFICATION_CHANNEL_ID = "update_info_peertube"; private NetworkStateReceiver networkStateReceiver; @@ -53,19 +57,26 @@ public class RetrieveInfoService extends Service implements NetworkStateReceiver @Override public int onStartCommand(Intent intent, int flags, int startId) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - Notification.Builder builder = new Notification.Builder(this, NOTIFICATION_CHANNEL_ID) + NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, + getString(R.string.notification_channel_name), + NotificationManager.IMPORTANCE_DEFAULT); + channel.setSound(null, null); + + ((NotificationManager) Objects.requireNonNull(getSystemService(Context.NOTIFICATION_SERVICE))).createNotificationChannel(channel); + android.app.Notification notification = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID) .setSmallIcon(R.drawable.ic_notification_tubelab) .setContentTitle(getString(R.string.app_name)) .setContentText(getString(R.string.notification_channel_name)) - .setAutoCancel(true); + .setAutoCancel(true).build(); - Notification notification = builder.build(); startForeground(1, notification); } else { NotificationCompat.Builder builder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID) .setContentTitle(getString(R.string.app_name)) + .setDefaults(Notification.DEFAULT_ALL) .setContentText(getString(R.string.notification_channel_name)) .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setAutoCancel(true); diff --git a/app/src/main/java/app/fedilab/fedilabtube/viewmodel/AccountsVM.java b/app/src/main/java/app/fedilab/fedilabtube/viewmodel/AccountsVM.java index 2f12563..a285eac 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/viewmodel/AccountsVM.java +++ b/app/src/main/java/app/fedilab/fedilabtube/viewmodel/AccountsVM.java @@ -73,6 +73,7 @@ public class AccountsVM extends AndroidViewModel { CHANNEL, MUTED, SINGLE_ACCOUNT, - SINGLE_CHANNEL + SINGLE_CHANNEL, + OWN_ACCOUNTS } } diff --git a/app/src/main/res/drawable-hdpi/ic_notification_tubelab.png b/app/src/main/res/drawable-hdpi/ic_notification_tubelab.png index a58f6a58af4faaa51f1d0eac9d52e85cdd420c1b..27f4dd86d3fded637068def6f85a8bc001bf8a00 100644 GIT binary patch delta 697 zcmV;q0!IDw1JDJKBYy&yNklU&Al`EG;QBa41Vtezf>H1wcn~BYXcCC85Dh+7-SKPu28wbX z-957lf(5_JbXE1&J>An?)7JLia<(7{=71`=2x{ON_#XVRX@77FT&By2QL?b<$p{k~%Mff<$XB{&XNfcBL5 zcKUTQE;O^=`ay?_m^I+7nsSq*=sCC|I0D{_oL51?CU~wI(Kx8&v>w-jr(%$YY=X|K znW^NwTjznhVt*HIPI6ubz6e1Vn)C@VGd00J9)nqNj%U>ZE~X?dWDvCzG}za{IHyq| zsM{jxeX!0`Pysw*U&B!j>%mVtd<2Uul1|aT56t%vwL`4cvTi&oW@p4Q;gpCmyJw@L zpatLq<9l>tO(Z|%At>NEXJ)J9AnF=pYr0`lB<}STB!7>UEtWZY81qm!1UU*a_8FW` zn=Q0&3Im!gD6~r{IZCY(WIIDG5#+LlLP6t6f`(eS%Sv&(?3YM9YV)DX`W<494U8Yu z4L8+jw>JAr%^YW#qpBNDxW2Y5XPKyAo`bJ{o%p=W*M*=)+FdBiY0voW?CVOL!vi%- zuUrVjtMj_>+N5YxfZD*Eb?aOz7@OLG!aW_4@q9awF1=N*a= zWe(px8Sm12!I-#DA8-kd64l`I-8O5B<&UY&PJ$Pz#6IjZqH_r)^cc7Ov53mmJR4Ev zRA{CW-j(H@SC~AjnStE~EAv>0v%xmbNZnD0`7-ETkKNiih+D#cKLfn>PK(ZGcm&n> f|ET)U{}B5Pq+R7?GX3AE00000NkvXXu0mjfJpojk delta 474 zcmV<00VV#>1@i-tBYy$9NkllPRN(U`7u14CBGos`DA~NO)i)JBG%f@>4(#s(>v%5zIA7Un4G>XEpM>x zjsVg+{j%k<`Ls{@g2a%1b?#Clz>qlAR;Fi#1S4~ zDhre+GfNFQp&1sOsZ{6L1Eyi%V&efdr*soL7y?uqb9f@obg|$S;vN=xrE5C4}X!&R02vaA>z>(0`y`6M3xW+^53pL5YSQzXxwvv3DBGnLx)PnNovDE zYOc0lSlS*8*2;@eMD*;B3#!DL{)_;h-W_+G(Ad;Db; z1w5Sc0epgL!d7rTHpq&{2Fdo=;34OX#!N_7us!vysE5@>fR6C(91v&7H&mojX^zB) Q5C8xG07*qoM6N<$g0_;{%m4rY diff --git a/app/src/main/res/drawable-mdpi/ic_notification_tubelab.png b/app/src/main/res/drawable-mdpi/ic_notification_tubelab.png index 5cfd622e343f1627a85a46aab763846618571407..d7cd8a2ee139a1d163825f578de8aa0e617ebcd8 100644 GIT binary patch delta 465 zcmV;?0WSXM0_y{iB!99=L_t(|+QpVlC`3^d$7c{Dk)3A2O0$q*qwF+WQSzc;3u=Z^p-|-{#!&@$Nb2 z-uqmx{}QE?8`Oa*um>){8+ZXHAOgC9Czs$paG>nT73g;oynhos(D@ylgE`Ovf}{=1 zfEaC3U>lTM1#cB!b_)D9KFAMt#BRKq46DH%4d+3r!+wo|SFmf^7bsU5Jmw_0A;vUg z3>z1`;Fbck*7wu)n3X7#$`CUjWpL7sje~%V1nrE~Bb8fJhO;D4oR$SpktKl# z+=5N1ykUT#MSp^{T!NM?N!G!cR49iD6engGl$hA-iBi9rpf6K`t{*CqPLPm_6djlH zZ8GggzDy)%SIadh&Sy+%zYiv*VnS?xAkTy5V}I(UvPRsX_n delta 332 zcmV-S0ki(=1Lp#eB!4bRL_t(|+Qn7v5rZHM?Ff$G2yRd}kP*6pY*03+o5&`*fovcf z(BOq@4naQ7yXNlw2_Y}M5O_TPX~viqFal=4Zhp3-&#tvKi5tM%OB%BsW1Ety7m`2$ zCIAEU2!=jI;+EuTFuAK*19(P39An*S+ACQWlDsRBv?C--P=79PikjpR5^*IB4{Wx& zj~OH)C>82>G&HiY$MrdNTS((MbxL$j2?A@|m4tY^tV!y0+OZ4*XJaImxk9MZSzka9 zl#IsSK_GJpY9!(biBxTqRZWxmsWD*!S#V8X{-Ei^pz(r1)2BkbDXe`e_TW=N9=o-M z#7n+LW%Q&vK1GsDS?Cj=^(U;})9?WdfG1)=-$vrr?C%rh667>jrZKju{q#9rPvy;m e#I^FociI=AAe8X4HzOzj0000 diff --git a/app/src/main/res/drawable-xhdpi/ic_notification_tubelab.png b/app/src/main/res/drawable-xhdpi/ic_notification_tubelab.png index 347f385cf498d520d1da9fbc6194f34af7b49eb8..86334302b72cc55e03682795fc9746d0b24cea97 100644 GIT binary patch delta 916 zcmV;F18e-|1gQs*BYy*MNkl>yfIp^Gc z&bjKY`kwCEYp-vgz1LcM?Hh}gZr9swOdZP?DIfL_a-ya!GI^+7v69cTl7S;2_dX6c}uuW`9m1i7m~)&bqh z*-&Ma&QG05=No|!4ik<51HciWnhx}MjjeH{Q%z%f$c8E}fyF|k~82KHns0+kZTD*sF~JY}2{G17^NmehuDdjAet27O*`LIIWzMx1PT=2DAV_8Rz36 z<(M@yhrUlul;t#23q1tN zoiZIKol#zB$nG?$xpq|74YSl+&$Kj~Vun_y)!`+DlR?cBlfXR}Hu{ZkQ5akW+;%AX zOo>?a%bpIbk2c?4!_Tail%!H&B^a@fS5PlCSAf$Z(jBL+V5mt_CNr7-IGur%Eg>1ki%&^{mfwey&g+7Ey$xaj0000N22C%_p1K6P1plm=k zC>ziX+6{84f}9YJGN64A9(}OT31GoMq8tIjmrqXweW293c!ym zfPG}PJ#Gd3sp;gIg^1atHri`Gnb)qlz@Iz-Oh%Q_t5IRJ0e=iDfWE03(vtf~Cq^#&ZUH6TPo-WAXViBZ1Nq6OE5CcEVNxakC=~?0+YA%)c)KHWgs=#TXCG zn!z18q^bx4OMjtO61;`KhuuBomC3*j1yVxq7~VqV>pq7>0y@>DpzLtF5yEte*i1NT z|1y$<+cTh2{3(iAo;D!c_h8J!rhuEgR-=L}QqpJhUM4-z^pu;936oaic1Nb(1u;myn zc8sINj%2jxG3M(ThPyq>IMX%$CK#`;j_I9!J0Y^8QXRZuUuUte>$b;>Y4>{}xLf}J83rj^rB>=x|0^E{K8VGjVRqApDE8*Fy c_{bZ`H&LQBEX13?S^xk507*qoM6N<$f@n?+xc~qF diff --git a/app/src/main/res/drawable-xxhdpi/ic_notification_tubelab.png b/app/src/main/res/drawable-xxhdpi/ic_notification_tubelab.png index f928b4f3122f927e9a64da3ba1aabaaacb5759c6..e9879d9d06d61686b2b35620bfbade1b3d71605e 100644 GIT binary patch delta 1291 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 + + diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index b839da2..1205045 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -85,7 +85,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/title_instance_login" - android:inputType="textWebEditText" + android:inputType="textWebEmailAddress" android:singleLine="true" /> diff --git a/app/src/main/res/layout/drawer_account_owner.xml b/app/src/main/res/layout/drawer_account_owner.xml new file mode 100644 index 0000000..4f21717 --- /dev/null +++ b/app/src/main/res/layout/drawer_account_owner.xml @@ -0,0 +1,45 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/main_profile.xml b/app/src/main/res/menu/main_profile.xml new file mode 100644 index 0000000..0570d4a --- /dev/null +++ b/app/src/main/res/menu/main_profile.xml @@ -0,0 +1,9 @@ + + + +