() {
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
- return ViewHolder(LayoutInflater.from(parent.context), parent)
- }
-
- override fun onBindViewHolder(holder: ViewHolder, position: Int) {
- val presenter = items[position]
- holder.bind(presenter)
- }
-
- override fun getItemCount() = items.size
- }
-
- companion object {
- fun newInstance(): ShareDialogFragment {
- return ShareDialogFragment()
- }
- }
-}
diff --git a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/model/InviteContent.java b/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/model/InviteContent.java
deleted file mode 100644
index cb9e70a8f..000000000
--- a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/model/InviteContent.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.google.firebase.dynamicinvites.model;
-
-import android.net.Uri;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-// [START ddl_invite_content]
-
-/**
- * The content of an invitation, with optional fields to accommodate all presenters.
- * This type could be modified to also include an image, for sending invites over email.
- */
-public class InviteContent {
-
- /**
- * The subject of the message. Not used for invites without subjects, like SMS.
- **/
- @Nullable
- public final String subject;
-
- /**
- * The body of the message. Indispensable content should go here.
- **/
- @Nullable
- public final String body;
-
- /**
- * The URL containing the link to invite. In link-copy cases, only this field will be used.
- **/
- @NonNull
- public final Uri link;
-
- public InviteContent(@Nullable String subject, @Nullable String body, @NonNull Uri link) {
- // [START_EXCLUDE]
- this.subject = subject;
- this.body = body;
- this.link = link;
- // [END_EXCLUDE]
- }
-
-}
-// [END ddl_invite_content]
diff --git a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/presenter/CopyPresenter.java b/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/presenter/CopyPresenter.java
deleted file mode 100644
index eeb410c0c..000000000
--- a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/presenter/CopyPresenter.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.google.firebase.dynamicinvites.presenter;
-
-import android.content.Context;
-import android.widget.Toast;
-
-import com.google.firebase.dynamicinvites.R;
-import com.google.firebase.dynamicinvites.kotlin.model.InviteContent;
-
-public class CopyPresenter extends InvitePresenter {
-
- public CopyPresenter(boolean isAvailable, InviteContent content) {
- super("Copy Link", R.drawable.ic_content_copy, isAvailable, content);
- }
-
- @Override
- public void sendInvite(Context context) {
- super.sendInvite(context);
- Toast.makeText(context, "TODO: Implement link copying", Toast.LENGTH_SHORT).show();
- }
-
-}
diff --git a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/presenter/EmailPresenter.java b/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/presenter/EmailPresenter.java
deleted file mode 100644
index b4d27ba03..000000000
--- a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/presenter/EmailPresenter.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.google.firebase.dynamicinvites.presenter;
-
-import android.content.Context;
-import android.widget.Toast;
-
-import com.google.firebase.dynamicinvites.R;
-import com.google.firebase.dynamicinvites.kotlin.model.InviteContent;
-
-public class EmailPresenter extends InvitePresenter {
-
- public EmailPresenter(boolean isAvailable, InviteContent content) {
- super("Email", R.drawable.ic_email, isAvailable, content);
- }
-
- @Override
- public void sendInvite(Context context) {
- super.sendInvite(context);
- Toast.makeText(context, "TODO: Implement email sending", Toast.LENGTH_SHORT).show();
- }
-}
diff --git a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/presenter/InvitePresenter.java b/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/presenter/InvitePresenter.java
deleted file mode 100644
index bfa06b638..000000000
--- a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/presenter/InvitePresenter.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.google.firebase.dynamicinvites.presenter;
-
-import android.content.Context;
-import androidx.annotation.DrawableRes;
-
-import com.google.firebase.dynamicinvites.kotlin.model.InviteContent;
-
-// [START ddl_invite_presenter]
-
-/**
- * Presents the invite using a specific method, such as email or social.
- */
-public class InvitePresenter {
-
- /**
- * The user-visible name of the invite method, like 'Email' or 'SMS'
- **/
- public final String name;
-
- /**
- * An icon representing the invite method.
- **/
- @DrawableRes
- public final int icon;
-
- /**
- * Whether or not the method is available on this device. For example, SMS is phone only.
- **/
- public final boolean isAvailable;
-
- /**
- * The Content of the invitation
- **/
- public final InviteContent content;
-
- public InvitePresenter(String name, @DrawableRes int icon, boolean isAvailable, InviteContent content) {
- // [START_EXCLUDE]
- this.name = name;
- this.icon = icon;
- this.isAvailable = isAvailable;
- this.content = content;
- // [END_EXCLUDE]
- }
-
- /**
- * Send the invitation using the specified method.
- */
- public void sendInvite(Context context) {
- // ...
- }
-
-}
-// [END ddl_invite_presenter]
diff --git a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/presenter/MessagePresenter.java b/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/presenter/MessagePresenter.java
deleted file mode 100644
index 7ea46e8ba..000000000
--- a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/presenter/MessagePresenter.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.google.firebase.dynamicinvites.presenter;
-
-import android.content.Context;
-import android.widget.Toast;
-
-import com.google.firebase.dynamicinvites.R;
-import com.google.firebase.dynamicinvites.kotlin.model.InviteContent;
-
-public class MessagePresenter extends InvitePresenter {
-
- public MessagePresenter(boolean isAvailable, InviteContent content) {
- super("Message", R.drawable.ic_sms, isAvailable, content);
- }
-
- @Override
- public void sendInvite(Context context) {
- super.sendInvite(context);
- Toast.makeText(context, "TODO: Implement SMS", Toast.LENGTH_SHORT).show();
- }
-
-}
diff --git a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/presenter/MorePresenter.java b/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/presenter/MorePresenter.java
deleted file mode 100644
index 0eb1a2016..000000000
--- a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/presenter/MorePresenter.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.google.firebase.dynamicinvites.presenter;
-
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-
-import com.google.firebase.dynamicinvites.R;
-import com.google.firebase.dynamicinvites.kotlin.model.InviteContent;
-import com.google.firebase.dynamicinvites.util.DynamicLinksUtil;
-
-public class MorePresenter extends InvitePresenter {
-
- public MorePresenter(boolean isAvailable, InviteContent content) {
- super("More", R.drawable.ic_more_horiz, isAvailable, content);
- }
-
- @Override
- public void sendInvite(Context context) {
- super.sendInvite(context);
- Uri link = DynamicLinksUtil.generateContentLink();
-
- Intent intent = new Intent(Intent.ACTION_SEND);
- intent.setType("text/plain");
- intent.putExtra(Intent.EXTRA_TEXT, link.toString());
-
- context.startActivity(Intent.createChooser(intent, "Share Link"));
- }
-}
diff --git a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/presenter/SocialPresenter.java b/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/presenter/SocialPresenter.java
deleted file mode 100644
index 3eea79ce3..000000000
--- a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/presenter/SocialPresenter.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.google.firebase.dynamicinvites.presenter;
-
-import android.content.Context;
-import android.widget.Toast;
-
-import com.google.firebase.dynamicinvites.R;
-import com.google.firebase.dynamicinvites.kotlin.model.InviteContent;
-
-public class SocialPresenter extends InvitePresenter {
-
- public SocialPresenter(boolean isAvailable, InviteContent content) {
- super("Social", R.drawable.ic_people, isAvailable, content);
- }
-
- @Override
- public void sendInvite(Context context) {
- super.sendInvite(context);
- Toast.makeText(context, "TODO: Implement social sending", Toast.LENGTH_SHORT).show();
- }
-
-}
diff --git a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/util/DynamicLinksUtil.java b/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/util/DynamicLinksUtil.java
deleted file mode 100644
index f45beea23..000000000
--- a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/util/DynamicLinksUtil.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.google.firebase.dynamicinvites.util;
-
-import android.net.Uri;
-
-import com.google.firebase.dynamicinvites.kotlin.model.InviteContent;
-import com.google.firebase.dynamiclinks.DynamicLink;
-import com.google.firebase.dynamiclinks.FirebaseDynamicLinks;
-
-public class DynamicLinksUtil {
-
- public static InviteContent generateInviteContent() {
- return new InviteContent(
- "Hey check out my great app!",
- "It's like the best app ever.",
- generateContentLink());
- }
-
- // [START ddl_generate_content_link]
- public static Uri generateContentLink() {
- Uri baseUrl = Uri.parse("https://your-custom-name.page.link");
- String domain = "https://your-app.page.link";
-
- DynamicLink link = FirebaseDynamicLinks.getInstance()
- .createDynamicLink()
- .setLink(baseUrl)
- .setDomainUriPrefix(domain)
- .setIosParameters(new DynamicLink.IosParameters.Builder("com.your.bundleid").build())
- .setAndroidParameters(new DynamicLink.AndroidParameters.Builder("com.your.packageName").build())
- .buildDynamicLink();
-
- return link.getUri();
- }
- // [END ddl_generate_content_link]
-
-}
diff --git a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/view/AdvancedActivity.java b/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/view/AdvancedActivity.java
deleted file mode 100644
index 23963ee00..000000000
--- a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/view/AdvancedActivity.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.google.firebase.dynamicinvites.view;
-
-import android.os.Bundle;
-import androidx.appcompat.app.AppCompatActivity;
-import android.view.View;
-
-import com.google.firebase.dynamicinvites.R;
-import com.google.firebase.dynamicinvites.presenter.InvitePresenter;
-
-public class AdvancedActivity extends AppCompatActivity implements ShareDialogFragment.Listener {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_advanced);
-
- findViewById(R.id.buttonShare).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- ShareDialogFragment.newInstance().show(getSupportFragmentManager(), "dialog");
- }
- });
- }
-
- @Override
- public void onItemClicked(InvitePresenter presenter) {
- presenter.sendInvite(this);
- }
-}
diff --git a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/view/MainActivity.java b/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/view/MainActivity.java
deleted file mode 100644
index 2ac8aef55..000000000
--- a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/view/MainActivity.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.google.firebase.dynamicinvites.view;
-
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import androidx.appcompat.app.AppCompatActivity;
-import android.view.View;
-
-import com.google.firebase.dynamicinvites.R;
-import com.google.firebase.dynamicinvites.util.DynamicLinksUtil;
-
-public class MainActivity extends AppCompatActivity {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
-
- findViewById(R.id.buttonShare).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- onShareClicked();
- }
- });
- }
-
- // [START ddl_on_share_clicked]
- private void onShareClicked() {
- Uri link = DynamicLinksUtil.generateContentLink();
-
- Intent intent = new Intent(Intent.ACTION_SEND);
- intent.setType("text/plain");
- intent.putExtra(Intent.EXTRA_TEXT, link.toString());
-
- startActivity(Intent.createChooser(intent, "Share Link"));
- }
- // [END ddl_on_share_clicked]
-}
diff --git a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/view/ShareDialogFragment.java b/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/view/ShareDialogFragment.java
deleted file mode 100644
index 1767ffe89..000000000
--- a/dl-invites/app/src/main/java/com/google/firebase/dynamicinvites/view/ShareDialogFragment.java
+++ /dev/null
@@ -1,152 +0,0 @@
-package com.google.firebase.dynamicinvites.view;
-
-import android.content.Context;
-import android.os.Bundle;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
-import androidx.fragment.app.Fragment;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.google.firebase.dynamicinvites.R;
-import com.google.firebase.dynamicinvites.kotlin.model.InviteContent;
-import com.google.firebase.dynamicinvites.presenter.CopyPresenter;
-import com.google.firebase.dynamicinvites.presenter.EmailPresenter;
-import com.google.firebase.dynamicinvites.presenter.InvitePresenter;
-import com.google.firebase.dynamicinvites.presenter.MessagePresenter;
-import com.google.firebase.dynamicinvites.presenter.MorePresenter;
-import com.google.firebase.dynamicinvites.presenter.SocialPresenter;
-import com.google.firebase.dynamicinvites.util.DynamicLinksUtil;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * A fragment that shows a list of items as a modal bottom sheet.
- *
- * You can show this modal bottom sheet from your activity like this:
- *
- *
- * ShareDialogFragment.newInstance().show(getSupportFragmentManager(), "dialog");
- *
- *
- * You activity (or fragment) needs to implement {@link ShareDialogFragment.Listener}.
- */
-public class ShareDialogFragment extends BottomSheetDialogFragment {
-
- private Listener mListener;
-
- public static ShareDialogFragment newInstance() {
- return new ShareDialogFragment();
- }
-
- @Nullable
- @Override
- public View onCreateView(LayoutInflater inflater,
- @Nullable ViewGroup container,
- @Nullable Bundle savedInstanceState) {
- return inflater.inflate(R.layout.fragment_item_list_dialog, container, false);
- }
-
- @Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
- InviteContent content = DynamicLinksUtil.generateInviteContent();
- List presenters = Arrays.asList(
- new EmailPresenter(true, content),
- new SocialPresenter(true, content),
- new MessagePresenter(true, content),
- new CopyPresenter(true, content),
- new MorePresenter(true, content)
- );
-
- RecyclerView recyclerView = (RecyclerView) view;
- recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
- recyclerView.setAdapter(new ItemAdapter(presenters));
- }
-
- @Override
- public void onAttach(Context context) {
- super.onAttach(context);
- final Fragment parent = getParentFragment();
- if (parent != null) {
- mListener = (Listener) parent;
- } else {
- mListener = (Listener) context;
- }
- }
-
- @Override
- public void onDetach() {
- mListener = null;
- super.onDetach();
- }
-
- public interface Listener {
- void onItemClicked(InvitePresenter presenter);
- }
-
- private class ViewHolder extends RecyclerView.ViewHolder {
-
- private final TextView text;
- private final ImageView icon;
-
- private InvitePresenter presenter;
-
- ViewHolder(LayoutInflater inflater, ViewGroup parent) {
- super(inflater.inflate(R.layout.item_share_method, parent, false));
-
- text = itemView.findViewById(R.id.itemName);
- icon = itemView.findViewById(R.id.itemIcon);
-
- itemView.setOnClickListener(
- new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mListener != null) {
- mListener.onItemClicked(presenter);
- dismiss();
- }
- }
- });
- }
-
- void bind(InvitePresenter presenter) {
- this.presenter = presenter;
-
- text.setText(presenter.name);
- icon.setImageResource(presenter.icon);
- }
- }
-
- private class ItemAdapter extends RecyclerView.Adapter {
-
- private List items;
-
- ItemAdapter(List items) {
- this.items = items;
- }
-
- @NonNull
- @Override
- public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- return new ViewHolder(LayoutInflater.from(parent.getContext()), parent);
- }
-
- @Override
- public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
- InvitePresenter presenter = items.get(position);
- holder.bind(presenter);
- }
-
- @Override
- public int getItemCount() {
- return items.size();
- }
- }
-}
diff --git a/dl-invites/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/dl-invites/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
deleted file mode 100644
index 1f6bb2906..000000000
--- a/dl-invites/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/dl-invites/app/src/main/res/drawable/ic_content_copy.xml b/dl-invites/app/src/main/res/drawable/ic_content_copy.xml
deleted file mode 100644
index 8a894a3bc..000000000
--- a/dl-invites/app/src/main/res/drawable/ic_content_copy.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/dl-invites/app/src/main/res/drawable/ic_email.xml b/dl-invites/app/src/main/res/drawable/ic_email.xml
deleted file mode 100644
index ce97ab859..000000000
--- a/dl-invites/app/src/main/res/drawable/ic_email.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/dl-invites/app/src/main/res/drawable/ic_launcher_background.xml b/dl-invites/app/src/main/res/drawable/ic_launcher_background.xml
deleted file mode 100644
index 0d025f9bf..000000000
--- a/dl-invites/app/src/main/res/drawable/ic_launcher_background.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/dl-invites/app/src/main/res/drawable/ic_more_horiz.xml b/dl-invites/app/src/main/res/drawable/ic_more_horiz.xml
deleted file mode 100644
index da83afdb1..000000000
--- a/dl-invites/app/src/main/res/drawable/ic_more_horiz.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/dl-invites/app/src/main/res/drawable/ic_people.xml b/dl-invites/app/src/main/res/drawable/ic_people.xml
deleted file mode 100644
index 4cfd86960..000000000
--- a/dl-invites/app/src/main/res/drawable/ic_people.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/dl-invites/app/src/main/res/drawable/ic_sms.xml b/dl-invites/app/src/main/res/drawable/ic_sms.xml
deleted file mode 100644
index 8b8ead2f6..000000000
--- a/dl-invites/app/src/main/res/drawable/ic_sms.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/dl-invites/app/src/main/res/drawable/pizza_monster.png b/dl-invites/app/src/main/res/drawable/pizza_monster.png
deleted file mode 100644
index c3940f0af..000000000
Binary files a/dl-invites/app/src/main/res/drawable/pizza_monster.png and /dev/null differ
diff --git a/dl-invites/app/src/main/res/layout/activity_advanced.xml b/dl-invites/app/src/main/res/layout/activity_advanced.xml
deleted file mode 100644
index dd8820836..000000000
--- a/dl-invites/app/src/main/res/layout/activity_advanced.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/dl-invites/app/src/main/res/layout/activity_main.xml b/dl-invites/app/src/main/res/layout/activity_main.xml
deleted file mode 100644
index e49fe9f51..000000000
--- a/dl-invites/app/src/main/res/layout/activity_main.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/dl-invites/app/src/main/res/layout/fragment_item_list_dialog.xml b/dl-invites/app/src/main/res/layout/fragment_item_list_dialog.xml
deleted file mode 100644
index e4d99b632..000000000
--- a/dl-invites/app/src/main/res/layout/fragment_item_list_dialog.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
diff --git a/dl-invites/app/src/main/res/layout/item_share_method.xml b/dl-invites/app/src/main/res/layout/item_share_method.xml
deleted file mode 100644
index b49540244..000000000
--- a/dl-invites/app/src/main/res/layout/item_share_method.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/dl-invites/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/dl-invites/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
deleted file mode 100644
index 6b78462d6..000000000
--- a/dl-invites/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/dl-invites/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/dl-invites/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
deleted file mode 100644
index 6b78462d6..000000000
--- a/dl-invites/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/dl-invites/app/src/main/res/mipmap-hdpi/ic_launcher.png b/dl-invites/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index 898f3ed59..000000000
Binary files a/dl-invites/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/dl-invites/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/dl-invites/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
deleted file mode 100644
index dffca3601..000000000
Binary files a/dl-invites/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ
diff --git a/dl-invites/app/src/main/res/mipmap-mdpi/ic_launcher.png b/dl-invites/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index 64ba76f75..000000000
Binary files a/dl-invites/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/dl-invites/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/dl-invites/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
deleted file mode 100644
index dae5e0823..000000000
Binary files a/dl-invites/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ
diff --git a/dl-invites/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/dl-invites/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index e5ed46597..000000000
Binary files a/dl-invites/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/dl-invites/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/dl-invites/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
deleted file mode 100644
index 14ed0af35..000000000
Binary files a/dl-invites/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/dl-invites/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/dl-invites/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index b0907cac3..000000000
Binary files a/dl-invites/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/dl-invites/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/dl-invites/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
deleted file mode 100644
index d8ae03154..000000000
Binary files a/dl-invites/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/dl-invites/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/dl-invites/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 2c18de9e6..000000000
Binary files a/dl-invites/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/dl-invites/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/dl-invites/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
deleted file mode 100644
index beed3cdd2..000000000
Binary files a/dl-invites/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/dl-invites/app/src/main/res/values/colors.xml b/dl-invites/app/src/main/res/values/colors.xml
deleted file mode 100644
index 58a386594..000000000
--- a/dl-invites/app/src/main/res/values/colors.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
- #263238
- #000a12
- #4f5b62
- #03a9f4
-
- #9E9E9E
-
diff --git a/dl-invites/app/src/main/res/values/dimens.xml b/dl-invites/app/src/main/res/values/dimens.xml
deleted file mode 100644
index 00560386a..000000000
--- a/dl-invites/app/src/main/res/values/dimens.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- 16dp
- 8dp
-
diff --git a/dl-invites/app/src/main/res/values/strings.xml b/dl-invites/app/src/main/res/values/strings.xml
deleted file mode 100644
index d415732a2..000000000
--- a/dl-invites/app/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
- Dynamic Invites
-
-
- AIzaSyCh-veDlf-cJsVgO0dm1FnQB_kZZEI9fR0
- 1:733471010301:android:6037b8829628a1f3
-
- Share Link
- https://your-custom-invite.link/111111
-
diff --git a/dl-invites/app/src/main/res/values/styles.xml b/dl-invites/app/src/main/res/values/styles.xml
deleted file mode 100644
index b0fea807a..000000000
--- a/dl-invites/app/src/main/res/values/styles.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/dl-invites/build.gradle.kts b/dl-invites/build.gradle.kts
deleted file mode 100644
index e0c301fa7..000000000
--- a/dl-invites/build.gradle.kts
+++ /dev/null
@@ -1,22 +0,0 @@
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
-
-plugins {
- id("com.android.application") version "8.12.0" apply false
- id("com.android.library") version "8.12.0" apply false
- id("org.jetbrains.kotlin.android") version "2.2.0" apply false
- id("com.google.gms.google-services") version "4.4.3" apply false
-}
-
-allprojects {
- repositories {
- mavenLocal()
- google()
- mavenCentral()
- }
-}
-
-tasks {
- register("clean", Delete::class) {
- delete(rootProject.buildDir)
- }
-}
diff --git a/dl-invites/gradle.properties b/dl-invites/gradle.properties
deleted file mode 100644
index ec5d04486..000000000
--- a/dl-invites/gradle.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Project-wide Gradle settings.
-# IDE (e.g. Android Studio) users:
-# Gradle settings configured through the IDE *will override*
-# any settings specified in this file.
-# For more details on how to configure your build environment visit
-# http://www.gradle.org/docs/current/userguide/build_environment.html
-# Specifies the JVM arguments used for the daemon process.
-# The setting is particularly useful for tweaking memory settings.
-org.gradle.jvmargs=-Xmx1536m
-android.useAndroidX=true
-# When configured, Gradle will run in incubating parallel mode.
-# This option should only be used with decoupled projects. More details, visit
-# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
-# org.gradle.parallel=true
-
-
diff --git a/dl-invites/gradle/wrapper/gradle-wrapper.jar b/dl-invites/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 5c2d1cf01..000000000
Binary files a/dl-invites/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/dl-invites/gradle/wrapper/gradle-wrapper.properties b/dl-invites/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 0b55a3bd9..000000000
--- a/dl-invites/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/dl-invites/gradlew b/dl-invites/gradlew
deleted file mode 100755
index 83f2acfdc..000000000
--- a/dl-invites/gradlew
+++ /dev/null
@@ -1,188 +0,0 @@
-#!/usr/bin/env sh
-
-#
-# Copyright 2015 the original author or authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##############################################################################
-##
-## Gradle start up script for UN*X
-##
-##############################################################################
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn () {
- echo "$*"
-}
-
-die () {
- echo
- echo "$*"
- echo
- exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
- NONSTOP* )
- nonstop=true
- ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD="java"
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
- JAVACMD=`cygpath --unix "$JAVACMD"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
- fi
- i=$((i+1))
- done
- case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
-fi
-
-# Escape application args
-save () {
- for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
- echo " "
-}
-APP_ARGS=$(save "$@")
-
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-
-# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
-if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
- cd "$(dirname "$0")"
-fi
-
-exec "$JAVACMD" "$@"
diff --git a/dl-invites/gradlew.bat b/dl-invites/gradlew.bat
deleted file mode 100644
index 24467a141..000000000
--- a/dl-invites/gradlew.bat
+++ /dev/null
@@ -1,100 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/dl-invites/screenshots/invite-screen-intent.png b/dl-invites/screenshots/invite-screen-intent.png
deleted file mode 100644
index 3ddb67491..000000000
Binary files a/dl-invites/screenshots/invite-screen-intent.png and /dev/null differ
diff --git a/dl-invites/screenshots/invite-screen.png b/dl-invites/screenshots/invite-screen.png
deleted file mode 100644
index 513826b25..000000000
Binary files a/dl-invites/screenshots/invite-screen.png and /dev/null differ
diff --git a/dl-invites/screenshots/refer-screen-intent.png b/dl-invites/screenshots/refer-screen-intent.png
deleted file mode 100644
index 9c44c1897..000000000
Binary files a/dl-invites/screenshots/refer-screen-intent.png and /dev/null differ
diff --git a/dl-invites/screenshots/refer-screen.png b/dl-invites/screenshots/refer-screen.png
deleted file mode 100644
index b2823d1f5..000000000
Binary files a/dl-invites/screenshots/refer-screen.png and /dev/null differ
diff --git a/dl-invites/settings.gradle.kts b/dl-invites/settings.gradle.kts
deleted file mode 100644
index 6950372e0..000000000
--- a/dl-invites/settings.gradle.kts
+++ /dev/null
@@ -1,9 +0,0 @@
-pluginManagement {
- repositories {
- google()
- mavenCentral()
- gradlePluginPortal()
- }
-}
-
-include(":app")
diff --git a/dynamic-links/.gitignore b/dynamic-links/.gitignore
deleted file mode 100644
index c6cbe562a..000000000
--- a/dynamic-links/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-*.iml
-.gradle
-/local.properties
-/.idea/workspace.xml
-/.idea/libraries
-.DS_Store
-/build
-/captures
diff --git a/dynamic-links/app/.gitignore b/dynamic-links/app/.gitignore
deleted file mode 100644
index 796b96d1c..000000000
--- a/dynamic-links/app/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/build
diff --git a/dynamic-links/app/build.gradle.kts b/dynamic-links/app/build.gradle.kts
deleted file mode 100644
index 78e5820a3..000000000
--- a/dynamic-links/app/build.gradle.kts
+++ /dev/null
@@ -1,52 +0,0 @@
-plugins {
- id("com.android.application")
- id("kotlin-android")
-}
-
-android {
- namespace = "com.google.firebase.quickstart.dynamiclinks"
- compileSdk = 36
-
- defaultConfig {
- applicationId = "com.google.firebase.quickstart.dynamiclinks"
- minSdk = 23
- targetSdk = 36
- versionCode = 1
- versionName = "1.0"
- testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
- multiDexEnabled = true
- }
- buildTypes {
- getByName("release") {
- isMinifyEnabled = false
- proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
- }
- }
- compileOptions {
- sourceCompatibility = JavaVersion.VERSION_17
- targetCompatibility = JavaVersion.VERSION_17
- }
- kotlinOptions {
- jvmTarget = "17"
- }
-}
-
-dependencies {
- implementation("androidx.legacy:legacy-support-v4:1.0.0")
- implementation("androidx.appcompat:appcompat:1.7.1")
-
- // Import the BoM for the Firebase platform
- implementation(platform("com.google.firebase:firebase-bom:34.0.0"))
-
- // When using the BoM, you don't specify versions in Firebase library dependencies
- implementation("com.google.firebase:firebase-auth")
- implementation("com.google.firebase:firebase-database")
- implementation("com.google.firebase:firebase-dynamic-links:22.1.0")
- implementation("com.google.firebase:firebase-invites:17.0.0")
-
- // For an optimal experience using Dynamic Links, add the Firebase SDK
- // for Google Analytics. This is recommended, but not required.
- implementation("com.google.firebase:firebase-analytics")
-
- implementation("androidx.constraintlayout:constraintlayout:2.2.1")
-}
diff --git a/dynamic-links/app/proguard-rules.pro b/dynamic-links/app/proguard-rules.pro
deleted file mode 100644
index e0535e42a..000000000
--- a/dynamic-links/app/proguard-rules.pro
+++ /dev/null
@@ -1,17 +0,0 @@
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in /usr/local/google/home/samstern/android-sdk-linux/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the proguardFiles
-# directive in build.gradle.kts.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
diff --git a/dynamic-links/app/src/main/AndroidManifest.xml b/dynamic-links/app/src/main/AndroidManifest.xml
deleted file mode 100644
index ac9fcdc04..000000000
--- a/dynamic-links/app/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/dynamic-links/app/src/main/java/com/google/firebase/quickstart/dynamiclinks/MainActivity.java b/dynamic-links/app/src/main/java/com/google/firebase/quickstart/dynamiclinks/MainActivity.java
deleted file mode 100644
index 84057832f..000000000
--- a/dynamic-links/app/src/main/java/com/google/firebase/quickstart/dynamiclinks/MainActivity.java
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * Copyright 2017 Google Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.firebase.quickstart.dynamiclinks;
-
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.util.Log;
-
-import androidx.annotation.NonNull;
-import androidx.appcompat.app.AppCompatActivity;
-
-import com.google.android.gms.tasks.OnCompleteListener;
-import com.google.android.gms.tasks.OnFailureListener;
-import com.google.android.gms.tasks.OnSuccessListener;
-import com.google.android.gms.tasks.Task;
-import com.google.firebase.appinvite.FirebaseAppInvite;
-import com.google.firebase.dynamiclinks.DynamicLink;
-import com.google.firebase.dynamiclinks.FirebaseDynamicLinks;
-import com.google.firebase.dynamiclinks.PendingDynamicLinkData;
-import com.google.firebase.dynamiclinks.ShortDynamicLink;
-
-public class MainActivity extends AppCompatActivity {
-
- private final String TAG = "fdl.MainActivity";
-
- // [START on_create]
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // [START_EXCLUDE]
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- // [END_EXCLUDE]
-
- // [START get_deep_link]
- FirebaseDynamicLinks.getInstance()
- .getDynamicLink(getIntent())
- .addOnSuccessListener(this, new OnSuccessListener() {
- @Override
- public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
- // Get deep link from result (may be null if no link is found)
- Uri deepLink = null;
- if (pendingDynamicLinkData != null) {
- deepLink = pendingDynamicLinkData.getLink();
- }
-
-
- // Handle the deep link. For example, open the linked
- // content, or apply promotional credit to the user's
- // account.
- // ...
-
- }
- })
- .addOnFailureListener(this, new OnFailureListener() {
- @Override
- public void onFailure(@NonNull Exception e) {
- Log.w(TAG, "getDynamicLink:onFailure", e);
- }
- });
- // [END get_deep_link]
- }
- // [END on_create]
-
- public void createDynamicLink_Basic() {
- // [START create_link_basic]
- DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
- .setLink(Uri.parse("https://www.example.com/"))
- .setDomainUriPrefix("https://example.page.link")
- // Open links with this app on Android
- .setAndroidParameters(new DynamicLink.AndroidParameters.Builder().build())
- // Open links with com.example.ios on iOS
- .setIosParameters(new DynamicLink.IosParameters.Builder("com.example.ios").build())
- .buildDynamicLink();
-
- Uri dynamicLinkUri = dynamicLink.getUri();
- // [END create_link_basic]
- }
-
- public void createDynamicLink_Advanced() {
- // [START create_link_advanced]
- DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
- .setLink(Uri.parse("https://www.example.com/"))
- .setDomainUriPrefix("https://example.page.link")
- .setAndroidParameters(
- new DynamicLink.AndroidParameters.Builder("com.example.android")
- .setMinimumVersion(125)
- .build())
- .setIosParameters(
- new DynamicLink.IosParameters.Builder("com.example.ios")
- .setAppStoreId("123456789")
- .setMinimumVersion("1.0.1")
- .build())
- .setGoogleAnalyticsParameters(
- new DynamicLink.GoogleAnalyticsParameters.Builder()
- .setSource("orkut")
- .setMedium("social")
- .setCampaign("example-promo")
- .build())
- .setItunesConnectAnalyticsParameters(
- new DynamicLink.ItunesConnectAnalyticsParameters.Builder()
- .setProviderToken("123456")
- .setCampaignToken("example-promo")
- .build())
- .setSocialMetaTagParameters(
- new DynamicLink.SocialMetaTagParameters.Builder()
- .setTitle("Example of a Dynamic Link")
- .setDescription("This link works whether the app is installed or not!")
- .build())
- .buildDynamicLink(); // Or buildShortDynamicLink()
- // [END create_link_advanced]
- }
-
- public void createShortLink() {
- // [START create_short_link]
- Task shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
- .setLink(Uri.parse("https://www.example.com/"))
- .setDomainUriPrefix("https://example.page.link")
- // Set parameters
- // ...
- .buildShortDynamicLink()
- .addOnCompleteListener(this, new OnCompleteListener() {
- @Override
- public void onComplete(@NonNull Task task) {
- if (task.isSuccessful()) {
- // Short link created
- Uri shortLink = task.getResult().getShortLink();
- Uri flowchartLink = task.getResult().getPreviewLink();
- } else {
- // Error
- // ...
- }
- }
- });
- // [END create_short_link]
- }
-
- public void shortenLongLink() {
- // [START shorten_long_link]
- Task shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
- .setLongLink(Uri.parse("https://example.page.link/?link=https://www.example.com/&apn=com.example.android&ibn=com.example.ios"))
- .buildShortDynamicLink()
- .addOnCompleteListener(this, new OnCompleteListener() {
- @Override
- public void onComplete(@NonNull Task task) {
- if (task.isSuccessful()) {
- // Short link created
- Uri shortLink = task.getResult().getShortLink();
- Uri flowchartLink = task.getResult().getPreviewLink();
- } else {
- // Error
- // ...
- }
- }
- });
- // [END shorten_long_link]
- }
-
- public void buildShortSuffix() {
- // [START ddl_short_suffix]
- Task shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
- // ...
- .buildShortDynamicLink(ShortDynamicLink.Suffix.SHORT);
- // ...
- // [END ddl_short_suffix]
- }
-
- public void shareLink(Uri myDynamicLink) {
- // [START ddl_share_link]
- Intent sendIntent = new Intent();
- String msg = "Hey, check this out: " + myDynamicLink;
- sendIntent.setAction(Intent.ACTION_SEND);
- sendIntent.putExtra(Intent.EXTRA_TEXT, msg);
- sendIntent.setType("text/plain");
- startActivity(sendIntent);
- // [END ddl_share_link]
- }
-
- public void getInvitation() {
- // [START ddl_get_invitation]
- FirebaseDynamicLinks.getInstance()
- .getDynamicLink(getIntent())
- .addOnCompleteListener(new OnCompleteListener() {
- @Override
- public void onComplete(@NonNull Task task) {
- if (!task.isSuccessful()) {
- // Handle error
- // ...
- }
-
- FirebaseAppInvite invite = FirebaseAppInvite.getInvitation(task.getResult());
- if (invite != null) {
- // Handle invite
- // ...
- }
- }
- });
- // [END ddl_get_invitation]
- }
-
- public void onboardingShare(ShortDynamicLink dl) {
- // [START ddl_onboarding_share]
- Intent intent = new Intent(Intent.ACTION_SEND);
- intent.setType("text/plain");
- intent.putExtra(Intent.EXTRA_TEXT, "Try this amazing app: " + dl.getShortLink());
- startActivity(Intent.createChooser(intent, "Share using"));
- // [END ddl_onboarding_share]
- }
-
- public Uri buildDeepLink(@NonNull Uri deepLink, int minVersion) {
- String uriPrefix = "https://YOUR_APP.page.link";
-
- // Set dynamic link parameters:
- // * URI prefix (required)
- // * Android Parameters (required)
- // * Deep link
- // [START build_dynamic_link]
- DynamicLink.Builder builder = FirebaseDynamicLinks.getInstance()
- .createDynamicLink()
- .setDomainUriPrefix(uriPrefix)
- .setAndroidParameters(new DynamicLink.AndroidParameters.Builder()
- .setMinimumVersion(minVersion)
- .build())
- .setLink(deepLink);
-
- // Build the dynamic link
- DynamicLink link = builder.buildDynamicLink();
- // [END build_dynamic_link]
-
- // Return the dynamic link as a URI
- return link.getUri();
- }
-
-}
diff --git a/dynamic-links/app/src/main/java/com/google/firebase/quickstart/dynamiclinks/ReferralActivity.java b/dynamic-links/app/src/main/java/com/google/firebase/quickstart/dynamiclinks/ReferralActivity.java
deleted file mode 100644
index 613dba9b7..000000000
--- a/dynamic-links/app/src/main/java/com/google/firebase/quickstart/dynamiclinks/ReferralActivity.java
+++ /dev/null
@@ -1,172 +0,0 @@
-package com.google.firebase.quickstart.dynamiclinks;
-
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import androidx.appcompat.app.AppCompatActivity;
-
-import com.google.android.gms.tasks.OnSuccessListener;
-import com.google.firebase.auth.AuthCredential;
-import com.google.firebase.auth.AuthResult;
-import com.google.firebase.auth.EmailAuthProvider;
-import com.google.firebase.auth.FirebaseAuth;
-import com.google.firebase.auth.FirebaseUser;
-import com.google.firebase.database.DatabaseReference;
-import com.google.firebase.database.FirebaseDatabase;
-import com.google.firebase.database.ServerValue;
-import com.google.firebase.dynamiclinks.DynamicLink;
-import com.google.firebase.dynamiclinks.FirebaseDynamicLinks;
-import com.google.firebase.dynamiclinks.PendingDynamicLinkData;
-import com.google.firebase.dynamiclinks.ShortDynamicLink;
-
-/**
- * Snippets for the "rewarded referral" use case.
- */
-public class ReferralActivity extends AppCompatActivity {
-
- private Uri mInvitationUrl;
-
- public void createLink() {
- // [START ddl_referral_create_link]
- FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
- String uid = user.getUid();
- String link = "https://mygame.example.com/?invitedby=" + uid;
- FirebaseDynamicLinks.getInstance().createDynamicLink()
- .setLink(Uri.parse(link))
- .setDomainUriPrefix("https://example.page.link")
- .setAndroidParameters(
- new DynamicLink.AndroidParameters.Builder("com.example.android")
- .setMinimumVersion(125)
- .build())
- .setIosParameters(
- new DynamicLink.IosParameters.Builder("com.example.ios")
- .setAppStoreId("123456789")
- .setMinimumVersion("1.0.1")
- .build())
- .buildShortDynamicLink()
- .addOnSuccessListener(new OnSuccessListener() {
- @Override
- public void onSuccess(ShortDynamicLink shortDynamicLink) {
- mInvitationUrl = shortDynamicLink.getShortLink();
- // ...
- }
- });
- // [END ddl_referral_create_link]
- }
-
- public void sendInvitation() {
- // [START ddl_referral_send]
- String referrerName = FirebaseAuth.getInstance().getCurrentUser().getDisplayName();
- String subject = String.format("%s wants you to play MyExampleGame!", referrerName);
- String invitationLink = mInvitationUrl.toString();
- String msg = "Let's play MyExampleGame together! Use my referrer link: "
- + invitationLink;
- String msgHtml = String.format("Let's play MyExampleGame together! Use my "
- + "referrer link!
", invitationLink);
-
- Intent intent = new Intent(Intent.ACTION_SENDTO);
- intent.setData(Uri.parse("mailto:")); // only email apps should handle this
- intent.putExtra(Intent.EXTRA_SUBJECT, subject);
- intent.putExtra(Intent.EXTRA_TEXT, msg);
- intent.putExtra(Intent.EXTRA_HTML_TEXT, msgHtml);
- if (intent.resolveActivity(getPackageManager()) != null) {
- startActivity(intent);
- }
- // [END ddl_referral_send]
- }
-
- // [START ddl_referral_on_create]
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- // ...
-
- FirebaseDynamicLinks.getInstance()
- .getDynamicLink(getIntent())
- .addOnSuccessListener(this, new OnSuccessListener() {
- @Override
- public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
- // Get deep link from result (may be null if no link is found)
- Uri deepLink = null;
- if (pendingDynamicLinkData != null) {
- deepLink = pendingDynamicLinkData.getLink();
- }
- //
- // If the user isn't signed in and the pending Dynamic Link is
- // an invitation, sign in the user anonymously, and record the
- // referrer's UID.
- //
- FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
- if (user == null
- && deepLink != null
- && deepLink.getBooleanQueryParameter("invitedby", false)) {
- String referrerUid = deepLink.getQueryParameter("invitedby");
- createAnonymousAccountWithReferrerInfo(referrerUid);
- }
- }
- });
- }
-
- private void createAnonymousAccountWithReferrerInfo(final String referrerUid) {
- FirebaseAuth.getInstance()
- .signInAnonymously()
- .addOnSuccessListener(new OnSuccessListener() {
- @Override
- public void onSuccess(AuthResult authResult) {
- // Keep track of the referrer in the RTDB. Database calls
- // will depend on the structure of your app's RTDB.
- FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
- DatabaseReference userRecord =
- FirebaseDatabase.getInstance().getReference()
- .child("users")
- .child(user.getUid());
- userRecord.child("referred_by").setValue(referrerUid);
- }
- });
- }
- // [END ddl_referral_on_create]
-
- public void getCredential(String email, String password) {
- // [START ddl_referral_get_cred]
- AuthCredential credential = EmailAuthProvider.getCredential(email, password);
- // [END ddl_referral_get_cred]
- }
-
- public void linkCredential(AuthCredential credential) {
- // [START ddl_referral_link_cred]
- FirebaseAuth.getInstance().getCurrentUser()
- .linkWithCredential(credential)
- .addOnSuccessListener(new OnSuccessListener() {
- @Override
- public void onSuccess(AuthResult authResult) {
- // Complete any post sign-up tasks here.
- }
- });
- // [END ddl_referral_link_cred]
- }
-
- public void rewardUser(AuthCredential credential) {
- // [START ddl_referral_reward_user]
- FirebaseAuth.getInstance().getCurrentUser()
- .linkWithCredential(credential)
- .addOnSuccessListener(new OnSuccessListener() {
- @Override
- public void onSuccess(AuthResult authResult) {
- // Complete any post sign-up tasks here.
-
- // Trigger the sign-up reward function by creating the
- // "last_signin_at" field. (If this is a value you want to track,
- // you would also update this field in the success listeners of
- // your Firebase Authentication signIn calls.)
- FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
- DatabaseReference userRecord =
- FirebaseDatabase.getInstance().getReference()
- .child("users")
- .child(user.getUid());
- userRecord.child("last_signin_at").setValue(ServerValue.TIMESTAMP);
- }
- });
- // [END ddl_referral_reward_user]
- }
-}
diff --git a/dynamic-links/app/src/main/java/com/google/firebase/quickstart/dynamiclinks/kotlin/MainActivity.kt b/dynamic-links/app/src/main/java/com/google/firebase/quickstart/dynamiclinks/kotlin/MainActivity.kt
deleted file mode 100644
index f7506bbb7..000000000
--- a/dynamic-links/app/src/main/java/com/google/firebase/quickstart/dynamiclinks/kotlin/MainActivity.kt
+++ /dev/null
@@ -1,213 +0,0 @@
-package com.google.firebase.quickstart.dynamiclinks.kotlin
-
-import android.content.Intent
-import android.net.Uri
-import android.os.Bundle
-import android.util.Log
-import androidx.appcompat.app.AppCompatActivity
-import com.google.firebase.appinvite.FirebaseAppInvite
-import com.google.firebase.dynamiclinks.PendingDynamicLinkData
-import com.google.firebase.dynamiclinks.ShortDynamicLink
-import com.google.firebase.dynamiclinks.androidParameters
-import com.google.firebase.dynamiclinks.component1
-import com.google.firebase.dynamiclinks.component2
-import com.google.firebase.dynamiclinks.dynamicLink
-import com.google.firebase.dynamiclinks.dynamicLinks
-import com.google.firebase.dynamiclinks.googleAnalyticsParameters
-import com.google.firebase.dynamiclinks.iosParameters
-import com.google.firebase.dynamiclinks.itunesConnectAnalyticsParameters
-import com.google.firebase.dynamiclinks.shortLinkAsync
-import com.google.firebase.dynamiclinks.socialMetaTagParameters
-import com.google.firebase.Firebase
-import com.google.firebase.quickstart.dynamiclinks.R
-
-abstract class MainActivity : AppCompatActivity() {
-
- private val TAG = "fdl.MainActivity"
-
- // [START on_create]
- override fun onCreate(savedInstanceState: Bundle?) {
- // [START_EXCLUDE]
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_main)
- // [END_EXCLUDE]
-
- // [START get_deep_link]
- Firebase.dynamicLinks
- .getDynamicLink(intent)
- .addOnSuccessListener(this) { pendingDynamicLinkData: PendingDynamicLinkData? ->
- // Get deep link from result (may be null if no link is found)
- var deepLink: Uri? = null
- if (pendingDynamicLinkData != null) {
- deepLink = pendingDynamicLinkData.link
- }
-
- // Handle the deep link. For example, open the linked
- // content, or apply promotional credit to the user's
- // account.
- // ...
- }
- .addOnFailureListener(this) { e -> Log.w(TAG, "getDynamicLink:onFailure", e) }
- // [END get_deep_link]
- }
- // [END on_create]
-
- fun createDynamicLink_Basic() {
- // [START create_link_basic]
- val dynamicLink = Firebase.dynamicLinks.dynamicLink {
- link = Uri.parse("https://www.example.com/")
- domainUriPrefix = "https://example.page.link"
- // Open links with this app on Android
- androidParameters { }
- // Open links with com.example.ios on iOS
- iosParameters("com.example.ios") { }
- }
-
- val dynamicLinkUri = dynamicLink.uri
- // [END create_link_basic]
- }
-
- fun createDynamicLink_Advanced() {
- // [START create_link_advanced]
- val dynamicLink = Firebase.dynamicLinks.dynamicLink { // or Firebase.dynamicLinks.shortLinkAsync
- link = Uri.parse("https://www.example.com/")
- domainUriPrefix = "https://example.page.link"
- androidParameters("com.example.android") {
- minimumVersion = 125
- }
- iosParameters("com.example.ios") {
- appStoreId = "123456789"
- minimumVersion = "1.0.1"
- }
- googleAnalyticsParameters {
- source = "orkut"
- medium = "social"
- campaign = "example-promo"
- }
- itunesConnectAnalyticsParameters {
- providerToken = "123456"
- campaignToken = "example-promo"
- }
- socialMetaTagParameters {
- title = "Example of a Dynamic Link"
- description = "This link works whether the app is installed or not!"
- }
- }
- // [END create_link_advanced]
- }
-
- private fun processShortLink(shortLink: Uri?, previewLink: Uri?) {
- }
-
- fun createShortLink() {
- // [START create_short_link]
- val shortLinkTask = Firebase.dynamicLinks.shortLinkAsync {
- link = Uri.parse("https://www.example.com/")
- domainUriPrefix = "https://example.page.link"
- // Set parameters
- // ...
- }.addOnSuccessListener { (shortLink, flowchartLink) ->
- // You'll need to import com.google.firebase.dynamiclinks.component1 and
- // com.google.firebase.dynamiclinks.component2
-
- // Short link created
- processShortLink(shortLink, flowchartLink)
- }.addOnFailureListener {
- // Error
- // ...
- }
- // [END create_short_link]
- }
-
- fun shortenLongLink() {
- // [START shorten_long_link]
- val shortLinkTask = Firebase.dynamicLinks.shortLinkAsync {
- longLink = Uri.parse(
- "https://example.page.link/?link=" +
- "https://www.example.com/&apn=com.example.android&ibn=com.example.ios",
- )
- }.addOnSuccessListener { (shortLink, flowChartLink) ->
- // You'll need to import com.google.firebase.dynamiclinks.component1 and
- // com.google.firebase.dynamiclinks.component2
-
- // Short link created
- processShortLink(shortLink, flowChartLink)
- }.addOnFailureListener {
- // Error
- // ...
- }
- // [END shorten_long_link]
- }
-
- fun buildShortSuffix() {
- // [START ddl_short_suffix]
- val shortLinkTask = Firebase.dynamicLinks.shortLinkAsync(ShortDynamicLink.Suffix.SHORT) {
- // Set parameters
- // ...
- }
- // [END ddl_short_suffix]
- }
-
- fun shareLink(myDynamicLink: Uri) {
- // [START ddl_share_link]
- val sendIntent = Intent().apply {
- val msg = "Hey, check this out: $myDynamicLink"
- action = Intent.ACTION_SEND
- putExtra(Intent.EXTRA_TEXT, msg)
- type = "text/plain"
- }
- startActivity(sendIntent)
- // [END ddl_share_link]
- }
-
- fun getInvitation() {
- // [START ddl_get_invitation]
- Firebase.dynamicLinks
- .getDynamicLink(intent)
- .addOnCompleteListener { task ->
- if (!task.isSuccessful) {
- // Handle error
- // ...
- }
-
- val invite = FirebaseAppInvite.getInvitation(task.result)
- if (invite != null) {
- // Handle invite
- // ...
- }
- }
- // [END ddl_get_invitation]
- }
-
- fun onboardingShare(dl: ShortDynamicLink) {
- // [START ddl_onboarding_share]
- val intent = Intent(Intent.ACTION_SEND).apply {
- type = "text/plain"
- putExtra(Intent.EXTRA_TEXT, "Try this amazing app: ${dl.shortLink}")
- }
- startActivity(Intent.createChooser(intent, "Share using"))
- // [END ddl_onboarding_share]
- }
-
- fun buildDeepLink(deepLink: Uri, minVersion: Int): Uri {
- val uriPrefix = "https://YOUR_APP.page.link"
-
- // Set dynamic link parameters:
- // * URI prefix (required)
- // * Android Parameters (required)
- // * Deep link
- // [START build_dynamic_link]
- // Build the dynamic link
- val link = Firebase.dynamicLinks.dynamicLink {
- domainUriPrefix = uriPrefix
- androidParameters {
- minimumVersion = minVersion
- }
- link = deepLink
- }
- // [END build_dynamic_link]
-
- // Return the dynamic link as a URI
- return link.uri
- }
-}
diff --git a/dynamic-links/app/src/main/java/com/google/firebase/quickstart/dynamiclinks/kotlin/ReferralActivity.kt b/dynamic-links/app/src/main/java/com/google/firebase/quickstart/dynamiclinks/kotlin/ReferralActivity.kt
deleted file mode 100644
index 1735d8824..000000000
--- a/dynamic-links/app/src/main/java/com/google/firebase/quickstart/dynamiclinks/kotlin/ReferralActivity.kt
+++ /dev/null
@@ -1,151 +0,0 @@
-package com.google.firebase.quickstart.dynamiclinks.kotlin
-
-import android.content.Intent
-import android.net.Uri
-import android.os.Bundle
-import androidx.appcompat.app.AppCompatActivity
-import com.google.firebase.auth.AuthCredential
-import com.google.firebase.auth.EmailAuthProvider
-import com.google.firebase.auth.auth
-import com.google.firebase.database.ServerValue
-import com.google.firebase.database.database
-import com.google.firebase.dynamiclinks.androidParameters
-import com.google.firebase.dynamiclinks.dynamicLinks
-import com.google.firebase.dynamiclinks.iosParameters
-import com.google.firebase.dynamiclinks.shortLinkAsync
-import com.google.firebase.Firebase
-
-/**
- * Snippets for the "rewarded referral" use case.
- */
-abstract class ReferralActivity : AppCompatActivity() {
-
- private var mInvitationUrl: Uri? = null
-
- fun createLink() {
- // [START ddl_referral_create_link]
- val user = Firebase.auth.currentUser!!
- val uid = user.uid
- val invitationLink = "https://mygame.example.com/?invitedby=$uid"
- Firebase.dynamicLinks.shortLinkAsync {
- link = Uri.parse(invitationLink)
- domainUriPrefix = "https://example.page.link"
- androidParameters("com.example.android") {
- minimumVersion = 125
- }
- iosParameters("com.example.ios") {
- appStoreId = "123456789"
- minimumVersion = "1.0.1"
- }
- }.addOnSuccessListener { shortDynamicLink ->
- mInvitationUrl = shortDynamicLink.shortLink
- // ...
- }
- // [END ddl_referral_create_link]
- }
-
- fun sendInvitation() {
- // [START ddl_referral_send]
- val referrerName = Firebase.auth.currentUser?.displayName
- val subject = String.format("%s wants you to play MyExampleGame!", referrerName)
- val invitationLink = mInvitationUrl.toString()
- val msg = "Let's play MyExampleGame together! Use my referrer link: $invitationLink"
- val msgHtml = String.format(
- "Let's play MyExampleGame together! Use my " +
- "referrer link!
",
- invitationLink,
- )
-
- val intent = Intent(Intent.ACTION_SENDTO).apply {
- data = Uri.parse("mailto:") // only email apps should handle this
- putExtra(Intent.EXTRA_SUBJECT, subject)
- putExtra(Intent.EXTRA_TEXT, msg)
- putExtra(Intent.EXTRA_HTML_TEXT, msgHtml)
- }
- intent.resolveActivity(packageManager)?.let {
- startActivity(intent)
- }
- // [END ddl_referral_send]
- }
-
- // [START ddl_referral_on_create]
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
-
- // ...
-
- Firebase.dynamicLinks
- .getDynamicLink(intent)
- .addOnSuccessListener(this) { pendingDynamicLinkData ->
- // Get deep link from result (may be null if no link is found)
- var deepLink: Uri? = null
- if (pendingDynamicLinkData != null) {
- deepLink = pendingDynamicLinkData.link
- }
- //
- // If the user isn't signed in and the pending Dynamic Link is
- // an invitation, sign in the user anonymously, and record the
- // referrer's UID.
- //
- val user = Firebase.auth.currentUser
- if (user == null &&
- deepLink != null &&
- deepLink.getBooleanQueryParameter("invitedby", false)
- ) {
- val referrerUid = deepLink.getQueryParameter("invitedby")
- createAnonymousAccountWithReferrerInfo(referrerUid)
- }
- }
- }
-
- private fun createAnonymousAccountWithReferrerInfo(referrerUid: String?) {
- Firebase.auth
- .signInAnonymously()
- .addOnSuccessListener {
- // Keep track of the referrer in the RTDB. Database calls
- // will depend on the structure of your app's RTDB.
- val user = Firebase.auth.currentUser
- val userRecord = Firebase.database.reference
- .child("users")
- .child(user!!.uid)
- userRecord.child("referred_by").setValue(referrerUid)
- }
- }
- // [END ddl_referral_on_create]
-
- fun getCredential(email: String, password: String) {
- // [START ddl_referral_get_cred]
- val credential = EmailAuthProvider.getCredential(email, password)
- // [END ddl_referral_get_cred]
- }
-
- fun linkCredential(credential: AuthCredential) {
- // [START ddl_referral_link_cred]
- Firebase.auth.currentUser!!
- .linkWithCredential(credential)
- .addOnSuccessListener {
- // Complete any post sign-up tasks here.
- }
- // [END ddl_referral_link_cred]
- }
-
- fun rewardUser(credential: AuthCredential) {
- // [START ddl_referral_reward_user]
- Firebase.auth.currentUser!!
- .linkWithCredential(credential)
- .addOnSuccessListener {
- // Complete any post sign-up tasks here.
-
- // Trigger the sign-up reward function by creating the
- // "last_signin_at" field. (If this is a value you want to track,
- // you would also update this field in the success listeners of
- // your Firebase Authentication signIn calls.)
- val user = Firebase.auth.currentUser!!
- val userRecord = Firebase.database.reference
- .child("users")
- .child(user.uid)
- userRecord.child("last_signin_at").setValue(ServerValue.TIMESTAMP)
- }
- // [END ddl_referral_reward_user]
- }
-}
diff --git a/dynamic-links/app/src/main/res/layout/activity_main.xml b/dynamic-links/app/src/main/res/layout/activity_main.xml
deleted file mode 100644
index eb7998de3..000000000
--- a/dynamic-links/app/src/main/res/layout/activity_main.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
diff --git a/dynamic-links/app/src/main/res/layout/activity_referral.xml b/dynamic-links/app/src/main/res/layout/activity_referral.xml
deleted file mode 100644
index a77349357..000000000
--- a/dynamic-links/app/src/main/res/layout/activity_referral.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
diff --git a/dynamic-links/app/src/main/res/mipmap-hdpi/ic_launcher.png b/dynamic-links/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index cde69bccc..000000000
Binary files a/dynamic-links/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/dynamic-links/app/src/main/res/mipmap-mdpi/ic_launcher.png b/dynamic-links/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index c133a0cbd..000000000
Binary files a/dynamic-links/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/dynamic-links/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/dynamic-links/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index bfa42f0e7..000000000
Binary files a/dynamic-links/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/dynamic-links/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/dynamic-links/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 324e72cdd..000000000
Binary files a/dynamic-links/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/dynamic-links/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/dynamic-links/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index aee44e138..000000000
Binary files a/dynamic-links/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/dynamic-links/app/src/main/res/values-w820dp/dimens.xml b/dynamic-links/app/src/main/res/values-w820dp/dimens.xml
deleted file mode 100644
index 63fc81644..000000000
--- a/dynamic-links/app/src/main/res/values-w820dp/dimens.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- 64dp
-
diff --git a/dynamic-links/app/src/main/res/values/colors.xml b/dynamic-links/app/src/main/res/values/colors.xml
deleted file mode 100644
index 3ab3e9cbc..000000000
--- a/dynamic-links/app/src/main/res/values/colors.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- #3F51B5
- #303F9F
- #FF4081
-
diff --git a/dynamic-links/app/src/main/res/values/dimens.xml b/dynamic-links/app/src/main/res/values/dimens.xml
deleted file mode 100644
index 47c822467..000000000
--- a/dynamic-links/app/src/main/res/values/dimens.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- 16dp
- 16dp
-
diff --git a/dynamic-links/app/src/main/res/values/strings.xml b/dynamic-links/app/src/main/res/values/strings.xml
deleted file mode 100644
index aad6e7737..000000000
--- a/dynamic-links/app/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
- tasks
-
diff --git a/dynamic-links/app/src/main/res/values/styles.xml b/dynamic-links/app/src/main/res/values/styles.xml
deleted file mode 100644
index daa2a5c2f..000000000
--- a/dynamic-links/app/src/main/res/values/styles.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
diff --git a/dynamic-links/build.gradle.kts b/dynamic-links/build.gradle.kts
deleted file mode 100644
index e0c301fa7..000000000
--- a/dynamic-links/build.gradle.kts
+++ /dev/null
@@ -1,22 +0,0 @@
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
-
-plugins {
- id("com.android.application") version "8.12.0" apply false
- id("com.android.library") version "8.12.0" apply false
- id("org.jetbrains.kotlin.android") version "2.2.0" apply false
- id("com.google.gms.google-services") version "4.4.3" apply false
-}
-
-allprojects {
- repositories {
- mavenLocal()
- google()
- mavenCentral()
- }
-}
-
-tasks {
- register("clean", Delete::class) {
- delete(rootProject.buildDir)
- }
-}
diff --git a/dynamic-links/gradle.properties b/dynamic-links/gradle.properties
deleted file mode 100644
index 6dd0218ed..000000000
--- a/dynamic-links/gradle.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Project-wide Gradle settings.
-
-# IDE (e.g. Android Studio) users:
-# Gradle settings configured through the IDE *will override*
-# any settings specified in this file.
-
-# For more details on how to configure your build environment visit
-# http://www.gradle.org/docs/current/userguide/build_environment.html
-
-# Specifies the JVM arguments used for the daemon process.
-# The setting is particularly useful for tweaking memory settings.
-org.gradle.jvmargs=-Xmx1536m
-android.useAndroidX=true
-
-# When configured, Gradle will run in incubating parallel mode.
-# This option should only be used with decoupled projects. More details, visit
-# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
-# org.gradle.parallel=true
diff --git a/dynamic-links/gradle/wrapper/gradle-wrapper.jar b/dynamic-links/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 5c2d1cf01..000000000
Binary files a/dynamic-links/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/dynamic-links/gradle/wrapper/gradle-wrapper.properties b/dynamic-links/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 0b55a3bd9..000000000
--- a/dynamic-links/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/dynamic-links/gradlew b/dynamic-links/gradlew
deleted file mode 100755
index 83f2acfdc..000000000
--- a/dynamic-links/gradlew
+++ /dev/null
@@ -1,188 +0,0 @@
-#!/usr/bin/env sh
-
-#
-# Copyright 2015 the original author or authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##############################################################################
-##
-## Gradle start up script for UN*X
-##
-##############################################################################
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn () {
- echo "$*"
-}
-
-die () {
- echo
- echo "$*"
- echo
- exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
- NONSTOP* )
- nonstop=true
- ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD="java"
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
- JAVACMD=`cygpath --unix "$JAVACMD"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
- fi
- i=$((i+1))
- done
- case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
-fi
-
-# Escape application args
-save () {
- for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
- echo " "
-}
-APP_ARGS=$(save "$@")
-
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-
-# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
-if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
- cd "$(dirname "$0")"
-fi
-
-exec "$JAVACMD" "$@"
diff --git a/dynamic-links/gradlew.bat b/dynamic-links/gradlew.bat
deleted file mode 100644
index 24467a141..000000000
--- a/dynamic-links/gradlew.bat
+++ /dev/null
@@ -1,100 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/dynamic-links/settings.gradle.kts b/dynamic-links/settings.gradle.kts
deleted file mode 100644
index 6950372e0..000000000
--- a/dynamic-links/settings.gradle.kts
+++ /dev/null
@@ -1,9 +0,0 @@
-pluginManagement {
- repositories {
- google()
- mavenCentral()
- gradlePluginPortal()
- }
-}
-
-include(":app")
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 0099ae5c0..f3750ccdc 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -10,8 +10,6 @@ include(":auth:app",
":appcheck:app",
":config:app",
":database:app",
- ":dynamic-links:app",
- ":dl-invites:app",
":firebaseoptions:app",
":functions:app",
":firestore:app",