AndroidTV: Add export account
Adds the ability to export and generate a pin for active account.
Change-Id: I77a9de63ae48de7988d78a836c0b31e1b1a17c91
diff --git a/ring-android/app/src/main/java/cx/ring/dependencyinjection/RingInjectionComponent.java b/ring-android/app/src/main/java/cx/ring/dependencyinjection/RingInjectionComponent.java
index 49f7e82..687c4fa 100755
--- a/ring-android/app/src/main/java/cx/ring/dependencyinjection/RingInjectionComponent.java
+++ b/ring-android/app/src/main/java/cx/ring/dependencyinjection/RingInjectionComponent.java
@@ -62,6 +62,7 @@
import cx.ring.services.SharedPreferencesServiceImpl;
import cx.ring.settings.SettingsFragment;
import cx.ring.share.ShareFragment;
+import cx.ring.tv.account.TVAccountExport;
import cx.ring.tv.account.TVAccountWizard;
import cx.ring.tv.account.TVHomeAccountCreationFragment;
import cx.ring.tv.account.TVProfileCreationFragment;
@@ -180,6 +181,8 @@
void inject(TVRingLinkAccountFragment fragment);
+ void inject(TVAccountExport fragment);
+
void inject(TVLaunchActivity activity);
}
diff --git a/ring-android/app/src/main/java/cx/ring/tv/about/AboutDetailsFragment.java b/ring-android/app/src/main/java/cx/ring/tv/about/AboutDetailsFragment.java
index ff7cf09..9db9355 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/about/AboutDetailsFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/about/AboutDetailsFragment.java
@@ -17,8 +17,8 @@
import cx.ring.R;
import cx.ring.tv.cards.Card;
-import cx.ring.tv.cards.about.AboutCard;
-import cx.ring.tv.cards.about.AboutCardHelper;
+import cx.ring.tv.cards.iconcards.IconCard;
+import cx.ring.tv.cards.iconcards.IconCardHelper;
import cx.ring.utils.Log;
public class AboutDetailsFragment extends DetailsFragment {
@@ -42,7 +42,7 @@
cardType = Card.Type.values()[ordinal];
}
- AboutCard card = AboutCardHelper.getAboutCardByType(getActivity(), cardType);
+ IconCard card = IconCardHelper.getAboutCardByType(getActivity(), cardType);
ClassPresenterSelector selector = new ClassPresenterSelector();
diff --git a/ring-android/app/src/main/java/cx/ring/tv/about/AboutDetailsPresenter.java b/ring-android/app/src/main/java/cx/ring/tv/about/AboutDetailsPresenter.java
index b1ac86e..629165c 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/about/AboutDetailsPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/about/AboutDetailsPresenter.java
@@ -10,7 +10,7 @@
import butterknife.BindView;
import butterknife.ButterKnife;
import cx.ring.R;
-import cx.ring.tv.cards.about.AboutCard;
+import cx.ring.tv.cards.iconcards.IconCard;
public class AboutDetailsPresenter
extends Presenter {
@@ -33,7 +33,7 @@
@Override
public void onBindViewHolder(ViewHolder viewHolder, Object itemData) {
- AboutCard card = (AboutCard) itemData;
+ IconCard card = (IconCard) itemData;
mPrimaryText.setText(card.getTitle());
mExtraText.setText(card.getDescription());
diff --git a/ring-android/app/src/main/java/cx/ring/tv/account/TVAccountExport.java b/ring-android/app/src/main/java/cx/ring/tv/account/TVAccountExport.java
new file mode 100644
index 0000000..f4c2be3
--- /dev/null
+++ b/ring-android/app/src/main/java/cx/ring/tv/account/TVAccountExport.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright (C) 2017 Savoir-faire Linux Inc.
+ *
+ * Author: Loïc Siret <loic.siret@savoirfairelinux.com>
+ *
+ * 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package cx.ring.tv.account;
+
+import android.app.AlertDialog;
+import android.app.ProgressDialog;
+import android.content.DialogInterface;
+import android.graphics.Typeface;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v17.leanback.widget.GuidanceStylist;
+import android.support.v17.leanback.widget.GuidedAction;
+import android.text.Layout;
+import android.text.Spannable;
+import android.text.SpannableString;
+import android.text.style.AlignmentSpan;
+import android.text.style.RelativeSizeSpan;
+import android.text.style.StyleSpan;
+import android.view.View;
+
+import java.util.List;
+import java.util.Map;
+
+import cx.ring.R;
+import cx.ring.account.RingAccountSummaryPresenter;
+import cx.ring.account.RingAccountSummaryView;
+import cx.ring.application.RingApplication;
+import cx.ring.model.Account;
+
+public class TVAccountExport
+ extends RingGuidedStepFragment<RingAccountSummaryPresenter>
+ implements RingAccountSummaryView {
+
+ private static final long PASSWORD = 1L;
+ private ProgressDialog mWaitDialog;
+ private String mIdAccount;
+
+ public static TVAccountExport createInstance(String idAccount){
+ TVAccountExport fragment = new TVAccountExport();
+ fragment.mIdAccount = idAccount;
+ return fragment;
+ }
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ ((RingApplication) getActivity().getApplication()).getRingInjectionComponent().inject(this);
+
+ super.onViewCreated(view, savedInstanceState);
+ presenter.setAccountId(mIdAccount);
+ }
+
+ @Override
+ @NonNull
+ public GuidanceStylist.Guidance onCreateGuidance(Bundle savedInstanceState) {
+ String title = getString(R.string.account_export_title);
+ String breadcrumb = "";
+ String description = getString(R.string.account_link_export_info_light);
+ Drawable icon = getActivity().getResources().getDrawable(R.drawable.ic_contact_picture);
+ return new GuidanceStylist.Guidance(title, description, breadcrumb, icon);
+ }
+
+ @Override
+ public void onCreateActions(@NonNull List<GuidedAction> actions, Bundle savedInstanceState) {
+ addPasswordAction(actions, PASSWORD, getString(R.string.account_enter_password), "", "");
+ }
+
+ @Override
+ public long onGuidedActionEditedAndProceed(GuidedAction action) {
+ presenter.startAccountExport(action.getDescription().toString());
+ return GuidedAction.ACTION_ID_NEXT;
+ }
+
+ @Override
+ public int onProvideTheme() {
+ return R.style.Theme_Ring_Leanback_GuidedStep_First;
+ }
+
+ @Override
+ public void showExportingProgressDialog() {
+ mWaitDialog = ProgressDialog.show(getActivity(),
+ getString(R.string.export_account_wait_title),
+ getString(R.string.export_account_wait_message));
+ }
+
+ @Override
+ public void showRevokingProgressDialog() {
+
+ }
+
+ @Override
+ public void accountChanged(Account account) {
+
+ }
+
+ @Override
+ public void showNetworkError() {
+ RingApplication.uiHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mWaitDialog.dismiss();
+ AlertDialog.Builder errorDialog = new AlertDialog.Builder(getActivity());
+ errorDialog.setTitle(R.string.account_export_end_network_title)
+ .setMessage(R.string.account_export_end_network_message);
+ errorDialog.setPositiveButton(android.R.string.ok, null);
+ errorDialog.show();
+ }
+ });
+ }
+
+ @Override
+ public void showPasswordError() {
+ RingApplication.uiHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mWaitDialog.dismiss();
+ AlertDialog.Builder errorDialog = new AlertDialog.Builder(getActivity());
+ errorDialog.setTitle(R.string.account_export_end_error_title)
+ .setMessage(R.string.account_export_end_decryption_message);
+ errorDialog.setPositiveButton(android.R.string.ok, null);
+ errorDialog.show();
+ }
+ });
+ }
+
+ @Override
+ public void showGenericError() {
+ RingApplication.uiHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mWaitDialog.dismiss();
+ AlertDialog.Builder errorDialog = new AlertDialog.Builder(getActivity());
+ errorDialog.setTitle(R.string.account_export_end_error_title)
+ .setMessage(R.string.account_export_end_error_message);
+ errorDialog.setPositiveButton(android.R.string.ok, null);
+ errorDialog.show();
+ }
+ });
+ }
+
+ @Override
+ public void showPIN(final String pin) {
+ RingApplication.uiHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mWaitDialog.dismiss();
+ String pined = getString(R.string.account_end_export_infos).replace("%%", pin);
+ final SpannableString styledResultText = new SpannableString(pined);
+ int pos = pined.lastIndexOf(pin);
+ styledResultText.setSpan(new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER), pos, (pos + pin.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+ styledResultText.setSpan(new StyleSpan(Typeface.BOLD), pos, (pos + pin.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+ styledResultText.setSpan(new RelativeSizeSpan(2.8f), pos, (pos + pin.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+ AlertDialog.Builder successDialog = new AlertDialog.Builder(getActivity());
+ successDialog.setMessage(styledResultText);
+ successDialog.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ getFragmentManager().popBackStack();
+ }
+ });
+ successDialog.show();
+ }
+ });
+ }
+
+ @Override
+ public void updateDeviceList(Map<String, String> devices, String currentDeviceId) {
+
+ }
+
+ @Override
+ public void deviceRevocationEnded(String device, int status) {
+
+ }
+}
diff --git a/ring-android/app/src/main/java/cx/ring/tv/cards/Card.java b/ring-android/app/src/main/java/cx/ring/tv/cards/Card.java
index 369e196..8651df7 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/cards/Card.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/cards/Card.java
@@ -118,11 +118,12 @@
}
public enum Type {
- VERSION,
+ ABOUT_VERSION,
DEFAULT,
SEARCH_RESULT,
- CONTRIBUTOR,
- LICENCES,
+ ABOUT_CONTRIBUTOR,
+ ACCOUNT_ADD_DEVICE,
+ ABOUT_LICENCES,
CONTACT,
CONTACT_WITH_USERNAME,
}
diff --git a/ring-android/app/src/main/java/cx/ring/tv/cards/CardPresenterSelector.java b/ring-android/app/src/main/java/cx/ring/tv/cards/CardPresenterSelector.java
index 4ffafb6..b085958 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/cards/CardPresenterSelector.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/cards/CardPresenterSelector.java
@@ -19,10 +19,11 @@
import android.support.v17.leanback.widget.Presenter;
import android.support.v17.leanback.widget.PresenterSelector;
+import java.security.InvalidParameterException;
import java.util.HashMap;
import cx.ring.R;
-import cx.ring.tv.cards.about.AboutCardPresenter;
+import cx.ring.tv.cards.iconcards.IconCardPresenter;
import cx.ring.tv.cards.contacts.ContactCardPresenter;
/**
@@ -46,10 +47,11 @@
Presenter presenter = presenters.get(card.getType());
if (presenter == null) {
switch (card.getType()) {
- case VERSION:
- case CONTRIBUTOR:
- case LICENCES:
- presenter = new AboutCardPresenter(mContext);
+ case ABOUT_VERSION:
+ case ABOUT_CONTRIBUTOR:
+ case ABOUT_LICENCES:
+ case ACCOUNT_ADD_DEVICE:
+ presenter = new IconCardPresenter(mContext);
break;
case SEARCH_RESULT:
presenter = new ContactCardPresenter(mContext,R.style.SearchCardTheme);
@@ -61,8 +63,7 @@
presenter = new ContactCardPresenter(mContext,R.style.ContactCompleteCardTheme);
break;
default:
- presenter = new ContactCardPresenter(mContext, R.style.DefaultCardTheme);
- break;
+ throw new InvalidParameterException("Uncatched card type");
}
}
presenters.put(card.getType(), presenter);
diff --git a/ring-android/app/src/main/java/cx/ring/tv/cards/about/AboutCard.java b/ring-android/app/src/main/java/cx/ring/tv/cards/iconcards/IconCard.java
similarity index 85%
rename from ring-android/app/src/main/java/cx/ring/tv/cards/about/AboutCard.java
rename to ring-android/app/src/main/java/cx/ring/tv/cards/iconcards/IconCard.java
index dc39cbb..1aaa3ce 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/cards/about/AboutCard.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/cards/iconcards/IconCard.java
@@ -17,15 +17,15 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-package cx.ring.tv.cards.about;
+package cx.ring.tv.cards.iconcards;
import android.support.annotation.DrawableRes;
import cx.ring.tv.cards.Card;
-public class AboutCard extends Card {
+public class IconCard extends Card {
- public AboutCard(Type pType, String name, CharSequence description, @DrawableRes int imageId) {
+ public IconCard(Type pType, String name, CharSequence description, @DrawableRes int imageId) {
setType(pType);
setTitle(name);
setDescription(description);
diff --git a/ring-android/app/src/main/java/cx/ring/tv/cards/about/AboutCardHelper.java b/ring-android/app/src/main/java/cx/ring/tv/cards/iconcards/IconCardHelper.java
similarity index 65%
rename from ring-android/app/src/main/java/cx/ring/tv/cards/about/AboutCardHelper.java
rename to ring-android/app/src/main/java/cx/ring/tv/cards/iconcards/IconCardHelper.java
index fd8c23b..1494023 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/cards/about/AboutCardHelper.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/cards/iconcards/IconCardHelper.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-package cx.ring.tv.cards.about;
+package cx.ring.tv.cards.iconcards;
import android.content.Context;
import android.content.res.Resources;
@@ -30,35 +30,41 @@
import cx.ring.tv.cards.Card;
-public final class AboutCardHelper {
+public final class IconCardHelper {
- private AboutCardHelper() {
+ private IconCardHelper() {
/* Helper so no constructor */
}
- public static AboutCard getAboutCardByType(Context pContext, Card.Type type) {
+ public static IconCard getAboutCardByType(Context pContext, Card.Type type) {
switch (type) {
- case CONTRIBUTOR:
+ case ABOUT_CONTRIBUTOR:
return getContributorCard(pContext);
- case LICENCES:
+ case ABOUT_LICENCES:
return getLicencesCard(pContext);
- case VERSION:
+ case ABOUT_VERSION:
return getVersionCard(pContext);
+ case ACCOUNT_ADD_DEVICE:
+ return getAccountAddDevice(pContext);
default:
return null;
}
}
- public static AboutCard getVersionCard(Context pContext) {
- return new AboutCard(Card.Type.VERSION, pContext.getString(R.string.version_section) + " 1.0" + " " + BuildConfig.VERSION_NAME, "", R.drawable.ic_ring_logo_white);
+ public static IconCard getVersionCard(Context pContext) {
+ return new IconCard(Card.Type.ABOUT_VERSION, pContext.getString(R.string.version_section) + " 1.0" + " " + BuildConfig.VERSION_NAME, "", R.drawable.ic_ring_logo_white);
}
- public static AboutCard getLicencesCard(Context pContext) {
- return new AboutCard(Card.Type.LICENCES, pContext.getString(R.string.section_license), formatLicence(pContext), R.drawable.ic_description);
+ public static IconCard getLicencesCard(Context pContext) {
+ return new IconCard(Card.Type.ABOUT_LICENCES, pContext.getString(R.string.section_license), formatLicence(pContext), R.drawable.ic_description);
}
- public static AboutCard getContributorCard(Context pContext) {
- return new AboutCard(Card.Type.CONTRIBUTOR, pContext.getString(R.string.credits), formatContributors(pContext), R.drawable.ic_face);
+ public static IconCard getContributorCard(Context pContext) {
+ return new IconCard(Card.Type.ABOUT_CONTRIBUTOR, pContext.getString(R.string.credits), formatContributors(pContext), R.drawable.ic_face);
+ }
+
+ public static IconCard getAccountAddDevice(Context pContext) {
+ return new IconCard(Card.Type.ACCOUNT_ADD_DEVICE, pContext.getString(R.string.account_link_button), "",R.drawable.ic_add_white);
}
private static CharSequence formatLicence(Context pContext) {
diff --git a/ring-android/app/src/main/java/cx/ring/tv/cards/about/AboutCardPresenter.java b/ring-android/app/src/main/java/cx/ring/tv/cards/iconcards/IconCardPresenter.java
similarity index 93%
rename from ring-android/app/src/main/java/cx/ring/tv/cards/about/AboutCardPresenter.java
rename to ring-android/app/src/main/java/cx/ring/tv/cards/iconcards/IconCardPresenter.java
index dc5ce51..d4bf362 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/cards/about/AboutCardPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/cards/iconcards/IconCardPresenter.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-package cx.ring.tv.cards.about;
+package cx.ring.tv.cards.iconcards;
import android.animation.ObjectAnimator;
import android.content.Context;
@@ -32,11 +32,11 @@
import cx.ring.tv.cards.AbstractCardPresenter;
import cx.ring.tv.cards.Card;
-public class AboutCardPresenter extends AbstractCardPresenter<ImageCardView> {
+public class IconCardPresenter extends AbstractCardPresenter<ImageCardView> {
private static final int ANIMATION_DURATION = 200;
- public AboutCardPresenter(Context context) {
+ public IconCardPresenter(Context context) {
super(new ContextThemeWrapper(context, R.style.IconCardTheme));
}
diff --git a/ring-android/app/src/main/java/cx/ring/tv/main/HomeActivity.java b/ring-android/app/src/main/java/cx/ring/tv/main/HomeActivity.java
index 277567b..7468285 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/main/HomeActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/main/HomeActivity.java
@@ -25,6 +25,7 @@
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
+import android.support.v17.leanback.app.GuidedStepFragment;
import javax.inject.Inject;
@@ -91,6 +92,10 @@
@Override
public void onBackPressed() {
- finish();
+ if (GuidedStepFragment.getCurrentGuidedStepFragment(getFragmentManager()) != null) {
+ getFragmentManager().popBackStack();
+ } else {
+ finish();
+ }
}
}
\ No newline at end of file
diff --git a/ring-android/app/src/main/java/cx/ring/tv/main/MainFragment.java b/ring-android/app/src/main/java/cx/ring/tv/main/MainFragment.java
index b6f448a..41e1efd 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/main/MainFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/main/MainFragment.java
@@ -17,6 +17,7 @@
import android.content.Intent;
import android.os.Bundle;
import android.support.v17.leanback.app.BackgroundManager;
+import android.support.v17.leanback.app.GuidedStepFragment;
import android.support.v17.leanback.widget.ArrayObjectAdapter;
import android.support.v17.leanback.widget.HeaderItem;
import android.support.v17.leanback.widget.OnItemViewClickedListener;
@@ -24,6 +25,7 @@
import android.support.v17.leanback.widget.PresenterSelector;
import android.support.v17.leanback.widget.Row;
import android.support.v17.leanback.widget.RowPresenter;
+import android.support.v4.app.Fragment;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
@@ -36,15 +38,16 @@
import cx.ring.application.RingApplication;
import cx.ring.model.CallContact;
import cx.ring.tv.about.AboutActivity;
+import cx.ring.tv.account.TVAccountExport;
import cx.ring.tv.call.TVCallActivity;
import cx.ring.tv.cards.Card;
import cx.ring.tv.cards.CardListRow;
import cx.ring.tv.cards.CardPresenterSelector;
import cx.ring.tv.cards.CardRow;
import cx.ring.tv.cards.ShadowRowPresenterSelector;
-import cx.ring.tv.cards.about.AboutCard;
-import cx.ring.tv.cards.about.AboutCardHelper;
import cx.ring.tv.cards.contacts.ContactCard;
+import cx.ring.tv.cards.iconcards.IconCard;
+import cx.ring.tv.cards.iconcards.IconCardHelper;
import cx.ring.tv.search.SearchActivity;
public class MainFragment extends BaseBrowseFragment<MainPresenter> implements MainView {
@@ -96,7 +99,7 @@
/* Contact Presenter */
List<Card> cards = new ArrayList<>();
- CardRow contacttRow = new CardRow(
+ CardRow contactRow = new CardRow(
CardRow.TYPE_DEFAULT,
true,
getString(R.string.tv_contact_row_header),
@@ -104,10 +107,11 @@
HeaderItem cardPresenterHeader = new HeaderItem(HEADER_CONTACTS, getString(R.string.tv_contact_row_header));
cardRowAdapter = new ArrayObjectAdapter(new CardPresenterSelector(getActivity()));
- CardListRow contactListRow = new CardListRow(cardPresenterHeader, cardRowAdapter, contacttRow);
+ CardListRow contactListRow = new CardListRow(cardPresenterHeader, cardRowAdapter, contactRow);
/* CardPresenter */
mRowsAdapter.add(contactListRow);
+ mRowsAdapter.add(createMyAccountRow());
mRowsAdapter.add(createAboutCardRow());
setAdapter(mRowsAdapter);
@@ -125,17 +129,11 @@
setOnItemViewClickedListener(new ItemViewClickedListener());
}
-
- private Row createAboutCardRow() {
- List<Card> cards = new ArrayList<>();
- cards.add(AboutCardHelper.getVersionCard(getActivity()));
- cards.add(AboutCardHelper.getLicencesCard(getActivity()));
- cards.add(AboutCardHelper.getContributorCard(getActivity()));
-
- CardRow aboutRow = new CardRow(
+ private Row createRow(String titleSection, List<Card> cards, boolean shadow) {
+ CardRow row = new CardRow(
CardRow.TYPE_DEFAULT,
- false,
- getString(R.string.menu_item_about),
+ shadow,
+ titleSection,
cards);
PresenterSelector presenterSelector = new CardPresenterSelector(getActivity());
@@ -144,9 +142,25 @@
listRowAdapter.add(card);
}
- return new CardListRow(new HeaderItem(HEADER_MISC, getString(R.string.menu_item_about)), listRowAdapter, aboutRow);
+ return new CardListRow(new HeaderItem(HEADER_MISC, titleSection), listRowAdapter, row);
+
}
+ private Row createMyAccountRow() {
+ List<Card> cards = new ArrayList<>();
+ cards.add(IconCardHelper.getAccountAddDevice(getActivity()));
+
+ return createRow(getString(R.string.ring_account), cards, false);
+ }
+
+ private Row createAboutCardRow() {
+ List<Card> cards = new ArrayList<>();
+ cards.add(IconCardHelper.getVersionCard(getActivity()));
+ cards.add(IconCardHelper.getLicencesCard(getActivity()));
+ cards.add(IconCardHelper.getContributorCard(getActivity()));
+
+ return createRow(getString(R.string.menu_item_about), cards, false);
+ }
@Override
public void showLoading(final boolean show) {
@@ -199,6 +213,12 @@
});
}
+ @Override
+ public void showExportDialog(String pAccountID) {
+ GuidedStepFragment wizard = TVAccountExport.createInstance(pAccountID);
+ GuidedStepFragment.add(getFragmentManager(), wizard,R.id.main_browse_fragment);
+ }
+
private final class ItemViewClickedListener implements OnItemViewClickedListener {
@Override
public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
@@ -206,16 +226,19 @@
if (item instanceof ContactCard) {
presenter.contactClicked(((ContactCard) item).getCallContact());
- } else if (item instanceof AboutCard) {
- AboutCard card = (AboutCard) item;
+ } else if (item instanceof IconCard) {
+ IconCard card = (IconCard) item;
switch (card.getType()) {
- case CONTRIBUTOR:
- case LICENCES:
+ case ABOUT_CONTRIBUTOR:
+ case ABOUT_LICENCES:
Intent intent = new Intent(getActivity(),
AboutActivity.class);
intent.putExtra("abouttype", card.getType().ordinal());
startActivity(intent);
break;
+ case ACCOUNT_ADD_DEVICE:
+ presenter.onExportClicked();
+ break;
default:
break;
}
diff --git a/ring-android/app/src/main/java/cx/ring/tv/main/MainPresenter.java b/ring-android/app/src/main/java/cx/ring/tv/main/MainPresenter.java
index 5cc1144..3879b7d 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/main/MainPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/main/MainPresenter.java
@@ -133,4 +133,8 @@
}
getView().displayAccountInfos(displayableAddress);
}
+
+ public void onExportClicked() {
+ getView().showExportDialog(mAccountService.getCurrentAccount().getAccountID());
+ }
}
\ No newline at end of file
diff --git a/ring-android/app/src/main/java/cx/ring/tv/main/MainView.java b/ring-android/app/src/main/java/cx/ring/tv/main/MainView.java
index 9b49062..2125c4a 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/main/MainView.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/main/MainView.java
@@ -32,4 +32,6 @@
void callContact(String accountID, String ringID);
void displayAccountInfos(String address);
+
+ void showExportDialog(String pAccountID);
}
diff --git a/ring-android/app/src/main/res/values/strings_account.xml b/ring-android/app/src/main/res/values/strings_account.xml
index a632d57..ea98331 100644
--- a/ring-android/app/src/main/res/values/strings_account.xml
+++ b/ring-android/app/src/main/res/values/strings_account.xml
@@ -188,6 +188,8 @@
<string name="account_start_export_button">Generate Pin</string>
<string name="account_end_export_button">close</string>
<string name="account_end_export_infos">Your Pin is:\n\n%%\n\nTo complete the process, you need to open Ring on the new device. Create a new account with \"Link this device to an account\". Your pin is valid for 10 minutes.</string>
+ <string name="account_link_export_info_light">To use this account on other devices, you must first expose it on Ring. This will generate a PIN code that you must enter on the new device to set up the account. The PIN is valid for 10 minutes.</string>
+ <string name="account_export_title">Add devices</string>
<!-- Name registration -->
<string name="error_username_empty">Enter a username</string>