diff --git a/.github/workflows/claude-code-review.yml b/.github/workflows/claude-code-review.yml new file mode 100644 index 0000000000..4f6145beb8 --- /dev/null +++ b/.github/workflows/claude-code-review.yml @@ -0,0 +1,44 @@ +name: Claude Code Review + +on: + pull_request: + types: [opened, synchronize, ready_for_review, reopened] + # Optional: Only run on specific file changes + # paths: + # - "src/**/*.ts" + # - "src/**/*.tsx" + # - "src/**/*.js" + # - "src/**/*.jsx" + +jobs: + claude-review: + # Optional: Filter by PR author + # if: | + # github.event.pull_request.user.login == 'external-contributor' || + # github.event.pull_request.user.login == 'new-developer' || + # github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR' + + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: read + issues: read + id-token: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - name: Run Claude Code Review + id: claude-review + uses: anthropics/claude-code-action@v1 + with: + anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} + plugin_marketplaces: 'https://github.com/anthropics/claude-code.git' + plugins: 'code-review@claude-code-plugins' + prompt: '/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}' + # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md + # or https://code.claude.com/docs/en/cli-reference for available options + diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml new file mode 100644 index 0000000000..79fe056478 --- /dev/null +++ b/.github/workflows/claude.yml @@ -0,0 +1,50 @@ +name: Claude Code + +on: + issue_comment: + types: [created] + pull_request_review_comment: + types: [created] + issues: + types: [opened, assigned] + pull_request_review: + types: [submitted] + +jobs: + claude: + if: | + (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) || + (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) || + (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) || + (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude'))) + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: read + issues: read + id-token: write + actions: read # Required for Claude to read CI results on PRs + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - name: Run Claude Code + id: claude + uses: anthropics/claude-code-action@v1 + with: + anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} + + # This is an optional setting that allows Claude to read CI results on PRs + additional_permissions: | + actions: read + + # Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it. + # prompt: 'Update the pull request description to include a summary of changes.' + + # Optional: Add claude_args to customize behavior and configuration + # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md + # or https://code.claude.com/docs/en/cli-reference for available options + # claude_args: '--allowed-tools Bash(gh pr:*)' + diff --git a/.github/workflows/create-release-pr.yml b/.github/workflows/create-release-pr.yml index b1badcf805..c2bfcdb54c 100644 --- a/.github/workflows/create-release-pr.yml +++ b/.github/workflows/create-release-pr.yml @@ -70,7 +70,7 @@ jobs: fetch-tags: true - name: Setup Git User - uses: OneSignal/sdk-actions/.github/actions/setup-git-user@main + uses: OneSignal/sdk-shared/.github/actions/setup-git-user@main - name: Create release branch from base run: | @@ -86,7 +86,7 @@ jobs: - name: Update SDK_VERSION in gradle.properties run: | sed -i "s/^SDK_VERSION=.*/SDK_VERSION=$VERSION/" OneSignalSDK/gradle.properties - sed -i "s/^SDK_VERSION=.*/SDK_VERSION=$VERSION/" Examples/OneSignalDemo/gradle.properties + sed -i "s/^SDK_VERSION=.*/SDK_VERSION=$VERSION/" examples/demo/gradle.properties - name: Commit and Push changes run: | @@ -110,9 +110,6 @@ jobs: - name: Generate Release Notes from PR Titles id: generate_notes run: | - echo "## 🔖 Auto-Generated Release Notes" > pr_body.md - echo "" >> pr_body.md - if [[ "$VERSION" == *"alpha"* ]]; then CHANNEL="alpha" elif [[ "$VERSION" == *"beta"* ]]; then diff --git a/.github/workflows/lint-pr-title.yml b/.github/workflows/lint-pr-title.yml index 164f72fe56..fd44677d6d 100644 --- a/.github/workflows/lint-pr-title.yml +++ b/.github/workflows/lint-pr-title.yml @@ -10,5 +10,5 @@ on: jobs: call: - uses: OneSignal/sdk-actions/.github/workflows/lint-pr-title.yml@main + uses: OneSignal/sdk-shared/.github/workflows/lint-pr-title.yml@main secrets: inherit diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml index cb58cbc996..d59c2d725a 100644 --- a/.github/workflows/publish-release.yml +++ b/.github/workflows/publish-release.yml @@ -163,8 +163,6 @@ jobs: CHANNEL="current" fi - echo -e "Channels: $CHANNEL\n\n$(cat release_notes.md)" > release_notes.md - git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" @@ -180,7 +178,7 @@ jobs: wrapper_prs: needs: publish - uses: OneSignal/sdk-actions/.github/workflows/create-wrapper-prs.yml@main + uses: OneSignal/sdk-shared/.github/workflows/create-wrapper-prs.yml@main secrets: GH_PUSH_TOKEN: ${{ secrets.GH_PUSH_TOKEN }} with: diff --git a/.gitignore b/.gitignore index 0cd7cbc570..b2f46c5ab1 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,7 @@ build/ # Local properties local.properties OneSignalSDK/local.properties -Examples/OneSignalDemo/local.properties +examples/demo/local.properties # macOS .DS_Store @@ -18,7 +18,7 @@ Examples/OneSignalDemo/local.properties # Captures captures/ OneSignalSDK/captures/ -Examples/OneSignalDemo/captures/ +examples/demo/captures/ # GPG files *.gpg diff --git a/Examples/OneSignalDemo/.gitignore b/Examples/OneSignalDemo/.gitignore deleted file mode 100644 index 24bfabcdf9..0000000000 --- a/Examples/OneSignalDemo/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -.gradle -local.properties -.DS_Store -/build -/captures -*.gpg -/**/.idea -*.iml \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/build.gradle b/Examples/OneSignalDemo/app/build.gradle deleted file mode 100644 index c994d6615d..0000000000 --- a/Examples/OneSignalDemo/app/build.gradle +++ /dev/null @@ -1,122 +0,0 @@ -plugins { - id 'com.android.application' - id 'kotlin-android' -} - -android { - namespace 'com.onesignal.sdktest' - compileSdkVersion 34 - defaultConfig { - minSdkVersion 21 - targetSdkVersion 34 - versionCode 1 - versionName "1.0" - multiDexEnabled true - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - flavorDimensions "default" - } - -// signingConfigs { -// huawei { -// storeFile file('SdkTest.jks') -// keyAlias 'SdkTest' -// keyPassword '' -// storePassword '' -// v1SigningEnabled true -// v2SigningEnabled true -// } -// } - - productFlavors { - gms { - dimension "default" - applicationId "com.onesignal.sdktest" - } - huawei { - dimension "default" - minSdkVersion 21 - applicationId "com.onesignal.sdktest" - } - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - debug { -// signingConfig null -// productFlavors.huawei.signingConfig signingConfigs.huawei - debuggable true - // Note: profileable is automatically enabled when debuggable=true - // Enable method tracing for detailed performance analysis - testCoverageEnabled false - } - // Profileable release build for performance testing - profileable { - initWith release - debuggable false - profileable true - minifyEnabled false - signingConfig signingConfigs.debug - matchingFallbacks = ['release'] - } - } - - kotlinOptions { - jvmTarget = '1.8' - } - - // Forced downgrade to Java 1.8 for compiling the application due to Android N error when building - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - packagingOptions { - exclude 'androidsupportmultidexversion.txt' - } - - task flavorSelection() { - def tasksList = gradle.startParameter.taskRequests.toString() - if (tasksList.contains('Gms')) { - apply plugin: 'com.google.gms.google-services' - googleServices { disableVersionCheck = true } - } else if (tasksList.contains('Huawei')) { - apply plugin: 'com.huawei.agconnect' - } - } -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion" - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4' - implementation 'androidx.multidex:multidex:2.0.1' - implementation 'androidx.cardview:cardview:1.0.0' - implementation 'androidx.appcompat:appcompat:1.5.1' - implementation 'androidx.vectordrawable:vectordrawable:1.1.0' - - implementation 'com.google.android.material:material:1.7.0' - implementation 'com.google.android.gms:play-services-location:21.0.0' - - implementation 'com.github.bumptech.glide:glide:4.12.0' - - /** START - Google Play Builds **/ - gmsImplementation("com.onesignal:OneSignal:$SDK_VERSION") - /** END - Google Play Builds **/ - - /** START - Huawei Builds **/ - // Omit Google / Firebase libraries for Huawei builds. - huaweiImplementation("com.onesignal:OneSignal:$SDK_VERSION") { - exclude group: 'com.google.android.gms', module: 'play-services-gcm' - exclude group: 'com.google.android.gms', module: 'play-services-analytics' - exclude group: 'com.google.android.gms', module: 'play-services-location' - exclude group: 'com.google.firebase', module: 'firebase-messaging' - } - // Add HMS Push library - huaweiImplementation 'com.huawei.hms:push:6.3.0.304' - // Optionally add HMS location - huaweiImplementation 'com.huawei.hms:location:4.0.0.300' - /** END - Huawei Builds **/ -} diff --git a/Examples/OneSignalDemo/app/src/huawei/AndroidManifest.xml b/Examples/OneSignalDemo/app/src/huawei/AndroidManifest.xml deleted file mode 100644 index 6778b0ea3b..0000000000 --- a/Examples/OneSignalDemo/app/src/huawei/AndroidManifest.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/huawei/java/com/onesignal/sdktest/notification/HmsMessageServiceAppLevel.java b/Examples/OneSignalDemo/app/src/huawei/java/com/onesignal/sdktest/notification/HmsMessageServiceAppLevel.java deleted file mode 100644 index 1d49484664..0000000000 --- a/Examples/OneSignalDemo/app/src/huawei/java/com/onesignal/sdktest/notification/HmsMessageServiceAppLevel.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.onesignal.sdktest.notification; - -import android.os.Bundle; -import android.util.Log; - -import com.huawei.hms.push.HmsMessageService; -import com.huawei.hms.push.RemoteMessage; -import com.onesignal.notifications.bridges.OneSignalHmsEventBridge; -import com.onesignal.sdktest.constant.Tag; - -public class HmsMessageServiceAppLevel extends HmsMessageService { - - /** - * When an app calls the getToken method to apply for a token from the server, - * if the server does not return the token during current method calling, the server can return the token through this method later. - * This method callback must be completed in 10 seconds. Otherwise, you need to start a new Job for callback processing. - * - * @param token token - * @param bundle bundle - */ - @Override - public void onNewToken(String token, Bundle bundle) { - Log.d(Tag.LOG_TAG, "HmsMessageServiceAppLevel onNewToken refresh token:" + token + " bundle: " + bundle); - - // Forward event on to OneSignal SDK - OneSignalHmsEventBridge.INSTANCE.onNewToken(this, token, bundle); - } - - @Deprecated - @Override - public void onNewToken(String token) { - Log.d(Tag.LOG_TAG, "HmsMessageServiceAppLevel onNewToken refresh token:" + token); - - // Forward event on to OneSignal SDK - OneSignalHmsEventBridge.INSTANCE.onNewToken(this, token); - } - - /** - * This method is called in the following cases: - * 1. "Data messages" - App process is alive when received. - * 2. "Notification Message" - foreground_show = false and app is in focus - * This method callback must be completed in 10 seconds. Start a new Job if more time is needed. - * - * @param message RemoteMessage - */ - @Override - public void onMessageReceived(RemoteMessage message) { - Log.d(Tag.LOG_TAG, "HMS onMessageReceived: " + message); - Log.d(Tag.LOG_TAG, "HMS onMessageReceived.ttl:" + message.getTtl()); - Log.d(Tag.LOG_TAG, "HMS onMessageReceived.data:" + message.getData()); - Log.d(Tag.LOG_TAG, "HMS onMessageReceived.title: " + message.getNotification().getTitle()); - Log.d(Tag.LOG_TAG, "HMS onMessageReceived.body: " + message.getNotification().getBody()); - Log.d(Tag.LOG_TAG, "HMS onMessageReceived.icon: " + message.getNotification().getIcon()); - Log.d(Tag.LOG_TAG, "HMS onMessageReceived.color: " + message.getNotification().getColor()); - Log.d(Tag.LOG_TAG, "HMS onMessageReceived.channelId: " + message.getNotification().getChannelId()); - Log.d(Tag.LOG_TAG, "HMS onMessageReceived.imageURL: " + message.getNotification().getImageUrl()); - Log.d(Tag.LOG_TAG, "HMS onMessageReceived.tag: " + message.getNotification().getTag()); - - // Forward event on to OneSignal SDK - OneSignalHmsEventBridge.INSTANCE.onMessageReceived(this, message); - } -} diff --git a/Examples/OneSignalDemo/app/src/main/assets/api_key.txt b/Examples/OneSignalDemo/app/src/main/assets/api_key.txt deleted file mode 100644 index 652febffec..0000000000 --- a/Examples/OneSignalDemo/app/src/main/assets/api_key.txt +++ /dev/null @@ -1,2 +0,0 @@ -Insert Amazon API Key here. -https://documentation.onesignal.com/docs/generate-an-amazon-api-key \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/assets/fonts/Sarala-Bold.ttf b/Examples/OneSignalDemo/app/src/main/assets/fonts/Sarala-Bold.ttf deleted file mode 100644 index f9c11ca794..0000000000 Binary files a/Examples/OneSignalDemo/app/src/main/assets/fonts/Sarala-Bold.ttf and /dev/null differ diff --git a/Examples/OneSignalDemo/app/src/main/assets/fonts/Sarala-Regular.ttf b/Examples/OneSignalDemo/app/src/main/assets/fonts/Sarala-Regular.ttf deleted file mode 100644 index df722b2ad3..0000000000 Binary files a/Examples/OneSignalDemo/app/src/main/assets/fonts/Sarala-Regular.ttf and /dev/null differ diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/activity/MainActivity.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/activity/MainActivity.java deleted file mode 100644 index 82f307615e..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/activity/MainActivity.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.onesignal.sdktest.activity; - -import android.os.Build; -import android.os.Bundle; - -import androidx.annotation.RequiresApi; -import androidx.appcompat.app.AppCompatActivity; - -import com.onesignal.OneSignal; -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.model.MainActivityViewModel; - -@RequiresApi(api = Build.VERSION_CODES.N) -public class MainActivity extends AppCompatActivity { - - private MainActivityViewModel viewModel; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.main_activity_layout); - - viewModel = new MainActivityViewModel(); - OneSignal.getNotifications().addPermissionObserver(viewModel); -// TODO("STILL SUPPORT?") -// OneSignal.addSubscriptionObserver(viewModel); -// OneSignal.addEmailSubscriptionObserver(viewModel); - viewModel.onActivityCreated(this) - .setupInterfaceElements(); - } - - @Override - public void onBackPressed() { - if (!viewModel.scrollToTopIfAvailable()) { - super.onBackPressed(); - overridePendingTransition(R.anim.fade_in, R.anim.fade_out); - } - } - - @Override - protected void onResume() { - super.onResume(); - - boolean hasConsent = OneSignal.getConsentGiven(); - if (hasConsent) - viewModel.setupLayout(); - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/activity/SecondaryActivity.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/activity/SecondaryActivity.java deleted file mode 100644 index da5f893a2d..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/activity/SecondaryActivity.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.onesignal.sdktest.activity; - -import androidx.appcompat.app.AppCompatActivity; - -import android.os.Bundle; - -import com.onesignal.sdktest.R; - -public class SecondaryActivity extends AppCompatActivity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_secondary); - } -} \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/activity/SplashActivity.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/activity/SplashActivity.java deleted file mode 100644 index 677be26ab5..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/activity/SplashActivity.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.onesignal.sdktest.activity; - -import android.os.Bundle; - -import androidx.appcompat.app.AppCompatActivity; - -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.model.SplashActivityViewModel; - -public class SplashActivity extends AppCompatActivity { - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.splash_activity_layout); - - new SplashActivityViewModel() - .onActivityCreated(this) - .setupInterfaceElements(); - } - - @Override - public void onBackPressed() { - super.onBackPressed(); - overridePendingTransition(R.anim.fade_in, R.anim.fade_out); - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/EnumSelectionRecyclerViewAdapter.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/EnumSelectionRecyclerViewAdapter.java deleted file mode 100644 index 4331ba050b..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/EnumSelectionRecyclerViewAdapter.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.onesignal.sdktest.adapter; - -import android.content.Context; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.callback.EnumSelectionCallback; -import com.onesignal.sdktest.util.Font; - -public class EnumSelectionRecyclerViewAdapter extends RecyclerView.Adapter { - - private Font font; - private LayoutInflater layoutInflater; - - private Context context; - private Object[] enums; - private EnumSelectionCallback callback; - - - public EnumSelectionRecyclerViewAdapter(Context context, Object[] enums, EnumSelectionCallback callback) { - this.context = context; - this.enums = enums; - this.callback = callback; - - this.font = new Font(context); - this.layoutInflater = LayoutInflater.from(context); - } - - - @Override - public int getItemViewType(int position) { - return 0; - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = layoutInflater.inflate(R.layout.enum_selection_recycler_view_item_layout, parent, false); - view.setHasTransientState(true); - return new EnumSelectionViewHolder(view); - } - - @Override - public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { - ((EnumSelectionViewHolder) holder).setData(position, enums[position].toString()); - } - - @Override - public int getItemCount() { - return enums.length; - } - - - public class EnumSelectionViewHolder extends RecyclerView.ViewHolder { - - private RelativeLayout enumRelativeLayout; - private TextView enumTextView; - - private String title; - - EnumSelectionViewHolder(View itemView) { - super(itemView); - - enumRelativeLayout = itemView.findViewById(R.id.enum_selection_recycler_view_item_relative_layout); - enumTextView = itemView.findViewById(R.id.enum_selection_recycler_view_item_text_view); - } - - private void setData(int position, String title) { - this.title = title; - populateInterfaceElements(position); - } - - private void populateInterfaceElements(int position) { - enumRelativeLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - callback.onSelection(title); - } - }); - - font.applyFont(enumTextView, font.saralaRegular); - enumTextView.setText(title); - } - - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/InAppMessageRecyclerViewAdapter.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/InAppMessageRecyclerViewAdapter.java deleted file mode 100644 index fe6884c1c2..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/InAppMessageRecyclerViewAdapter.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.onesignal.sdktest.adapter; - -import android.content.Context; -import android.graphics.Bitmap; -import android.os.Handler; -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.ProgressBar; -import android.widget.TextView; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.target.BitmapImageViewTarget; -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.type.InAppMessage; -import com.onesignal.sdktest.type.ToastType; -import com.onesignal.sdktest.util.Animate; -import com.onesignal.sdktest.util.Toaster; - -public class InAppMessageRecyclerViewAdapter extends RecyclerView.Adapter { - - private Animate animate; - private LayoutInflater layoutInflater; - private Toaster toaster; - - private Context context; - private InAppMessage[] inAppMessages; - - - public InAppMessageRecyclerViewAdapter(Context context, InAppMessage[] inAppMessages) { - this.context = context; - this.inAppMessages = inAppMessages; - - this.animate = new Animate(); - this.layoutInflater = LayoutInflater.from(context); - this.toaster = new Toaster(context); - } - - - @Override - public int getItemViewType(int position) { - return 0; - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = layoutInflater.inflate(R.layout.main_in_app_messages_recycler_view_item_layout, parent, false); - view.setHasTransientState(true); - return new InAppMessageViewHolder(view); - } - - @Override - public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { - ((InAppMessageViewHolder) holder).setData(position, inAppMessages[position]); - } - - @Override - public int getItemCount() { - return inAppMessages.length; - } - - - public class InAppMessageViewHolder extends RecyclerView.ViewHolder { - - private LinearLayout inAppMessageLinearLayout; - private ImageView inAppMessageImageView; - private ProgressBar inAppMessageProgressBar; - private TextView inAppMessageTextView; - - private InAppMessage inAppMessage; - - InAppMessageViewHolder(View itemView) { - super(itemView); - - inAppMessageLinearLayout = itemView.findViewById(R.id.in_app_message_recycler_view_item_linear_layout); - inAppMessageImageView = itemView.findViewById(R.id.in_app_message_recycler_view_item_image_view); - inAppMessageProgressBar = itemView.findViewById(R.id.in_app_message_recycler_view_item_progress_bar); - inAppMessageTextView = itemView.findViewById(R.id.in_app_message_recycler_view_item_text_view); - } - - private void setData(int position, InAppMessage inAppMessage) { - this.inAppMessage = inAppMessage; - populateInterfaceElements(position); - } - - private void populateInterfaceElements(int position) { - animate.toggleAnimationView(true, View.INVISIBLE, inAppMessageImageView, inAppMessageProgressBar); - - inAppMessageLinearLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - String message = "In-App Messaging Coming Soon..."; - toaster.makeCustomViewToast(message, ToastType.INFO); - } - }); - - inAppMessageTextView.setText(inAppMessage.getTitle()); - - Glide.with(context) - .asBitmap() - .load(inAppMessage.getIconUrl()) - .into(new BitmapImageViewTarget(inAppMessageImageView) { - @Override - protected void setResource(Bitmap resource) { - inAppMessageImageView.setImageBitmap(resource); - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - animate.toggleAnimationView(false, View.INVISIBLE, inAppMessageImageView, inAppMessageProgressBar); - } - }, 300); - } - }); - } - - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/NotificationRecyclerViewAdapter.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/NotificationRecyclerViewAdapter.java deleted file mode 100644 index b4cb9050f3..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/NotificationRecyclerViewAdapter.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.onesignal.sdktest.adapter; - -import android.content.Context; -import android.graphics.Bitmap; -import android.os.Handler; -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.ProgressBar; -import android.widget.TextView; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.target.BitmapImageViewTarget; -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.notification.OneSignalNotificationSender; -import com.onesignal.sdktest.type.Notification; -import com.onesignal.sdktest.util.Animate; - -public class NotificationRecyclerViewAdapter extends RecyclerView.Adapter { - - private Animate animate; - private LayoutInflater layoutInflater; - - private Context context; - private Notification[] notifications; - - - public NotificationRecyclerViewAdapter(Context context, Notification[] notifications) { - this.context = context; - this.notifications = notifications; - - this.animate = new Animate(); - this.layoutInflater = LayoutInflater.from(context); - } - - - @Override - public int getItemViewType(int position) { - return 0; - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = layoutInflater.inflate(R.layout.main_notifications_recycler_view_item_layout, parent, false); - view.setHasTransientState(true); - return new NotificationViewHolder(view); - } - - @Override - public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { - ((NotificationViewHolder) holder).setData(position, notifications[position]); - } - - @Override - public int getItemCount() { - return notifications.length; - } - - - public class NotificationViewHolder extends RecyclerView.ViewHolder { - - private LinearLayout notificationLinearLayout; - private ImageView notificationImageView; - private ProgressBar notificationProgressBar; - private TextView notificationTextView; - - private Notification notification; - - NotificationViewHolder(View itemView) { - super(itemView); - - notificationLinearLayout = itemView.findViewById(R.id.notification_recycler_view_item_linear_layout); - notificationImageView = itemView.findViewById(R.id.notification_recycler_view_item_image_view); - notificationProgressBar = itemView.findViewById(R.id.notification_recycler_view_item_progress_bar); - notificationTextView = itemView.findViewById(R.id.notification_recycler_view_item_text_view); - } - - private void setData(int position, Notification notification) { - this.notification = notification; - populateInterfaceElements(position); - } - - private void populateInterfaceElements(int position) { - animate.toggleAnimationView(true, View.INVISIBLE, notificationImageView, notificationProgressBar); - - notificationLinearLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - OneSignalNotificationSender.sendDeviceNotification(notification); - } - }); - - notificationTextView.setText(notification.getGroup()); - - Glide.with(context) - .asBitmap() - .load(notification.getIconUrl()) - .into(new BitmapImageViewTarget(notificationImageView) { - @Override - protected void setResource(Bitmap resource) { - notificationImageView.setImageBitmap(resource); - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - animate.toggleAnimationView(false, View.INVISIBLE, notificationImageView, notificationProgressBar); - } - }, 300); - } - }); - } - - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/PairRecyclerViewAdapter.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/PairRecyclerViewAdapter.java deleted file mode 100644 index 6315ba5b0d..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/PairRecyclerViewAdapter.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.onesignal.sdktest.adapter; - -import android.content.Context; -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.callback.PairItemActionCallback; -import com.onesignal.sdktest.util.Util; - -import java.util.ArrayList; -import java.util.Map; - -public class PairRecyclerViewAdapter extends RecyclerView.Adapter { - - private LayoutInflater layoutInflater; - - private Context context; - - private ArrayList tags; - private PairItemActionCallback callback; - - public PairRecyclerViewAdapter(Context context, ArrayList tags, PairItemActionCallback callback) { - this.context = context; - - this.tags = tags; - this.callback = callback; - - layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int position) { - View view = layoutInflater.inflate(R.layout.pair_recycler_view_item_layout, parent, false); - view.setHasTransientState(true); - return new PairViewHolder(view); - } - - @Override - public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { - ((PairViewHolder) holder).setData(position, tags.get(position)); - } - - @Override - public int getItemCount() { - return tags.size(); - } - - public class PairViewHolder extends RecyclerView.ViewHolder { - - private RelativeLayout pairRelativeLayout; - private TextView pairKeyTextView; - private TextView pairValueTextView; - - private Map.Entry pair; - - PairViewHolder(View itemView) { - super(itemView); - - pairRelativeLayout = itemView.findViewById(R.id.pair_recycler_view_item_relative_layout); - pairKeyTextView = itemView.findViewById(R.id.pair_recycler_view_item_key_text_view); - pairValueTextView = itemView.findViewById(R.id.pair_recycler_view_item_value_text_view); - } - - private void setData(int position, Map.Entry pair) { - this.pair = pair; - populateInterfaceElements(position); - } - - private void populateInterfaceElements(final int position) { - - pairKeyTextView.setText(pair.getKey().toString()); - - String value = pair.getValue().toString(); - - if (Util.isBoolean(value)) - value += " (bool)"; - else if (Util.isInteger(value)) - value += " (int)"; - else if (Util.isFloat(value)) - value += " (float)"; - else - value += " (str)"; - pairValueTextView.setText(value); - - pairRelativeLayout.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - callback.onLongClick(pair.getKey().toString()); - return false; - } - }); - - } - - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/SingleRecyclerViewAdapter.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/SingleRecyclerViewAdapter.java deleted file mode 100644 index 7cae936707..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/SingleRecyclerViewAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.onesignal.sdktest.adapter; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.callback.SingleItemActionCallback; -import com.onesignal.sdktest.util.Util; - -import java.util.ArrayList; - -public class SingleRecyclerViewAdapter extends RecyclerView.Adapter { - - private LayoutInflater layoutInflater; - - private Context context; - - private ArrayList values; - private SingleItemActionCallback callback; - - public SingleRecyclerViewAdapter(Context context, ArrayList values, SingleItemActionCallback callback) { - this.context = context; - - this.values = values; - this.callback = callback; - - layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int position) { - View view = layoutInflater.inflate(R.layout.single_recycler_view_item_layout, parent, false); - view.setHasTransientState(true); - return new SingleViewHolder(view); - } - - @Override - public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { - ((SingleViewHolder) holder).setData(position, values.get(position)); - } - - @Override - public int getItemCount() { - return values.size(); - } - - public class SingleViewHolder extends RecyclerView.ViewHolder { - - private RelativeLayout singleRelativeLayout; - private TextView singleTextView; - - private Object item; - - SingleViewHolder(View itemView) { - super(itemView); - - singleRelativeLayout = itemView.findViewById(R.id.single_recycler_view_item_relative_layout); - singleTextView = itemView.findViewById(R.id.single_recycler_view_item_text_view); - } - - private void setData(int position, Object item) { - this.item = item; - populateInterfaceElements(position); - } - - private void populateInterfaceElements(final int position) { - String value = item.toString(); - - if (Util.isBoolean(value)) - value += " (bool)"; - else if (Util.isInteger(value)) - value += " (int)"; - else if (Util.isFloat(value)) - value += " (float)"; - else - value += " (str)"; - singleTextView.setText(value); - - singleRelativeLayout.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - callback.onLongClick(item.toString()); - return false; - } - }); - - } - - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/SubscriptionRecyclerViewAdapter.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/SubscriptionRecyclerViewAdapter.java deleted file mode 100644 index c7a49f2645..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/SubscriptionRecyclerViewAdapter.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.onesignal.sdktest.adapter; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.callback.SingleItemActionCallback; -import com.onesignal.sdktest.callback.SubscriptionItemActionCallback; -import com.onesignal.user.subscriptions.IEmailSubscription; -import com.onesignal.user.subscriptions.ISmsSubscription; -import com.onesignal.user.subscriptions.ISubscription; - -import java.util.ArrayList; - -public class SubscriptionRecyclerViewAdapter extends RecyclerView.Adapter { - - private LayoutInflater layoutInflater; - - private Context context; - - private ArrayList subscriptions; - private SubscriptionItemActionCallback callback; - - public SubscriptionRecyclerViewAdapter(Context context, ArrayList subscriptions, SubscriptionItemActionCallback callback) { - this.context = context; - - this.subscriptions = subscriptions; - this.callback = callback; - - layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int position) { - View view = layoutInflater.inflate(R.layout.subscription_recycler_view_item_layout, parent, false); - view.setHasTransientState(true); - return new SubscriptionViewHolder(view); - } - - @Override - public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { - ((SubscriptionViewHolder) holder).setData(position, subscriptions.get(position)); - } - - @Override - public int getItemCount() { - return subscriptions.size(); - } - - public class SubscriptionViewHolder extends RecyclerView.ViewHolder { - - private LinearLayout singleLinearLayout; - private TextView idTextView; - private TextView addressTitleTextView; - private TextView addressTextView; - - private ISubscription item; - - SubscriptionViewHolder(View itemView) { - super(itemView); - - singleLinearLayout = itemView.findViewById(R.id.subscription_recycler_view_item_linear_layout); - idTextView = itemView.findViewById(R.id.subscription_recycler_view_item_id_text_view); - addressTitleTextView = itemView.findViewById(R.id.subscription_recycler_view_item_address_title_text_view); - addressTextView = itemView.findViewById(R.id.subscription_recycler_view_item_address_text_view); - } - - private void setData(int position, ISubscription item) { - this.item = item; - populateInterfaceElements(position); - } - - private void populateInterfaceElements(final int position) { - idTextView.setText(item.getId()); - - if(item instanceof IEmailSubscription) { - addressTitleTextView.setText(R.string.email_colon); - addressTextView.setText(((IEmailSubscription) item).getEmail()); - } - else if(item instanceof ISmsSubscription) { - addressTitleTextView.setText(R.string.sms_colon); - addressTextView.setText(((ISmsSubscription) item).getNumber()); - } - - singleLinearLayout.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - callback.onLongClick(item); - return false; - } - }); - - } - - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/application/MainApplication.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/application/MainApplication.java deleted file mode 100644 index df299d9e57..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/application/MainApplication.java +++ /dev/null @@ -1,155 +0,0 @@ -package com.onesignal.sdktest.application; - -import android.annotation.SuppressLint; -import android.os.StrictMode; -import android.util.Log; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.multidex.MultiDexApplication; - -import com.onesignal.Continue; -import com.onesignal.OneSignal; -import com.onesignal.inAppMessages.IInAppMessageClickListener; -import com.onesignal.inAppMessages.IInAppMessageClickEvent; -import com.onesignal.inAppMessages.IInAppMessageDidDismissEvent; -import com.onesignal.inAppMessages.IInAppMessageDidDisplayEvent; -import com.onesignal.inAppMessages.IInAppMessageLifecycleListener; -import com.onesignal.debug.LogLevel; -import com.onesignal.inAppMessages.IInAppMessageWillDismissEvent; -import com.onesignal.inAppMessages.IInAppMessageWillDisplayEvent; -import com.onesignal.notifications.IDisplayableNotification; -import com.onesignal.notifications.INotificationLifecycleListener; -import com.onesignal.notifications.INotificationWillDisplayEvent; -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.constant.Tag; -import com.onesignal.sdktest.constant.Text; -import com.onesignal.sdktest.notification.OneSignalNotificationSender; -import com.onesignal.sdktest.util.SharedPreferenceUtil; -import com.onesignal.user.state.IUserStateObserver; -import com.onesignal.user.state.UserChangedState; -import com.onesignal.user.state.UserState; -import org.json.JSONObject; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -/** - * This Java implementation is not used any more. Use {@link MainApplicationKT} instead. - * The Kotlin version provides better async handling and modern coroutines support. - * - */ -public class MainApplication extends MultiDexApplication { - private static final int SLEEP_TIME_TO_MIMIC_ASYNC_OPERATION = 2000; - - public MainApplication() { - // run strict mode to surface any potential issues easier - StrictMode.enableDefaults(); - Log.w(Tag.LOG_TAG, "MainApplication (Java) is deprecated. Please use MainApplicationKT (Kotlin) instead."); - } - - @SuppressLint("NewApi") - @Override - public void onCreate() { - super.onCreate(); - Log.w(Tag.LOG_TAG, "DEPRECATED: Using MainApplication (Java). Please migrate to MainApplicationKT (Kotlin) for better async support."); - - OneSignal.getDebug().setLogLevel(LogLevel.DEBUG); - - // OneSignal Initialization - String appId = SharedPreferenceUtil.getOneSignalAppId(this); - // If cached app id is null use the default, otherwise use cached. - if (appId == null) { - appId = getString(R.string.onesignal_app_id); - SharedPreferenceUtil.cacheOneSignalAppId(this, appId); - } - - OneSignalNotificationSender.setAppId(appId); - - OneSignal.initWithContext(this, appId); - - // Ensure calling requestPermission in a thread right after initWithContext does not crash - // This will reproduce result similar to Kotlin CouroutineScope.launch{}, which may potentially crash the app - ExecutorService executor = Executors.newSingleThreadExecutor(); - @SuppressLint({"NewApi", "LocalSuppress"}) CompletableFuture future = CompletableFuture.runAsync(() -> { - OneSignal.getNotifications().requestPermission(true, Continue.none()); - }, executor); - future.join(); // Waits for the task to complete - executor.shutdown(); - - OneSignal.getInAppMessages().addLifecycleListener(new IInAppMessageLifecycleListener() { - @Override - public void onWillDisplay(@NonNull IInAppMessageWillDisplayEvent event) { - Log.v(Tag.LOG_TAG, "onWillDisplayInAppMessage"); - } - - @Override - public void onDidDisplay(@NonNull IInAppMessageDidDisplayEvent event) { - Log.v(Tag.LOG_TAG, "onDidDisplayInAppMessage"); - } - - @Override - public void onWillDismiss(@NonNull IInAppMessageWillDismissEvent event) { - Log.v(Tag.LOG_TAG, "onWillDismissInAppMessage"); - } - - @Override - public void onDidDismiss(@NonNull IInAppMessageDidDismissEvent event) { - Log.v(Tag.LOG_TAG, "onDidDismissInAppMessage"); - } - }); - - OneSignal.getInAppMessages().addClickListener(new IInAppMessageClickListener() { - @Override - public void onClick(@Nullable IInAppMessageClickEvent event) { - Log.v(Tag.LOG_TAG, "INotificationClickListener.inAppMessageClicked"); - } - }); - - OneSignal.getNotifications().addClickListener(event -> - { - Log.v(Tag.LOG_TAG, "INotificationClickListener.onClick fired" + - " with event: " + event); - }); - - OneSignal.getNotifications().addForegroundLifecycleListener(new INotificationLifecycleListener() { - @Override - public void onWillDisplay(@NonNull INotificationWillDisplayEvent event) { - Log.v(Tag.LOG_TAG, "INotificationLifecycleListener.onWillDisplay fired" + - " with event: " + event); - - IDisplayableNotification notification = event.getNotification(); - JSONObject data = notification.getAdditionalData(); - - //Prevent OneSignal from displaying the notification immediately on return. Spin - //up a new thread to mimic some asynchronous behavior, when the async behavior (which - //takes 2 seconds) completes, then the notification can be displayed. - event.preventDefault(); - Runnable r = () -> { - try { - Thread.sleep(SLEEP_TIME_TO_MIMIC_ASYNC_OPERATION); - } catch (InterruptedException ignored) { - } - - notification.display(); - }; - - Thread t = new Thread(r); - t.start(); - } - }); - - OneSignal.getUser().addObserver(new IUserStateObserver() { - @Override - public void onUserStateChange(@NonNull UserChangedState state) { - UserState currentUserState = state.getCurrent(); - Log.v(Tag.LOG_TAG, "onUserStateChange fired " + currentUserState.toJSONObject()); - } - }); - - OneSignal.getInAppMessages().setPaused(true); - OneSignal.getLocation().setShared(false); - - Log.d(Tag.LOG_TAG, Text.ONESIGNAL_SDK_INIT); - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/application/MainApplicationKT.kt b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/application/MainApplicationKT.kt deleted file mode 100644 index c9c61be6a5..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/application/MainApplicationKT.kt +++ /dev/null @@ -1,157 +0,0 @@ -package com.onesignal.sdktest.application - -/** - * Modern Kotlin implementation of MainApplication. - * - * This replaces the deprecated MainApplication.java with: - * - Better async handling using Kotlin Coroutines - * - Modern OneSignal API usage - * - Cleaner code structure - * - Proper ANR prevention - * - * @see MainApplication.java (deprecated Java version) - */ -import android.annotation.SuppressLint -import android.os.StrictMode -import android.util.Log -import androidx.annotation.NonNull -import androidx.multidex.MultiDexApplication -import com.onesignal.OneSignal -import com.onesignal.debug.LogLevel -import com.onesignal.inAppMessages.IInAppMessageClickEvent -import com.onesignal.inAppMessages.IInAppMessageClickListener -import com.onesignal.inAppMessages.IInAppMessageDidDismissEvent -import com.onesignal.inAppMessages.IInAppMessageDidDisplayEvent -import com.onesignal.inAppMessages.IInAppMessageLifecycleListener -import com.onesignal.inAppMessages.IInAppMessageWillDismissEvent -import com.onesignal.inAppMessages.IInAppMessageWillDisplayEvent -import com.onesignal.notifications.IDisplayableNotification -import com.onesignal.notifications.INotificationClickEvent -import com.onesignal.notifications.INotificationClickListener -import com.onesignal.notifications.INotificationLifecycleListener -import com.onesignal.notifications.INotificationWillDisplayEvent -import com.onesignal.sdktest.R -import com.onesignal.sdktest.constant.Tag -import com.onesignal.sdktest.constant.Text -import com.onesignal.sdktest.notification.OneSignalNotificationSender -import com.onesignal.sdktest.util.SharedPreferenceUtil -import com.onesignal.user.state.IUserStateObserver -import com.onesignal.user.state.UserChangedState -import com.onesignal.user.state.UserState -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.SupervisorJob -import kotlinx.coroutines.launch - -class MainApplicationKT : MultiDexApplication() { - - private val applicationScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) - - init { - // run strict mode to surface any potential issues easier - StrictMode.enableDefaults() - } - - @SuppressLint("NewApi") - override fun onCreate() { - super.onCreate() - OneSignal.Debug.logLevel = LogLevel.DEBUG - - // OneSignal Initialization - var appId = SharedPreferenceUtil.getOneSignalAppId(this) - // If cached app id is null use the default, otherwise use cached. - if (appId == null) { - appId = getString(R.string.onesignal_app_id) - SharedPreferenceUtil.cacheOneSignalAppId(this, appId) - } - - OneSignalNotificationSender.setAppId(appId) - - // Initialize OneSignal asynchronously on background thread to avoid ANR - applicationScope.launch { - OneSignal.initWithContextSuspend(this@MainApplicationKT, appId) - Log.d(Tag.LOG_TAG, "OneSignal async init completed") - - // Set up all OneSignal listeners after successful async initialization - setupOneSignalListeners() - - // Request permission - this will internally switch to Main thread for UI operations - // Even though the MainActivity comes on top of this, we can still request permission by tapping the prompt push button. - OneSignal.Notifications.requestPermission(true) - - Log.d(Tag.LOG_TAG, Text.ONESIGNAL_SDK_INIT) - } - } - - private fun setupOneSignalListeners() { - OneSignal.InAppMessages.addLifecycleListener(object : IInAppMessageLifecycleListener { - override fun onWillDisplay(@NonNull event: IInAppMessageWillDisplayEvent) { - Log.v(Tag.LOG_TAG, "onWillDisplayInAppMessage") - } - - override fun onDidDisplay(@NonNull event: IInAppMessageDidDisplayEvent) { - Log.v(Tag.LOG_TAG, "onDidDisplayInAppMessage") - } - - override fun onWillDismiss(@NonNull event: IInAppMessageWillDismissEvent) { - Log.v(Tag.LOG_TAG, "onWillDismissInAppMessage") - } - - override fun onDidDismiss(@NonNull event: IInAppMessageDidDismissEvent) { - Log.v(Tag.LOG_TAG, "onDidDismissInAppMessage") - } - }) - - OneSignal.InAppMessages.addClickListener(object : IInAppMessageClickListener { - override fun onClick(event: IInAppMessageClickEvent) { - Log.v(Tag.LOG_TAG, "INotificationClickListener.inAppMessageClicked") - } - }) - - OneSignal.Notifications.addClickListener(object : INotificationClickListener { - override fun onClick(event: INotificationClickEvent) { - Log.v(Tag.LOG_TAG, "INotificationClickListener.onClick fired" + - " with event: " + event) - } - }) - - OneSignal.Notifications.addForegroundLifecycleListener(object : INotificationLifecycleListener { - override fun onWillDisplay(@NonNull event: INotificationWillDisplayEvent) { - Log.v(Tag.LOG_TAG, "INotificationLifecycleListener.onWillDisplay fired" + - " with event: " + event) - - val notification: IDisplayableNotification = event.notification - - //Prevent OneSignal from displaying the notification immediately on return. Spin - //up a new thread to mimic some asynchronous behavior, when the async behavior (which - //takes 2 seconds) completes, then the notification can be displayed. - event.preventDefault() - val r = Runnable { - try { - Thread.sleep(SLEEP_TIME_TO_MIMIC_ASYNC_OPERATION.toLong()) - } catch (ignored: InterruptedException) { - } - - notification.display() - } - - val t = Thread(r) - t.start() - } - }) - - OneSignal.User.addObserver(object : IUserStateObserver { - override fun onUserStateChange(@NonNull state: UserChangedState) { - val currentUserState: UserState = state.current - Log.v(Tag.LOG_TAG, "onUserStateChange fired " + currentUserState.toJSONObject()) - } - }) - - OneSignal.InAppMessages.paused = true - OneSignal.Location.isShared = false - } - - companion object { - private const val SLEEP_TIME_TO_MIMIC_ASYNC_OPERATION = 2000 - } -} \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/AddPairAlertDialogCallback.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/AddPairAlertDialogCallback.java deleted file mode 100644 index cb836c7bcc..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/AddPairAlertDialogCallback.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.onesignal.sdktest.callback; - -import android.util.Pair; - -public interface AddPairAlertDialogCallback { - - void onSuccess(Pair pair); - void onFailure(); - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/EnumSelectionCallback.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/EnumSelectionCallback.java deleted file mode 100644 index c65dc236d1..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/EnumSelectionCallback.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.onesignal.sdktest.callback; - -public interface EnumSelectionCallback { - - void onSelection(String title); - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/PairItemActionCallback.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/PairItemActionCallback.java deleted file mode 100644 index 57a9aacb51..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/PairItemActionCallback.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.onesignal.sdktest.callback; - -public interface PairItemActionCallback { - - void onLongClick(String key); - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SendOutcomeAlertDialogCallback.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SendOutcomeAlertDialogCallback.java deleted file mode 100644 index e66ef198e7..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SendOutcomeAlertDialogCallback.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.onesignal.sdktest.callback; - -import com.onesignal.sdktest.type.OutcomeEvent; - -public interface SendOutcomeAlertDialogCallback { - - boolean onSuccess(OutcomeEvent outcomeEvent, String name, String value); - void onFailure(); - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SingleItemActionCallback.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SingleItemActionCallback.java deleted file mode 100644 index ea38662efc..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SingleItemActionCallback.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.onesignal.sdktest.callback; - -public interface SingleItemActionCallback { - - void onLongClick(String value); - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SubscriptionItemActionCallback.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SubscriptionItemActionCallback.java deleted file mode 100644 index 579faaa25b..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SubscriptionItemActionCallback.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.onesignal.sdktest.callback; - -import com.onesignal.user.subscriptions.ISubscription; - -public interface SubscriptionItemActionCallback { - - void onLongClick(ISubscription value); - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/UpdateAlertDialogCallback.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/UpdateAlertDialogCallback.java deleted file mode 100644 index e48c58618c..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/UpdateAlertDialogCallback.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.onesignal.sdktest.callback; - -public interface UpdateAlertDialogCallback { - - void onSuccess(String update); - void onFailure(); - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/constant/Tag.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/constant/Tag.java deleted file mode 100644 index 927df53e4f..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/constant/Tag.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.onesignal.sdktest.constant; - -public class Tag { - public static final String LOG_TAG = "sdktest"; -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/constant/Text.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/constant/Text.java deleted file mode 100644 index b3e7344f7d..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/constant/Text.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.onesignal.sdktest.constant; - -public class Text { - - public static final String EMPTY = ""; - - public static final String ONESIGNAL_SDK_INIT = "OneSignal SDK initialized"; - public static final String PRIVACY_CONSENT_REQUIRED_SET = "Privacy consent required set"; - - public static final String APP_ID_IS_REQUIRED = "App id is required"; - public static final String INVALID_APP_ID = "Invalid app id"; - - public static final String ALIAS_LABEL_IS_REQUIRED = "Alias label is required"; - - public static final String EMAIL_IS_REQUIRED = "Email is required"; - public static final String INVALID_EMAIL = "Invalid email"; - - public static final String SMS_IS_REQUIRED = "SMS number is required"; - - public static final String EXTERNAL_USER_ID_IS_REQUIRED = "External user id is required"; - - public static final String KEY_IS_REQUIRED = "Key is required"; - - public static final String ERROR = "Error"; - - public static final String BUTTON_ADD = "ADD"; - public static final String BUTTON_SEND = "SEND"; - public static final String BUTTON_UPDATE = "UPDATE"; - public static final String BUTTON_LOGIN = "LOGIN"; - - public static final String BUTTON_CANCEL = "CANCEL"; -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/ActivityViewModel.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/ActivityViewModel.java deleted file mode 100644 index 8aeb6fcbd3..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/ActivityViewModel.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.onesignal.sdktest.model; - -import android.app.Activity; -import android.content.Context; -import androidx.appcompat.app.AppCompatActivity; - -import com.onesignal.notifications.IPermissionObserver; - -/** - * This is the interface created with a few generic methods for setting a ViewModel - * as the responsible guardian of an Activity - */ -public interface ActivityViewModel extends IPermissionObserver { - - /** - * Casts Context of the given Activity to an Activity object - * @return - Activity used to get to specific methods to the Activity - */ - Activity getActivity(); - - /** - * Casts Context of the given Activity to an AppCompatActivity object - * @return - AppCompatActivity used to get to specific methods to the Activity - */ - AppCompatActivity getAppCompatActivity(); - - /** - * Context is passed in and used to define all of the ui elements across the activity - * and initialize any other objects that may be used through out the activity - * @param context - Context context of the given Activity being setup - * @return - ViewModel implementing the ActivityViewModel - */ - ActivityViewModel onActivityCreated(Context context); - - /** - * This method is for calling any setup methods and applying any fonts - * Called at the end of onCreate strung after onActivityCreated is called - * @return - ViewModel implementing the ActivityViewModel - */ - ActivityViewModel setupInterfaceElements(); - - /** - * Some Activities use a Toolbar and this is a generic method for setting it, design it, and controlling it - * If it is not used, it will be left empty - */ - void setupToolbar(); - - /** - * Methods for handling network connected and disconnected states - */ - void networkConnected(); - void networkDisconnected(); - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/MainActivityViewModel.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/MainActivityViewModel.java deleted file mode 100644 index c88c630dc6..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/MainActivityViewModel.java +++ /dev/null @@ -1,937 +0,0 @@ -package com.onesignal.sdktest.model; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.content.Context; -import com.google.android.material.appbar.AppBarLayout; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; -import androidx.core.widget.NestedScrollView; -import androidx.appcompat.app.AppCompatActivity; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import androidx.appcompat.widget.Toolbar; -import android.content.Intent; -import android.os.Build; -import android.util.Pair; -import android.view.View; -import android.view.ViewTreeObserver; -import android.widget.Button; -import android.widget.LinearLayout; -import android.widget.RelativeLayout; -import android.widget.Switch; -import android.widget.TextView; -import com.onesignal.Continue; -import com.onesignal.OneSignal; -import com.onesignal.sdktest.adapter.SubscriptionRecyclerViewAdapter; -import com.onesignal.user.subscriptions.IPushSubscription; -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.activity.SecondaryActivity; -import com.onesignal.sdktest.adapter.InAppMessageRecyclerViewAdapter; -import com.onesignal.sdktest.adapter.NotificationRecyclerViewAdapter; -import com.onesignal.sdktest.adapter.PairRecyclerViewAdapter; -import com.onesignal.sdktest.callback.AddPairAlertDialogCallback; -import com.onesignal.sdktest.callback.PairItemActionCallback; -import com.onesignal.sdktest.callback.SendOutcomeAlertDialogCallback; -import com.onesignal.sdktest.callback.UpdateAlertDialogCallback; -import com.onesignal.sdktest.constant.Text; -import com.onesignal.sdktest.type.InAppMessage; -import com.onesignal.sdktest.type.Notification; -import com.onesignal.sdktest.type.OutcomeEvent; -import com.onesignal.sdktest.type.ToastType; -import com.onesignal.sdktest.ui.RecyclerViewBuilder; -import com.onesignal.sdktest.util.Animate; -import com.onesignal.sdktest.util.Dialog; -import com.onesignal.sdktest.util.Font; -import com.onesignal.sdktest.util.IntentTo; -import com.onesignal.sdktest.util.SharedPreferenceUtil; -import com.onesignal.sdktest.util.ProfileUtil; -import com.onesignal.sdktest.util.Toaster; -import com.onesignal.user.subscriptions.ISubscription; -import com.onesignal.user.subscriptions.IPushSubscriptionObserver; -import com.onesignal.user.subscriptions.PushSubscriptionChangedState; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -@RequiresApi(api = Build.VERSION_CODES.N) -public class MainActivityViewModel implements ActivityViewModel, IPushSubscriptionObserver { - - private Animate animate; - private Dialog dialog; - private Font font; - private IntentTo intentTo; - private RecyclerViewBuilder recyclerViewBuilder; - private Toaster toaster; - - private AppBarLayout appBarLayout; - private Toolbar toolbar; - private LinearLayout privacyConsentLinearLayout; - private NestedScrollView nestedScrollView; - - // Privacy Consent - private TextView privacyConsentTitleTextView; - private TextView privacyConsentDescriptionTextView; - private Button privacyConsentAllowButton; - - // App - private TextView appTitleTextView; - private RelativeLayout appIdRelativeLayout; - private TextView appIdTitleTextView; - private TextView appIdTextView; - private Button loginUserButton; - private Button logoutUserButton; - - // Alias - private TextView aliasTitleTextView; - private RecyclerView aliasesRecyclerView; - private PairRecyclerViewAdapter aliasesRecyclerViewAdapter; - private TextView noAliasesTextView; - private Button addAliasButton; - - // Email - private TextView emailHeaderTextView; - private TextView noEmailsTextView; - private Button addEmailButton; - - // SMS - private TextView smsHeaderTextView; - private TextView noSmssTextView; - private Button addSMSButton; - - // Tags - private TextView tagsTitleTextView; - private TextView noTagsTextView; - private RecyclerView tagsRecyclerView; - private PairRecyclerViewAdapter tagPairRecyclerViewAdapter; - - private RecyclerView emailsRecyclerView; - private SubscriptionRecyclerViewAdapter emailsRecyclerViewAdapter; - private RecyclerView smssRecyclerView; - private SubscriptionRecyclerViewAdapter smssRecyclerViewAdapter; - - private Button addTagButton; - - // Notification Demo - private TextView pushNotificationTitleTextView; - private TextView sendPushNotificationTitleTextView; - private RecyclerView pushNotificationRecyclerView; - private NotificationRecyclerViewAdapter pushNotificationRecyclerViewAdapter; - - // Outcomes - private TextView outcomeTitleTextView; - private Button sendOutcomeButton; - - // Triggers - private TextView triggersTitleTextView; - private TextView noTriggersTextView; - private RecyclerView triggersRecyclerView; - private PairRecyclerViewAdapter triggerPairRecyclerViewAdapter; - private Button addTriggerButton; - - // In App Messaging Demo - private TextView inAppMessagingTitleTextView; - private TextView sendInAppMessagingTitleTextView; - private RecyclerView inAppMessagingRecyclerView; - private InAppMessageRecyclerViewAdapter inAppMessagingRecyclerViewAdapter; - - // Location - private TextView locationTitleTextView; - private RelativeLayout locationSharedRelativeLayout; - private TextView locationSharedTextView; - private TextView locationSharedDescriptionTextView; - private Switch locationSharedSwitch; - private Button promptLocationButton; - - // Push - private TextView pushSubscriptionIdTitleTextView; - private TextView pushSubscriptionIdTextView; - private RelativeLayout pushSubscriptionEnabledRelativeLayout; - private TextView pushSubscriptionEnabledTitleTextView; - private Switch pushSubscriptionEnabledSwitch; - private LinearLayout promptPushBottonLayout; - private Button promptPushButton; - private RelativeLayout pauseInAppMessagesRelativeLayout; - private TextView pauseInAppMessagesTextView; - private TextView pauseInAppMessagesDescriptionTextView; - private Switch pauseInAppMessagesSwitch; - private Button revokeConsentButton; - - private boolean shouldScrollTop = false; - - private Context context; - - private HashMap aliasSet; - private ArrayList aliasArrayList; - private ArrayList emailArrayList; - private ArrayList smsArrayList; - - private HashMap tagSet; - private ArrayList tagArrayList; - - private HashMap triggerSet; - private ArrayList triggerArrayList; - - @Override - public Activity getActivity() { - return (Activity) context; - } - - @Override - public AppCompatActivity getAppCompatActivity() { - return (AppCompatActivity) context; - } - - @Override - public ActivityViewModel onActivityCreated(Context context) { - this.context = context; - - animate = new Animate(); - dialog = new Dialog(context); - font = new Font(context); - intentTo = new IntentTo(context); - recyclerViewBuilder = new RecyclerViewBuilder(context); - toaster = new Toaster(context); - - appBarLayout = getActivity().findViewById(R.id.main_activity_app_bar_layout); - toolbar = getActivity().findViewById(R.id.main_activity_toolbar); - privacyConsentLinearLayout = getActivity().findViewById(R.id.main_activity_privacy_consent_linear_layout); - nestedScrollView = getActivity().findViewById(R.id.main_activity_nested_scroll_view); - - privacyConsentTitleTextView = getActivity().findViewById(R.id.main_activity_privacy_consent_title_text_view); - privacyConsentDescriptionTextView = getActivity().findViewById(R.id.main_activity_privacy_consent_description_text_view); - privacyConsentAllowButton = getActivity().findViewById(R.id.main_activity_privacy_consent_allow_button); - - appTitleTextView = getActivity().findViewById(R.id.main_activity_account_title_text_view); - appIdRelativeLayout = getActivity().findViewById(R.id.main_activity_account_details_app_id_relative_layout); - appIdTitleTextView = getActivity().findViewById(R.id.main_activity_account_details_app_id_title_text_view); - appIdTextView = getActivity().findViewById(R.id.main_activity_account_details_app_id_text_view); - revokeConsentButton = getActivity().findViewById(R.id.main_activity_app_revoke_consent_button); - loginUserButton = getActivity().findViewById(R.id.main_activity_login_user_button); - logoutUserButton = getActivity().findViewById(R.id.main_activity_logout_user_button); - - aliasTitleTextView = getActivity().findViewById(R.id.main_activity_aliases_title_text_view); - noAliasesTextView = getActivity().findViewById(R.id.main_activity_aliases_no_aliases_text_view); - addAliasButton = getActivity().findViewById(R.id.main_activity_add_alias_button); - aliasesRecyclerView = getActivity().findViewById(R.id.main_activity_aliases_recycler_view); - - emailHeaderTextView = getActivity().findViewById(R.id.main_activity_email_title_text_view); - noEmailsTextView = getActivity().findViewById(R.id.main_activity_emails_no_emails_text_view); - addEmailButton = getActivity().findViewById(R.id.main_activity_add_email_button); - emailsRecyclerView = getActivity().findViewById(R.id.main_activity_emails_recycler_view); - - smsHeaderTextView = getActivity().findViewById(R.id.main_activity_sms_title_text_view); - noSmssTextView = getActivity().findViewById(R.id.main_activity_smss_no_smss_text_view); - addSMSButton = getActivity().findViewById(R.id.main_activity_add_sms_button); - smssRecyclerView = getActivity().findViewById(R.id.main_activity_smss_recycler_view); - - tagsTitleTextView = getActivity().findViewById(R.id.main_activity_tags_title_text_view); - noTagsTextView = getActivity().findViewById(R.id.main_activity_tags_no_tags_text_view); - tagsRecyclerView = getActivity().findViewById(R.id.main_activity_tags_recycler_view); - addTagButton = getActivity().findViewById(R.id.main_activity_add_tags_button); - - pushNotificationTitleTextView = getActivity().findViewById(R.id.main_activity_push_notification_title_text_view); - sendPushNotificationTitleTextView= getActivity().findViewById(R.id.main_activity_send_push_notification_title_text_view); - pushNotificationRecyclerView = getActivity().findViewById(R.id.main_activity_push_notification_recycler_view); - - outcomeTitleTextView = getActivity().findViewById(R.id.main_activity_outcomes_title_text_view); - sendOutcomeButton = getActivity().findViewById(R.id.main_activity_outcomes_send_outcome_button); - - triggersTitleTextView = getActivity().findViewById(R.id.main_activity_in_app_messages_triggers_title_text_view); - noTriggersTextView = getActivity().findViewById(R.id.main_activity_in_app_messages_triggers_no_triggers_text_view); - triggersRecyclerView = getActivity().findViewById(R.id.main_activity_in_app_messages_triggers_recycler_view); - addTriggerButton = getActivity().findViewById(R.id.main_activity_add_triggers_button); - - inAppMessagingTitleTextView = getActivity().findViewById(R.id.main_activity_in_app_messaging_title_text_view); - sendInAppMessagingTitleTextView = getActivity().findViewById(R.id.main_activity_send_in_app_messaging_title_text_view); - inAppMessagingRecyclerView = getActivity().findViewById(R.id.main_activity_in_app_messaging_recycler_view); - - locationTitleTextView = getActivity().findViewById(R.id.main_activity_location_title_text_view); - locationSharedRelativeLayout = getActivity().findViewById(R.id.main_activity_location_shared_relative_layout); - locationSharedTextView = getActivity().findViewById(R.id.main_activity_location_shared_text_view); - locationSharedDescriptionTextView = getActivity().findViewById(R.id.main_activity_location_shared_info_text_view); - locationSharedSwitch = getActivity().findViewById(R.id.main_activity_location_shared_switch); - promptLocationButton = getActivity().findViewById(R.id.main_activity_location_prompt_location_button); - - pushSubscriptionEnabledRelativeLayout = getActivity().findViewById(R.id.main_activity_push_subscription_relative_layout); - pushSubscriptionEnabledTitleTextView = getActivity().findViewById(R.id.main_activity_push_subscription_info_text_view); - pushSubscriptionIdTitleTextView = getActivity().findViewById(R.id.main_activity_push_subscription_id_title_text_view); - pushSubscriptionIdTextView = getActivity().findViewById(R.id.main_activity_push_subscription_id_text_view); - pushSubscriptionEnabledSwitch = getActivity().findViewById(R.id.main_activity_push_subscription_switch); - - promptPushBottonLayout = getActivity().findViewById(R.id.main_activity_push_prompt_layout); - promptPushButton = getActivity().findViewById(R.id.main_activity_push_prompt_push_button); - - pauseInAppMessagesRelativeLayout = getActivity().findViewById(R.id.main_activity_iam_pause_in_app_messages_relative_layout); - pauseInAppMessagesTextView = getActivity().findViewById(R.id.main_activity_iam_pause_in_app_messages_text_view); - pauseInAppMessagesDescriptionTextView = getActivity().findViewById(R.id.main_activity_iam_pause_in_app_messages_info_text_view); - pauseInAppMessagesSwitch = getActivity().findViewById(R.id.main_activity_iam_pause_in_app_messages_switch); - - Button navigateNextActivity = getActivity().findViewById(R.id.main_activity_navigate_button); - navigateNextActivity.setOnClickListener(v -> { - getActivity().startActivity(new Intent(getActivity(), SecondaryActivity.class)); - }); - - aliasSet = new HashMap<>(); - aliasArrayList = new ArrayList<>(); - - emailArrayList = new ArrayList<>(); - smsArrayList = new ArrayList<>(); - - tagSet = new HashMap<>(); - tagArrayList = new ArrayList<>(); - - triggerSet = new HashMap<>(); - triggerArrayList = new ArrayList<>(); - - OneSignal.getUser().getPushSubscription().addObserver(this); - return this; - } - - @Override - public ActivityViewModel setupInterfaceElements() { - font.applyFont(appTitleTextView, font.saralaBold); - font.applyFont(privacyConsentTitleTextView, font.saralaBold); - font.applyFont(privacyConsentDescriptionTextView, font.saralaRegular); - font.applyFont(privacyConsentAllowButton, font.saralaBold); - font.applyFont(appIdTitleTextView, font.saralaBold); - font.applyFont(appIdTextView, font.saralaRegular); - font.applyFont(loginUserButton, font.saralaBold); - font.applyFont(logoutUserButton, font.saralaBold); - font.applyFont(aliasTitleTextView, font.saralaBold); - font.applyFont(noAliasesTextView, font.saralaBold); - font.applyFont(emailHeaderTextView, font.saralaBold); - font.applyFont(noEmailsTextView, font.saralaBold); - font.applyFont(smsHeaderTextView, font.saralaBold); - font.applyFont(noSmssTextView, font.saralaBold); - font.applyFont(tagsTitleTextView, font.saralaBold); - font.applyFont(noTagsTextView, font.saralaBold); - font.applyFont(addTagButton, font.saralaBold); - font.applyFont(pushNotificationTitleTextView, font.saralaBold); - font.applyFont(sendPushNotificationTitleTextView, font.saralaBold); - font.applyFont(outcomeTitleTextView, font.saralaBold); - font.applyFont(sendOutcomeButton, font.saralaBold); - font.applyFont(triggersTitleTextView, font.saralaBold); - font.applyFont(noTriggersTextView, font.saralaBold); - font.applyFont(addTriggerButton, font.saralaBold); - font.applyFont(inAppMessagingTitleTextView, font.saralaBold); - font.applyFont(sendInAppMessagingTitleTextView, font.saralaBold); - font.applyFont(locationTitleTextView, font.saralaBold); - font.applyFont(locationSharedTextView, font.saralaBold); - font.applyFont(locationSharedDescriptionTextView, font.saralaRegular); - font.applyFont(promptLocationButton, font.saralaBold); - font.applyFont(promptPushButton, font.saralaBold); - font.applyFont(pushSubscriptionEnabledTitleTextView, font.saralaBold); - font.applyFont(pushSubscriptionIdTitleTextView, font.saralaBold); - font.applyFont(pauseInAppMessagesTextView, font.saralaBold); - font.applyFont(pauseInAppMessagesDescriptionTextView, font.saralaRegular); - font.applyFont(revokeConsentButton, font.saralaBold); - - boolean hasConsent = SharedPreferenceUtil.getUserPrivacyConsent(context); - setupConsentLayout(hasConsent); - - if (hasConsent) - postPrivacyConsentSetup(); - - return this; - } - - @Override - public void setupToolbar() { - toolbar.setTitle(Text.EMPTY); - getAppCompatActivity().setSupportActionBar(toolbar); - } - - @Override - public void networkConnected() { - - } - - @Override - public void networkDisconnected() { - - } - - @Override - public void onNotificationPermissionChange(@Nullable boolean permission) { - refreshSubscriptionState(); - } - - private void setupConsentLayout(boolean hasConsent) { - int consentVisibility = hasConsent ? View.GONE : View.VISIBLE; - int scrollVisibility = hasConsent ? View.VISIBLE : View.GONE; - privacyConsentLinearLayout.setVisibility(consentVisibility); - nestedScrollView.setVisibility(scrollVisibility); - appBarLayout.setExpanded(true); - - privacyConsentAllowButton.setOnClickListener(v -> { - togglePrivacyConsent(true); - postPrivacyConsentSetup(); - }); - } - - private void postPrivacyConsentSetup() { - setupLayout(); - refreshState(); - } - - public void setupLayout() { - setupScrollView(); - setupAppLayout(); - setupUserLayout(); - setupLocationLayout(); - setupPushNotificationLayout(); - setupInAppMessagingLayout(); - } - - private void setupScrollView() { - nestedScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { - @Override - public void onScrollChanged() { - int scrollY = nestedScrollView.getScrollY(); - shouldScrollTop = scrollY != 0; - } - }); - } - - private void setupAppLayout() { - revokeConsentButton.setOnClickListener(v -> togglePrivacyConsent(false)); - - loginUserButton.setOnClickListener(v -> { - dialog.createUpdateAlertDialog("", Dialog.DialogAction.LOGIN, ProfileUtil.FieldType.EXTERNAL_USER_ID, new UpdateAlertDialogCallback() { - @Override - public void onSuccess(String update) { - if (update != null && !update.isEmpty()) { - OneSignal.login(update); - refreshState(); - } - } - - @Override - public void onFailure() { - - } - }); - }); - - logoutUserButton.setOnClickListener(v -> { - OneSignal.logout(); - refreshState(); - }); - } - - private void setupUserLayout() { - setupAliasLayout(); - setupEmailLayout(); - setupSMSLayout(); - setupTagsLayout(); - setupOutcomeLayout(); - setupTriggersLayout(); - } - - private void setupAliasLayout() { - setupAliasesRecyclerView(); - addAliasButton.setOnClickListener(v -> dialog.createAddPairAlertDialog("Add Alias", ProfileUtil.FieldType.ALIAS, new AddPairAlertDialogCallback() { - @Override - public void onSuccess(Pair pair) { - if (pair.second == null || pair.second.toString().isEmpty()) { - OneSignal.getUser().removeAlias(pair.first); - aliasSet.remove(pair.first); - toaster.makeCustomViewToast("Deleted alias " + pair.first, ToastType.SUCCESS); - } else { - OneSignal.getUser().addAlias(pair.first, pair.second.toString()); - aliasSet.put(pair.first, pair.second); - toaster.makeCustomViewToast("Added alias " + pair.first, ToastType.SUCCESS); - } - - refreshAliasRecyclerView(); - } - - @Override - public void onFailure() { - refreshAliasRecyclerView(); - } - })); - } - - private void setupAliasesRecyclerView() { - recyclerViewBuilder.setupRecyclerView(aliasesRecyclerView, 20, false, true); - LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); - aliasesRecyclerView.setLayoutManager(linearLayoutManager); - aliasesRecyclerViewAdapter = new PairRecyclerViewAdapter(context, aliasArrayList, new PairItemActionCallback() { - @Override - public void onLongClick(String key) { - OneSignal.getUser().removeAlias(key); - aliasSet.remove(key); - refreshAliasRecyclerView(); - toaster.makeCustomViewToast("Deleted alias " + key, ToastType.SUCCESS); - } - }); - aliasesRecyclerView.setAdapter(aliasesRecyclerViewAdapter); - } - - private void refreshAliasRecyclerView() { - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - aliasArrayList.clear(); - aliasArrayList.addAll(aliasSet.entrySet()); - - if (aliasArrayList.size() > 0) { - animate.toggleAnimationView(false, View.GONE, aliasesRecyclerView, noAliasesTextView); - } else { - animate.toggleAnimationView(true, View.GONE, aliasesRecyclerView, noAliasesTextView); - } - - aliasesRecyclerViewAdapter.notifyDataSetChanged(); - } - }); - } - - @Override - public void onPushSubscriptionChange(@NonNull PushSubscriptionChangedState state) { - refreshSubscriptionState(); - } - - private class DummySubscription implements ISubscription { - - private String _id; - public DummySubscription(String id) { - _id = id; - } - - @NonNull - @Override - public String getId() { - return _id; - } - } - - private void setupEmailLayout() { - setupEmailRecyclerView(); - - MainActivityViewModel self = this; - addEmailButton.setOnClickListener(v -> dialog.createUpdateAlertDialog("", Dialog.DialogAction.ADD, ProfileUtil.FieldType.EMAIL, new UpdateAlertDialogCallback() { - @Override - public void onSuccess(String value) { - if (value != null && !value.isEmpty()) { - OneSignal.getUser().addEmail(value); - emailArrayList.add(new DummySubscription(value)); - toaster.makeCustomViewToast("Added email " + value, ToastType.SUCCESS); - } - - refreshEmailRecyclerView(); - } - - @Override - public void onFailure() { - refreshEmailRecyclerView(); - } - })); - } - - private void setupSMSLayout() { - setupSMSRecyclerView(); - - MainActivityViewModel self = this; - addSMSButton.setOnClickListener(v -> dialog.createUpdateAlertDialog("", Dialog.DialogAction.ADD, ProfileUtil.FieldType.SMS, new UpdateAlertDialogCallback() { - @Override - public void onSuccess(String value) { - if (value != null && !value.isEmpty()) { - OneSignal.getUser().addSms(value); - smsArrayList.add(new DummySubscription(value)); - toaster.makeCustomViewToast("Added SMS " + value, ToastType.SUCCESS); - } - - refreshSMSRecyclerView(); - } - - @Override - public void onFailure() { - refreshSMSRecyclerView(); - } - })); - } - - private void setupTagsLayout() { - setupTagRecyclerView(); - - addTagButton.setOnClickListener(v -> dialog.createAddPairAlertDialog("Add Tag", ProfileUtil.FieldType.TAG, new AddPairAlertDialogCallback() { - @Override - public void onSuccess(Pair pair) { - if (pair.second == null || pair.second.toString().isEmpty()) { - OneSignal.getUser().removeTag(pair.first); - tagSet.remove(pair.first); - toaster.makeCustomViewToast("Deleted tag " + pair.first, ToastType.SUCCESS); - } else { - OneSignal.getUser().addTag(pair.first, pair.second.toString()); - tagSet.put(pair.first, pair.second); - toaster.makeCustomViewToast("Added tag " + pair.first, ToastType.SUCCESS); - } - - refreshTagRecyclerView(); - } - - @Override - public void onFailure() { - refreshTagRecyclerView(); - } - })); - } - - private void setupTagRecyclerView() { - recyclerViewBuilder.setupRecyclerView(tagsRecyclerView, 20, false, true); - LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); - tagsRecyclerView.setLayoutManager(linearLayoutManager); - tagPairRecyclerViewAdapter = new PairRecyclerViewAdapter(context, tagArrayList, new PairItemActionCallback() { - @Override - public void onLongClick(String key) { - OneSignal.getUser().removeTag(key); - tagSet.remove(key); - refreshTagRecyclerView(); - toaster.makeCustomViewToast("Deleted tag " + key, ToastType.SUCCESS); - } - }); - tagsRecyclerView.setAdapter(tagPairRecyclerViewAdapter); - } - - private void refreshTagRecyclerView() { - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - tagArrayList.clear(); - tagArrayList.addAll(tagSet.entrySet()); - - if (tagArrayList.size() > 0) { - animate.toggleAnimationView(false, View.GONE, tagsRecyclerView, noTagsTextView); - } else { - animate.toggleAnimationView(true, View.GONE, tagsRecyclerView, noTagsTextView); - } - - tagPairRecyclerViewAdapter.notifyDataSetChanged(); - } - }); - } - - private void setupEmailRecyclerView() { - recyclerViewBuilder.setupRecyclerView(emailsRecyclerView, 20, false, true); - LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); - emailsRecyclerView.setLayoutManager(linearLayoutManager); - emailsRecyclerViewAdapter = new SubscriptionRecyclerViewAdapter(context, emailArrayList, value -> { - String email = ((DummySubscription)value).getId(); - OneSignal.getUser().removeEmail(email); - emailArrayList.remove(value); - refreshEmailRecyclerView(); - toaster.makeCustomViewToast("Deleted email " + email, ToastType.SUCCESS); - }); - emailsRecyclerView.setAdapter(emailsRecyclerViewAdapter); - } - - private void refreshEmailRecyclerView() { - getActivity().runOnUiThread(() -> { - if (emailArrayList.size() > 0) { - animate.toggleAnimationView(false, View.GONE, emailsRecyclerView, noEmailsTextView); - } else { - animate.toggleAnimationView(true, View.GONE, emailsRecyclerView, noEmailsTextView); - } - - emailsRecyclerViewAdapter.notifyDataSetChanged(); - }); - } - - private void setupSMSRecyclerView() { - recyclerViewBuilder.setupRecyclerView(smssRecyclerView, 20, false, true); - LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); - smssRecyclerView.setLayoutManager(linearLayoutManager); - smssRecyclerViewAdapter = new SubscriptionRecyclerViewAdapter(context, smsArrayList, value -> { - String number = ((DummySubscription)value).getId(); - OneSignal.getUser().removeSms(number); - smsArrayList.remove(value); - refreshSMSRecyclerView(); - toaster.makeCustomViewToast("Deleted SMS " + number, ToastType.SUCCESS); - }); - smssRecyclerView.setAdapter(smssRecyclerViewAdapter); - } - - private void refreshSMSRecyclerView() { - getActivity().runOnUiThread(() -> { - if (smsArrayList.size() > 0) { - animate.toggleAnimationView(false, View.GONE, smssRecyclerView, noSmssTextView); - } else { - animate.toggleAnimationView(true, View.GONE, smssRecyclerView, noSmssTextView); - } - - smssRecyclerViewAdapter.notifyDataSetChanged(); - }); - } - - private void setupOutcomeLayout() { - sendOutcomeButton.setOnClickListener(v -> dialog.createSendOutcomeAlertDialog("Select an Outcome Type...", new SendOutcomeAlertDialogCallback() { - @Override - public boolean onSuccess(OutcomeEvent outcomeEvent, String name, String value) { - switch (outcomeEvent) { - case OUTCOME: - OneSignal.getSession().addOutcome(name); - break; - case UNIQUE_OUTCOME: - OneSignal.getSession().addUniqueOutcome(name); - break; - case OUTCOME_WITH_VALUE: - if (value.isEmpty()) { - toaster.makeCustomViewToast("Please enter an outcome value!", ToastType.ERROR); - return false; - } - - OneSignal.getSession().addOutcomeWithValue(name, Float.parseFloat(value)); - break; - } - - return true; - } - - @Override - public void onFailure() { - - } - })); - } - - private void setupTriggersLayout() { - animate.toggleAnimationView(true, View.GONE, triggersRecyclerView, noTriggersTextView); - - setupTriggerRecyclerView(); - addTriggerButton.setOnClickListener(v -> dialog.createAddPairAlertDialog("Add Trigger", ProfileUtil.FieldType.TRIGGER, new AddPairAlertDialogCallback() { - @Override - public void onSuccess(Pair pair) { - if (pair.second == null || pair.second.toString().isEmpty()) { - OneSignal.getInAppMessages().removeTrigger(pair.first); - triggerSet.remove(pair.first); - toaster.makeCustomViewToast("Deleted trigger " + pair.first, ToastType.SUCCESS); - } else { - OneSignal.getInAppMessages().addTrigger(pair.first, pair.second.toString()); - triggerSet.put(pair.first, pair.second); - toaster.makeCustomViewToast("Added trigger " + pair.first, ToastType.SUCCESS); - } - - refreshTriggerRecyclerView(); - } - - @Override - public void onFailure() { - refreshTriggerRecyclerView(); - } - })); - } - - private void setupTriggerRecyclerView() { - recyclerViewBuilder.setupRecyclerView(triggersRecyclerView, 20, false, true); - LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); - triggersRecyclerView.setLayoutManager(linearLayoutManager); - triggerPairRecyclerViewAdapter = new PairRecyclerViewAdapter(context, triggerArrayList, key -> { - OneSignal.getInAppMessages().removeTrigger(key); - triggerSet.remove(key); - - refreshTriggerRecyclerView(); - - toaster.makeCustomViewToast("Deleted trigger " + key, ToastType.SUCCESS); - }); - triggersRecyclerView.setAdapter(triggerPairRecyclerViewAdapter); - } - - private void refreshTriggerRecyclerView() { - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - triggerArrayList.clear(); - triggerArrayList.addAll(triggerSet.entrySet()); - - if (triggerArrayList.size() > 0) { - animate.toggleAnimationView(false, View.GONE, triggersRecyclerView, noTriggersTextView); - } else { - animate.toggleAnimationView(true, View.GONE, triggersRecyclerView, noTriggersTextView); - } - - triggerPairRecyclerViewAdapter.notifyDataSetChanged(); - } - }); - } - - private void setupLocationLayout() { - setupLocationSharedSwitch(); - setupPromptLocationButton(); - } - - private void setupLocationSharedSwitch() { - locationSharedRelativeLayout.setOnClickListener(v -> { - boolean isLocationShared = !locationSharedSwitch.isChecked(); - locationSharedSwitch.setChecked(isLocationShared); - SharedPreferenceUtil.cacheLocationSharedStatus(context, isLocationShared); - }); - - boolean isLocationShared = SharedPreferenceUtil.getCachedLocationSharedStatus(context); - locationSharedSwitch.setChecked(isLocationShared); - locationSharedSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { - SharedPreferenceUtil.cacheLocationSharedStatus(context, isChecked); - OneSignal.getLocation().setShared(isChecked); - }); - } - - private void setupPromptLocationButton() { - promptLocationButton.setOnClickListener(v -> { - OneSignal.getLocation().requestPermission(Continue.none()); - }); - } - - private void setupPushNotificationLayout() { - setupSubscriptionSwitch(); - setupPromptPushButton(); - setupSendNotificationsLayout(); - } - - private void setupSubscriptionSwitch() { - refreshSubscriptionState(); - // Add a listener to toggle the push notification enablement for the push subscription. - pushSubscriptionEnabledSwitch.setOnClickListener(v -> { - IPushSubscription subscription = OneSignal.getUser().getPushSubscription(); - if(pushSubscriptionEnabledSwitch.isChecked()) { - subscription.optIn(); - } - else { - subscription.optOut(); - } - }); - } - - private void setupPromptPushButton() { - promptPushButton.setOnClickListener(v -> { - ExecutorService executor = Executors.newSingleThreadExecutor(); - @SuppressLint({"NewApi", "LocalSuppress"}) CompletableFuture future = CompletableFuture.runAsync(() -> { - OneSignal.getNotifications().requestPermission(true, Continue.none()); - }, executor); - future.join(); // Waits for the task to complete - executor.shutdown(); - }); - } - - private void refreshSubscriptionState() { - boolean isPermissionEnabled = OneSignal.getNotifications().getPermission(); - IPushSubscription pushSubscription = OneSignal.getUser().getPushSubscription(); - - pushSubscriptionIdTextView.setText(pushSubscription.getId()); - promptPushBottonLayout.setVisibility(isPermissionEnabled ? View.GONE : View.VISIBLE); - pushSubscriptionEnabledRelativeLayout.setEnabled(isPermissionEnabled); - pushSubscriptionEnabledSwitch.setEnabled(isPermissionEnabled); - pushSubscriptionEnabledSwitch.setChecked(pushSubscription.getOptedIn()); - } - - private void setupSendNotificationsLayout() { - recyclerViewBuilder.setupRecyclerView(pushNotificationRecyclerView, 16, false, true); - GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 2); - pushNotificationRecyclerView.setLayoutManager(gridLayoutManager); - - pushNotificationRecyclerViewAdapter = new NotificationRecyclerViewAdapter(context, Notification.values()); - pushNotificationRecyclerView.setAdapter(pushNotificationRecyclerViewAdapter); - } - - private void setupInAppMessagingLayout() { - setupPauseInAppMessagesSwitch(); - setupSendIAMsLayout(); - } - - private void setupPauseInAppMessagesSwitch() { - pauseInAppMessagesRelativeLayout.setOnClickListener(v -> { - boolean isInAppMessagesPaused = pauseInAppMessagesSwitch.isChecked(); - pauseInAppMessagesSwitch.setChecked(!isInAppMessagesPaused); - }); - - pauseInAppMessagesSwitch.setChecked(SharedPreferenceUtil.getCachedInAppMessagingPausedStatus(context)); - pauseInAppMessagesSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { - OneSignal.getInAppMessages().setPaused(isChecked); - SharedPreferenceUtil.cacheInAppMessagingPausedStatus(context, isChecked); - }); - } - - private void setupSendIAMsLayout() { - recyclerViewBuilder.setupRecyclerView(inAppMessagingRecyclerView, 4, false, true); - GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 2); - inAppMessagingRecyclerView.setLayoutManager(gridLayoutManager); - - inAppMessagingRecyclerViewAdapter = new InAppMessageRecyclerViewAdapter(context, InAppMessage.values()); - inAppMessagingRecyclerView.setAdapter(inAppMessagingRecyclerViewAdapter); - } - - public boolean scrollToTopIfAvailable() { - if (shouldScrollTop) { - if (nestedScrollView != null) { - nestedScrollView.smoothScrollTo(0, 0); - appBarLayout.setExpanded(true); - } - } - return shouldScrollTop; - } - - private String getOneSignalAppId() { - return SharedPreferenceUtil.getOneSignalAppId(context); - } - - private void togglePrivacyConsent(boolean hasConsent) { - OneSignal.setConsentGiven(hasConsent); - SharedPreferenceUtil.cacheUserPrivacyConsent(context, hasConsent); - - shouldScrollTop = hasConsent; - - int consentVisibility = hasConsent ? View.GONE : View.VISIBLE; - int scrollVisibility = hasConsent ? View.VISIBLE : View.GONE; - privacyConsentLinearLayout.setVisibility(consentVisibility); - nestedScrollView.setVisibility(scrollVisibility); - - appBarLayout.setExpanded(true); - } - - - - private void refreshState() { - // appId - appIdTextView.setText(getOneSignalAppId()); - - // aliases -// aliasSet.clear(); -// for (Map.Entry aliasEntry :OneSignal.getUser().getAliases().entrySet()) { -// aliasSet.put(aliasEntry.getKey(), aliasEntry.getValue()); -// } -// refreshAliasRecyclerView(); - - // email subscriptions -// emailArrayList.clear(); -// List emailSubs = OneSignal.getUser().getSubscriptions().getEmails(); -// for (IEmailSubscription emailSub: emailSubs) { -// emailArrayList.add(emailSub); -// } -// refreshEmailRecyclerView(); - - // sms subscriptions -// smsArrayList.clear(); -// List smsSubs = OneSignal.getUser().getSubscriptions().getSmss(); -// for (ISmsSubscription smsSub: smsSubs) { -// smsArrayList.add(smsSub); -// } -// refreshSMSRecyclerView(); - - // tags -// tagSet.clear(); -// for (Map.Entry tagEntry :OneSignal.getUser().getTags().entrySet()) { -// tagSet.put(tagEntry.getKey(), tagEntry.getValue()); -// } -// refreshTagRecyclerView(); - - // triggers - triggerSet.clear(); - // triggers are not persisted, they are always "starting from scratch" - refreshTriggerRecyclerView(); - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/SplashActivityViewModel.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/SplashActivityViewModel.java deleted file mode 100644 index c3116b9058..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/SplashActivityViewModel.java +++ /dev/null @@ -1,147 +0,0 @@ -package com.onesignal.sdktest.model; - -import android.app.Activity; -import android.content.Context; -import android.os.Handler; -import android.util.Log; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - -import com.onesignal.OneSignal; -import com.onesignal.sdktest.constant.Tag; -import com.onesignal.sdktest.constant.Text; -import com.onesignal.sdktest.util.IntentTo; -import com.onesignal.sdktest.util.SharedPreferenceUtil; - -public class SplashActivityViewModel implements ActivityViewModel { - - private IntentTo intentTo; - - private Context context; - - private boolean[] tasks = {false, false, false}; - - @Override - public Activity getActivity() { - return (Activity) context; - } - - @Override - public AppCompatActivity getAppCompatActivity() { - return (AppCompatActivity) context; - } - - @Override - public ActivityViewModel onActivityCreated(Context context) { - this.context = context; - intentTo = new IntentTo(context); - setupOneSignalSDK(); - return this; - } - - @Override - public ActivityViewModel setupInterfaceElements() { - return this; - } - - @Override - public void setupToolbar() { - - } - - @Override - public void networkConnected() { - - } - - @Override - public void networkDisconnected() { - - } - - private void setupOneSignalSDK() { - boolean privacyConsent = true; - - OneSignal.setConsentRequired(privacyConsent); - - boolean isLocationShared = SharedPreferenceUtil.getCachedLocationSharedStatus(context); - OneSignal.getLocation().setShared(isLocationShared); - - boolean isInAppMessagingPaused = SharedPreferenceUtil.getCachedInAppMessagingPausedStatus(context); - OneSignal.getInAppMessages().setPaused(isInAppMessagingPaused); - - Log.d(Tag.LOG_TAG, Text.PRIVACY_CONSENT_REQUIRED_SET + ": " + privacyConsent); - -// boolean isEmailCached = attemptSignIn(new EmailUpdateCallback() { -// @Override -// public void onSuccess() { -// tasks[0] = true; -// attemptEnterApplication(); -// } -// -// @Override -// public void onFailure() { -// tasks[0] = true; -// attemptEnterApplication(); -// } -// }); -// if (!isEmailCached) { - tasks[0] = true; - attemptEnterApplication(); -// } - - new Thread() { - public void run() { - boolean isExternalUserIdCached = attemptExternalUserId(); - tasks[1] = true; - - attemptEnterApplication(); - } - }.start(); - - new Thread() { - public void run() { - boolean hasConsent = SharedPreferenceUtil.getUserPrivacyConsent(context); - // TODO() -// OneSignal.provideUserConsent(hasConsent); - tasks[2] = true; - - attemptEnterApplication(); - } - }.start(); - } - -// public boolean attemptSignIn(EmailUpdateCallback callback) { -// boolean isEmailCached = SharedPreferenceUtil.exists(context, SharedPreferenceUtil.USER_EMAIL_SHARED_PREF); -// if (isEmailCached) { -// String email = SharedPreferenceUtil.getCachedUserEmail(context); -// currentUser.setEmail(email, callback); -// } -// return isEmailCached; -// return false; -// } - - public boolean attemptExternalUserId() { - boolean isExternalUserIdCached = SharedPreferenceUtil.exists(context, SharedPreferenceUtil.USER_EXTERNAL_USER_ID_SHARED_PREF); - if (isExternalUserIdCached) { - String externalUserId = SharedPreferenceUtil.getCachedUserExternalUserId(context); -// currentUser.setExternalUserId(context, externalUserId); - } - return isExternalUserIdCached; - } - - private void attemptEnterApplication() { - for (boolean task : tasks) { - if (!task) - return; - } - - ((Activity) context).runOnUiThread(() -> new Handler().postDelayed(() -> intentTo.mainActivity(), 1000)); - } - - @Override - public void onNotificationPermissionChange(@Nullable boolean permission) { - - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/NotificationData.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/NotificationData.java deleted file mode 100644 index 411b912f22..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/NotificationData.java +++ /dev/null @@ -1,194 +0,0 @@ -package com.onesignal.sdktest.notification; - -public class NotificationData { - - public static final String[][] GENERAL_DATA = { - new String[]{ - "Liked post", - "Michael DiCioccio liked your post!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fbell_red.png?alt=media&token=c80c4e76-1fd7-4912-93f4-f1aee1d98b20", - "" - }, - new String[]{ - "Birthdays", - "Say happy birthday to Rodrigo and 5 others!", - "https://images.vexels.com/media/users/3/147226/isolated/preview/068af50eededd7a739aac52d8e509ab5-three-candles-birthday-cake-icon-by-vexels.png", - "" - }, - new String[]{ - "New Post", - "Neil just posted for the first time in while, check it out!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fbell_red.png?alt=media&token=c80c4e76-1fd7-4912-93f4-f1aee1d98b20", - "" - } - }; - - public static final String[][] GREETING_DATA = { - new String[]{ - "", - "Welcome to Nike!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fhuman-greeting-red.png?alt=media&token=cb9f3418-db61-443c-955a-57e664d30271", - "" - }, - new String[]{ - "", - "Welcome to Adidas!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fhuman-greeting-red.png?alt=media&token=cb9f3418-db61-443c-955a-57e664d30271", - "" - }, - new String[]{ - "", - "Welcome to Sandra’s cooking blog!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fhuman-greeting-red.png?alt=media&token=cb9f3418-db61-443c-955a-57e664d30271", - "" - } - }; - - public static final String[][] PROMOTION_DATA = { - new String[]{ - "", - "Get 20% off site-wide!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fbrightness-percent-red.png?alt=media&token=9e43c45e-8bcc-413e-8a42-612020c406ba", - "" - }, - new String[]{ - "", - "Half-off all shoes today only!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fbrightness-percent-red.png?alt=media&token=9e43c45e-8bcc-413e-8a42-612020c406ba", - "" - }, - new String[]{ - "", - "3 hour flash sale!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fbrightness-percent-red.png?alt=media&token=9e43c45e-8bcc-413e-8a42-612020c406ba", - "" - } - }; - - public static final String[][] BREAKING_NEWS_DATA = { - new String[]{ - "The rap game wont be the same", - "Nipsey Hussle shot dead in his own hometown!", - "https://pbs.twimg.com/profile_images/719602655337656321/kQUzR2Es_400x400.jpg", - "https://lab.fm/wp-content/uploads/2019/04/nipsey-hussle-cipriani-diamond-ball-2018-nyc-credit-jstone-shutterstock@1800x1013.jpg" - }, - new String[]{ - "CNN being bought by Fox?", - "Fox has shown an increasing interest in purchasing Fox and because of some other deals this year it could actually happen!", - "https://www.thewrap.com/sites/default/wp-content/uploads/files/2013/Jul/08/101771/gallupinside.png", - "https://i.ytimg.com/vi/C8YBKBuX43Q/maxresdefault.jpg" - }, - new String[]{ - "Teslas next venture!", - "Tesla releasing fully autonomous driving service!", - "https://i.etsystatic.com/13567406/r/il/6657a5/1083941709/il_794xN.1083941709_k3vi.jpg", - "https://electrek.co/wp-content/uploads/sites/3/2018/01/screen-shot-2018-01-04-at-12-59-25-pm.jpg?quality=82&strip=all&w=1600" - } - }; - - public static final String[][] ABANDONED_CART_DATA = { - new String[]{ - "", - "You have some shoes left in your cart!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fcart-red.png?alt=media&token=3e9ca206-540c-4275-8f21-1840e9cba930", - "" - }, - new String[]{ - "", - "Still want to buy the dress you saw?", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fcart-red.png?alt=media&token=3e9ca206-540c-4275-8f21-1840e9cba930", - "" - }, - new String[]{ - "", - "20% off the shoes you saw today.", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fcart-red.png?alt=media&token=3e9ca206-540c-4275-8f21-1840e9cba930", - "" - } - }; - - public static final String[][] NEW_POST_DATA = { - new String[]{ - "", - "I just published a new blog post!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fimage-red.png?alt=media&token=3f44fd3d-27a5-4d05-9544-423edf2f6284", - "" - }, - new String[]{ - "", - "Come check out my new blog post on aliens!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fimage-red.png?alt=media&token=3f44fd3d-27a5-4d05-9544-423edf2f6284", - "" - }, - new String[]{ - "", - "10 places you have to see before you die.", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fimage-red.png?alt=media&token=3f44fd3d-27a5-4d05-9544-423edf2f6284", - "" - } - }; - - public static final String[][] RE_ENGAGEMENT_DATA = { - new String[]{ - "", - "Your friend George just joined Facebook", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fgesture-tap-red.png?alt=media&token=8ea7f6db-18e4-4fdd-aabf-ac97f04522fd", - "" - }, - new String[]{ - "", - "Can you beat level 23?", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fgesture-tap-red.png?alt=media&token=8ea7f6db-18e4-4fdd-aabf-ac97f04522fd", - "" - }, - new String[]{ - "", - "Check out our Fall collection!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fgesture-tap-red.png?alt=media&token=8ea7f6db-18e4-4fdd-aabf-ac97f04522fd", - "" - } - }; - - public static final String[][] RATING_DATA = { - new String[]{ - "", - "How was your food/experience at Chipotle?", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fstar-red.png?alt=media&token=e18e99ce-96ad-4ee5-b0b9-40c7f90613d1", - "" - }, - new String[]{ - "", - "Rate your experience with Amazon.", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fstar-red.png?alt=media&token=e18e99ce-96ad-4ee5-b0b9-40c7f90613d1", - "" - }, - new String[]{ - "", - "Let your Lyft driver know how the ride was.", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fstar-red.png?alt=media&token=e18e99ce-96ad-4ee5-b0b9-40c7f90613d1", - "" - } - }; - - public static final String[][] LOCATION_DATA = { - new String[]{ - "", - "Your friend Neil is sharing his location with you.", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fmap-marker-red.png?alt=media&token=42631ed8-053b-4c28-a193-4d144001a474", - "" - }, - new String[]{ - "", - "An armed robbery occured at 34th and Market Street today.", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fmap-marker-red.png?alt=media&token=42631ed8-053b-4c28-a193-4d144001a474", - "" - }, - new String[]{ - "", - "Logic is performing at the Wells Fargo Center this weekend!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fmap-marker-red.png?alt=media&token=42631ed8-053b-4c28-a193-4d144001a474", - "" - } - }; - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/NotificationServiceExtension.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/NotificationServiceExtension.java deleted file mode 100644 index 6f1c603da5..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/NotificationServiceExtension.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.onesignal.sdktest.notification; - -import android.util.Log; - -import com.onesignal.notifications.IActionButton; -import com.onesignal.notifications.IDisplayableMutableNotification; -import com.onesignal.notifications.INotificationReceivedEvent; -import com.onesignal.notifications.INotificationServiceExtension; -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.constant.Tag; - -public class NotificationServiceExtension implements INotificationServiceExtension { - - @Override - public void onNotificationReceived(INotificationReceivedEvent event) { - Log.v(Tag.LOG_TAG, "IRemoteNotificationReceivedHandler fired" + " with INotificationReceivedEvent: " + event.toString()); - - IDisplayableMutableNotification notification = event.getNotification(); - - if (notification.getActionButtons() != null) { - for (IActionButton button : notification.getActionButtons()) { - Log.v(Tag.LOG_TAG, "ActionButton: " + button.toString()); - } - } - - notification.setExtender(builder -> builder.setColor(event.getContext().getResources().getColor(R.color.colorPrimary))); - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/OneSignalNotificationSender.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/OneSignalNotificationSender.java deleted file mode 100644 index 96c870c13a..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/OneSignalNotificationSender.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.onesignal.sdktest.notification; - -import android.os.Build; -import android.util.Log; - -import com.onesignal.OneSignal; -import com.onesignal.user.subscriptions.IPushSubscription; -import com.onesignal.sdktest.constant.Tag; -import com.onesignal.sdktest.type.Notification; - -import org.json.JSONObject; - -import java.io.InputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.util.Scanner; - -public class OneSignalNotificationSender { - - public static void setAppId(String appId) { - _appId = appId; - } - private static String _appId = ""; - - /** - * Send a notification to this device through the OneSignal Platform. Note this form of the - * API should not be used in a production setting as it is not safe. Rather, the device should - * make an API call to it's own backend, which should handle the API call to OneSignal (where it - * can safely provide the application API Key). - * - * @param notification The notification that is to be sent. - */ - public static void sendDeviceNotification(final Notification notification) { - new Thread(() -> { - IPushSubscription subscription = OneSignal.getUser().getPushSubscription(); - - if (!subscription.getOptedIn()) - return; - - int pos = notification.getTemplatePos(); - try { - JSONObject notificationContent = new JSONObject("{'app_id': '" + _appId + "', 'include_player_ids': ['" + subscription.getId() + "']," + - "'headings': {'en': '" + notification.getTitle(pos) + "'}," + - "'contents': {'en': '" + notification.getMessage(pos) + "'}," + - "'small_icon': '" + notification.getSmallIconRes() + "'," + - "'large_icon': '" + notification.getLargeIconUrl(pos) + "'," + - "'big_picture': '" + notification.getBigPictureUrl(pos) + "'," + - "'android_group': '" + notification.getGroup() + "'," + - "'buttons': " + notification.getButtons() + "," + - "'android_led_color': 'FFE9444E'," + - "'android_accent_color': 'FFE9444E'," + - "'android_sound': 'nil'}"); - - HttpURLConnection con = (HttpURLConnection) new URL("https://onesignal.com/api/v1/notifications").openConnection(); - - con.setUseCaches(false); - con.setConnectTimeout(30000); - con.setReadTimeout(30000); - con.setRequestProperty("Accept", "application/vnd.onesignal.v1+json"); - con.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); - con.setRequestMethod("POST"); - con.setDoOutput(true); - con.setDoInput(true); - - byte[] outputBytes = notificationContent.toString().getBytes(StandardCharsets.UTF_8); - con.setFixedLengthStreamingMode(outputBytes.length); - con.getOutputStream().write(outputBytes); - - int httpResponse = con.getResponseCode(); - - if(httpResponse == HttpURLConnection.HTTP_ACCEPTED || httpResponse == HttpURLConnection.HTTP_OK) { - InputStream inputStream = con.getInputStream(); - Scanner scanner = new Scanner(inputStream, "UTF-8"); - String responseStr = ""; - if (scanner.useDelimiter("\\A").hasNext()) - responseStr = scanner.next(); - scanner.close(); - Log.d(Tag.LOG_TAG, "Success sending notification: " + responseStr); - } - else { - InputStream inputStream = con.getErrorStream(); - Scanner scanner = new Scanner(inputStream, "UTF-8"); - String responseStr = ""; - if (scanner.useDelimiter("\\A").hasNext()) - responseStr = scanner.next(); - scanner.close(); - Log.d(Tag.LOG_TAG, "Failure sending notification: " + responseStr); - } - } catch (Exception e) { - e.printStackTrace(); - } - }).start(); - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/InAppMessage.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/InAppMessage.java deleted file mode 100644 index eca0e9c3b2..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/InAppMessage.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.onesignal.sdktest.type; - -public enum InAppMessage { - - TOP_BANNER("Top Banner", "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/IN_APP_MESSAGE_ICON%2Ftop_banner_icon.png?alt=media&token=88fe1f2f-01c0-44fb-bb88-c1a4bf00969d"), - BOTTOM_BANNER("Bottom Banner", "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/IN_APP_MESSAGE_ICON%2Fbottom_banner_icon.png?alt=media&token=a8faee09-137d-4049-b41b-0dc3c66b0d8e"), - CENTER_MODAL("Center Modal", "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/IN_APP_MESSAGE_ICON%2Fcenter_modal_icon.png?alt=media&token=c0998b1e-5bab-404a-bfaa-e432ec298bdf"), - FULL_SCREEN("Full Screen", "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/IN_APP_MESSAGE_ICON%2Ffull_screen_icon.png?alt=media&token=db3bb9ea-c61c-4df7-9f1f-6673316a4395"); - - private final String title; - private final String icon; - - InAppMessage(String title, String iconUrl) { - this.title = title; - this.icon = iconUrl; - } - - public String getTitle() { - return title; - } - - public String getIconUrl() { - return icon; - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/Notification.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/Notification.java deleted file mode 100644 index 4c1ddb4093..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/Notification.java +++ /dev/null @@ -1,129 +0,0 @@ -package com.onesignal.sdktest.type; - -import com.onesignal.sdktest.notification.NotificationData; - -public enum Notification { - - GENERAL("General", - NotificationData.GENERAL_DATA, - "ic_bell_white_24dp", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fbell.png?alt=media&token=73c2bdd9-355f-42bb-80d7-aead737a9dbc", - "[]", - true, - 0), - - GREETING("Greetings", - NotificationData.GREETING_DATA, - "ic_human_greeting_white_24dp", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fhuman-greeting.png?alt=media&token=178bd69d-634e-40b3-ac32-b56c88e6cd6a", - "[]", - true, - 0), - - PROMOTIONS("Promotions", - NotificationData.PROMOTION_DATA, - "ic_brightness_percent_white_24dp", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fbrightness-percent.png?alt=media&token=6a8b4348-ad51-4e3a-97d0-4deb46b1576e", - "[]", - true, - 0), - - BREAKING_NEWS("Breaking News", - NotificationData.BREAKING_NEWS_DATA, - "ic_newspaper_white_24dp", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fnewspaper.png?alt=media&token=053e419b-14f1-4f0d-a439-bb5b46d1b917", - "[{'id': 'id1', 'text': 'view', 'icon': ''}, {'id': 'id2', 'text': 'save', 'icon': ''}, {'id': 'id3', 'text': 'share', 'icon': ''}]", - true, - 0), - - ABANDONED_CART("Abandoned Cart", - NotificationData.ABANDONED_CART_DATA, - "ic_cart_white_24dp", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fcart.png?alt=media&token=cf7f4d13-6aa2-4824-9b2f-42e5f33f545b", - "[]", - true, - 0), - - NEW_POST("New Post", - NotificationData.NEW_POST_DATA, - "ic_image_white_24dp", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fimage.png?alt=media&token=6fb66f31-23de-4c76-a2ff-da40d46ebf15", - "[]", - true, - 0), - - RE_ENGAGEMENT("Re-Engagement", - NotificationData.RE_ENGAGEMENT_DATA, - "ic_gesture_tap_white_24dp", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fgesture-tap.png?alt=media&token=045ddcb9-f4e5-457e-8577-baa0e264e227", - "[]", - true, - 0), - - RATING("Rating", - NotificationData.RATING_DATA, - "ic_star_white_24dp", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fstar.png?alt=media&token=da0987e5-a635-488f-9fba-24a1ee5d704a", - "[]", - true, - 0); - - private final String title; - private final String[][] data; - private final String smallIconRes; - private final String iconUrl; - private final String buttons; - private final boolean shouldShow; - private int pos; - - Notification(String title, String[][] data, String smallIconRes, String iconUrl, String buttons, boolean shouldShow, int pos) { - this.title = title; - this.data = data; - this.smallIconRes = smallIconRes; - this.iconUrl = iconUrl; - this.buttons = buttons; - this.shouldShow = shouldShow; - this.pos = pos; - } - - public String getGroup() { - return title; - } - - public String getTitle(int pos) { - return data[pos][0]; - } - - public String getMessage(int pos) { - return data[pos][1]; - } - - public String getSmallIconRes() { - return smallIconRes; - } - - public String getIconUrl() { - return iconUrl; - } - - public String getLargeIconUrl(int pos) { - return data[pos][2]; - } - - public String getBigPictureUrl(int pos) { - return data[pos][3]; - } - - public String getButtons() { - return buttons; - } - - public boolean shouldShow() { - return shouldShow; - } - - public int getTemplatePos() { - if (pos > 2) pos = 0; - return pos++; - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/OutcomeEvent.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/OutcomeEvent.java deleted file mode 100644 index d1cc277411..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/OutcomeEvent.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.onesignal.sdktest.type; - -public enum OutcomeEvent { - - OUTCOME("Normal Outcome"), - UNIQUE_OUTCOME("Unique Outcome"), - OUTCOME_WITH_VALUE("Outcome with Value"); - - String title; - - OutcomeEvent(String title) { - this.title = title; - } - - public static OutcomeEvent enumFromTitleString(String title) { - for (OutcomeEvent outcomeEvent : OutcomeEvent.values()) { - if (title.equals(outcomeEvent.getTitle())) - return outcomeEvent; - } - - return null; - } - - public String getTitle() { - return title; - } - - @Override - public String toString() { - return getTitle(); - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/ToastType.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/ToastType.java deleted file mode 100644 index 3da88ad419..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/ToastType.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.onesignal.sdktest.type; - -import com.onesignal.sdktest.R; - -public enum ToastType { - - INFO(R.drawable.ic_information_white_48dp, R.color.colorToastInfo), - SUCCESS(R.drawable.ic_checkbox_marked_circle_white_48dp, R.color.colorToastSuccess), - WARNING(R.drawable.ic_alert_white_48dp, R.color.colorToastWarning), - ERROR(R.drawable.ic_alert_octagon_white_48dp, R.color.colorToastError); - - private int icon; - private int color; - - ToastType(int icon, int color) { - this.icon = icon; - this.color = color; - } - - public int getIcon() { - return icon; - } - - public int getColor() { - return color; - } - -} \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/CustomAlertDialogBuilder.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/CustomAlertDialogBuilder.java deleted file mode 100644 index 3350c70356..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/CustomAlertDialogBuilder.java +++ /dev/null @@ -1,195 +0,0 @@ -package com.onesignal.sdktest.ui; - -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.view.KeyEvent; -import android.view.View; -import android.widget.Button; - -import com.onesignal.sdktest.R; - -public class CustomAlertDialogBuilder extends AlertDialog.Builder { - - /* - * Click listener - */ - private DialogInterface.OnClickListener mPositiveButtonListener = null; - private DialogInterface.OnClickListener mNegativeButtonListener = null; - private DialogInterface.OnClickListener mNeutralButtonListener = null; - private DialogInterface.OnDismissListener mOnDismissListener = null; - - /* - * Buttons text - */ - private CharSequence mPositiveButtonText = null; - private CharSequence mNegativeButtonText = null; - private CharSequence mNeutralButtonText = null; - - - /* - * Buttons - */ - private Button positiveButton; - private Button negativeButton; - - private View view; - private Boolean mCancelOnTouchOutside = null; - private boolean isCancelable = true; - - public CustomAlertDialogBuilder(Context context, View view) { - super(context); - this.view = view; - } - - public CustomAlertDialogBuilder setOnDismissListener(DialogInterface.OnDismissListener listener) { - mOnDismissListener = listener; - return this; - } - - @Override - public CustomAlertDialogBuilder setNegativeButton(CharSequence text, DialogInterface.OnClickListener listener) { - mNegativeButtonListener = listener; - mNegativeButtonText = text; - return this; - } - - @Override - public CustomAlertDialogBuilder setNeutralButton(CharSequence text, DialogInterface.OnClickListener listener) { - mNeutralButtonListener = listener; - mNeutralButtonText = text; - return this; - } - - @Override - public CustomAlertDialogBuilder setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener) { - mPositiveButtonListener = listener; - mPositiveButtonText = text; - return this; - } - - @Override - public CustomAlertDialogBuilder setNegativeButton(int textId, DialogInterface.OnClickListener listener) { - setNegativeButton(getContext().getString(textId), listener); - return this; - } - - @Override - public CustomAlertDialogBuilder setNeutralButton(int textId, DialogInterface.OnClickListener listener) { - setNeutralButton(getContext().getString(textId), listener); - return this; - } - - @Override - public CustomAlertDialogBuilder setPositiveButton(int textId, DialogInterface.OnClickListener listener) { - setPositiveButton(getContext().getString(textId), listener); - return this; - } - - public CustomAlertDialogBuilder setCanceledOnTouchOutside(boolean cancelOnTouchOutside) { - mCancelOnTouchOutside = cancelOnTouchOutside; - return this; - } - - @Override - public AlertDialog create() { - throw new UnsupportedOperationException("CustomAlertDialogBuilder.create(): use show() instead.."); - } - - public Button getPositiveButtonElement() { - return positiveButton; - } - - public Button getNegativeButtonElement() { - return negativeButton; - } - - public void setIsCancelable(boolean isCancelable) { - this.isCancelable = isCancelable; - } - - @Override - public AlertDialog show() { - AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getContext(), R.style.WhiteThemeAlertDialog); - alertDialogBuilder.setView(view); - alertDialogBuilder.setOnKeyListener(new DialogInterface.OnKeyListener() { - @Override - public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { - switch (keyCode) { - case KeyEvent.KEYCODE_BACK: - return !isCancelable; - } - return false; - } - }); - final AlertDialog alertDialog = alertDialogBuilder.create(); - - DialogInterface.OnClickListener emptyOnClickListener = new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { } - }; - - // Enable buttons (needed for Android 1.6) - otherwise later getButton() returns null - if (mPositiveButtonText != null) { - alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, mPositiveButtonText, emptyOnClickListener); - } - - if (mNegativeButtonText != null) { - alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, mNegativeButtonText, emptyOnClickListener); - } - - if (mNeutralButtonText != null) { - alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, mNeutralButtonText, emptyOnClickListener); - } - - // Set OnDismissListener if available - if (mOnDismissListener != null) { - alertDialog.setOnDismissListener(mOnDismissListener); - } - - if (mCancelOnTouchOutside != null) { - alertDialog.setCanceledOnTouchOutside(mCancelOnTouchOutside); - } - - alertDialog.show(); - - // Set the OnClickListener directly on the Button object, avoiding the auto-dismiss feature - // IMPORTANT: this must be after alert.show(), otherwise the button doesn't exist.. - // If the listener are null don't do anything so that they will still dismiss the dialog when clicked - if (mPositiveButtonListener != null) { - alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() { - - @Override - public void onClick(View v) { - mPositiveButtonListener.onClick(alertDialog, AlertDialog.BUTTON_POSITIVE); - } - }); - } - - if (mNegativeButtonListener != null) { - alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setOnClickListener(new View.OnClickListener() { - - @Override - public void onClick(View v) { - mNegativeButtonListener.onClick(alertDialog, AlertDialog.BUTTON_NEGATIVE); - } - }); - } - - if (mNeutralButtonListener != null) { - alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener(new View.OnClickListener() { - - @Override - public void onClick(View v) { - mNeutralButtonListener.onClick(alertDialog, AlertDialog.BUTTON_NEUTRAL); - } - }); - } - - positiveButton = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE); - negativeButton = alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE); - - return alertDialog; - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/FixAppBarLayoutBehavior.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/FixAppBarLayoutBehavior.java deleted file mode 100644 index cc3a0e7ffe..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/FixAppBarLayoutBehavior.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.onesignal.sdktest.ui; - -import android.content.Context; -import com.google.android.material.appbar.AppBarLayout; -import androidx.coordinatorlayout.widget.CoordinatorLayout; -import androidx.core.view.ViewCompat; -import android.util.AttributeSet; -import android.view.View; - - -public class FixAppBarLayoutBehavior extends AppBarLayout.Behavior { - - public FixAppBarLayoutBehavior() { - super(); - } - - public FixAppBarLayoutBehavior(Context context, AttributeSet attrs) { - super(context, attrs); - } - - @Override - public void onNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, - int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type) { - super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, - dxUnconsumed, dyUnconsumed, type); - stopNestedScrollIfNeeded(dyUnconsumed, child, target, type); - } - - @Override - public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, - View target, int dx, int dy, int[] consumed, int type) { - super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type); - stopNestedScrollIfNeeded(dy, child, target, type); - } - - private void stopNestedScrollIfNeeded(int dy, AppBarLayout child, View target, int type) { - if (type == ViewCompat.TYPE_NON_TOUCH) { - final int currOffset = getTopAndBottomOffset(); - if ((dy < 0 && currOffset == 0) - || (dy > 0 && currOffset == -child.getTotalScrollRange())) { - ViewCompat.stopNestedScroll(target, ViewCompat.TYPE_NON_TOUCH); - } - } - } -} \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/RecyclerViewBuilder.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/RecyclerViewBuilder.java deleted file mode 100644 index 236f940386..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/RecyclerViewBuilder.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.onesignal.sdktest.ui; - -import android.content.Context; -import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.DividerItemDecoration; -import androidx.recyclerview.widget.RecyclerView; - -import com.onesignal.sdktest.R; - -public class RecyclerViewBuilder { - - private Context context; - - - public RecyclerViewBuilder(Context context) { - this.context = context; - } - - public void setupRecyclerView(RecyclerView recyclerView, int viewCache, boolean hasDivider, boolean isVertical) { - DefaultItemAnimator defaultItemAnimator = new DefaultItemAnimator(); - - int orientation = isVertical ? DividerItemDecoration.VERTICAL : DividerItemDecoration.HORIZONTAL; - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, orientation); - - int divider = hasDivider ? R.drawable.divider : R.drawable.no_divider; - dividerItemDecoration.setDrawable(context.getResources().getDrawable(divider)); - - recyclerView.setItemAnimator(defaultItemAnimator); - recyclerView.addItemDecoration(dividerItemDecoration); - recyclerView.setHasFixedSize(false); - recyclerView.setItemViewCacheSize(viewCache); - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Animate.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Animate.java deleted file mode 100644 index a2d994f4ee..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Animate.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.onesignal.sdktest.util; - -import android.view.View; - -public class Animate { - - public Animate() { - } - - public void toggleAnimationView(boolean showAnimation, int visibility, View view, View anim) { - int viewVis = showAnimation ? visibility : View.VISIBLE; - int animVis = showAnimation ? View.VISIBLE : visibility; - - view.setVisibility(viewVis); - anim.setVisibility(animVis); - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Dialog.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Dialog.java deleted file mode 100644 index 797d06372e..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Dialog.java +++ /dev/null @@ -1,374 +0,0 @@ -package com.onesignal.sdktest.util; - -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.drawable.Drawable; -import com.google.android.material.textfield.TextInputLayout; -import androidx.cardview.widget.CardView; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import android.util.Pair; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.ProgressBar; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.adapter.EnumSelectionRecyclerViewAdapter; -import com.onesignal.sdktest.callback.AddPairAlertDialogCallback; -import com.onesignal.sdktest.callback.EnumSelectionCallback; -import com.onesignal.sdktest.callback.SendOutcomeAlertDialogCallback; -import com.onesignal.sdktest.callback.UpdateAlertDialogCallback; -import com.onesignal.sdktest.constant.Text; -import com.onesignal.sdktest.type.OutcomeEvent; -import com.onesignal.sdktest.type.ToastType; -import com.onesignal.sdktest.ui.CustomAlertDialogBuilder; -import com.onesignal.sdktest.ui.RecyclerViewBuilder; - -public class Dialog { - - private Font font; - private LayoutInflater layoutInflater; - private RecyclerViewBuilder recyclerViewBuilder; - private Toaster toaster; - - private Context context; - - public Dialog(Context context) { - this.context = context; - - font = new Font(context); - layoutInflater = LayoutInflater.from(context); - recyclerViewBuilder = new RecyclerViewBuilder(context); - toaster = new Toaster(context); - } - - public enum DialogAction { - LOGIN, - ADD, - UPDATE - } - - /** - * Create an AlertDialog for when the user updates a single value field - * Click OK to verify and update the field being updated - */ - public void createUpdateAlertDialog(final String content, final DialogAction action, final ProfileUtil.FieldType field, final UpdateAlertDialogCallback callback) { - View updateAlertDialogView = layoutInflater.inflate(R.layout.update_alert_dialog_layout, null, false); - - final TextInputLayout updateAlertDialogTextInputLayout = updateAlertDialogView.findViewById(R.id.update_alert_dialog_text_input_layout); - final EditText updateAlertDialogEditText = updateAlertDialogView.findViewById(R.id.update_alert_dialog_edit_text); - final ProgressBar updateAlertDialogProgressBar = updateAlertDialogView.findViewById(R.id.update_alert_dialog_progress_bar); - - String hintTitle = action == DialogAction.LOGIN ? field.getTitle() : "New " + field.getTitle(); - updateAlertDialogTextInputLayout.setHint(hintTitle); - updateAlertDialogEditText.setText(content); - - font.applyFont(updateAlertDialogTextInputLayout, font.saralaBold); - font.applyFont(updateAlertDialogEditText, font.saralaBold); - - final CustomAlertDialogBuilder updateAlertDialog = new CustomAlertDialogBuilder(context, updateAlertDialogView); - updateAlertDialog.setView(updateAlertDialogView); - updateAlertDialog.setIsCancelable(true); - updateAlertDialog.setCanceledOnTouchOutside(false); - - String buttonText = Text.BUTTON_UPDATE; - - switch (action) { - case ADD: - buttonText = Text.BUTTON_ADD; - break; - case UPDATE: - buttonText = Text.BUTTON_UPDATE; - break; - case LOGIN: - buttonText = Text.BUTTON_LOGIN; - break; - } - updateAlertDialog.setPositiveButton(buttonText, new DialogInterface.OnClickListener() { - @Override - public void onClick(final DialogInterface dialog, int which) { - toggleUpdateAlertDialogAttributes(true); - - final String newContent = updateAlertDialogEditText.getText().toString().trim(); - - if (newContent.equals(content)) { - InterfaceUtil.hideKeyboardFrom(context, updateAlertDialogEditText); - - toggleUpdateAlertDialogAttributes(false); - dialog.dismiss(); - } else if (ProfileUtil.isContentValid(field, updateAlertDialogTextInputLayout)) { - InterfaceUtil.hideKeyboardFrom(context, updateAlertDialogEditText); - toggleUpdateAlertDialogAttributes(false); - dialog.dismiss(); - callback.onSuccess(newContent); - } else { - toggleUpdateAlertDialogAttributes(false); - } - } - - private void toggleUpdateAlertDialogAttributes(boolean disableAttributes) { - int progressVisibility = disableAttributes ? View.VISIBLE : View.GONE; - updateAlertDialogProgressBar.setVisibility(progressVisibility); - - int buttonVisibility = disableAttributes ? View.GONE : View.VISIBLE; - updateAlertDialog.getPositiveButtonElement().setVisibility(buttonVisibility); - updateAlertDialog.getNegativeButtonElement().setVisibility(buttonVisibility); - - updateAlertDialog.getPositiveButtonElement().setEnabled(!disableAttributes); - updateAlertDialog.getNegativeButtonElement().setEnabled(!disableAttributes); - updateAlertDialog.setIsCancelable(!disableAttributes); - } - }).setNegativeButton(Text.BUTTON_CANCEL, null); - updateAlertDialog.show(); - updateAlertDialogEditText.requestFocus(); - } - - /** - * Create an AlertDialog for when the user updates a single value field - * Click OK to verify and update the field being updated - */ - public void createAddPairAlertDialog(String content, final ProfileUtil.FieldType field, final AddPairAlertDialogCallback callback) { - final View addPairAlertDialogView = layoutInflater.inflate(R.layout.add_pair_alert_dialog_layout, null, false); - - final TextView addPairAlertDialogTitleTextView = addPairAlertDialogView.findViewById(R.id.add_pair_alert_dialog_title_text_view); - final TextInputLayout addPairAlertDialogKeyTextInputLayout = addPairAlertDialogView.findViewById(R.id.add_pair_alert_dialog_key_text_input_layout); - final EditText addPairAlertDialogKeyEditText = addPairAlertDialogView.findViewById(R.id.add_pair_alert_dialog_key_edit_text); - final TextInputLayout addPairAlertDialogValueTextInputLayout = addPairAlertDialogView.findViewById(R.id.add_pair_alert_dialog_value_text_input_layout); - final EditText addPairAlertDialogValueEditText = addPairAlertDialogView.findViewById(R.id.add_pair_alert_dialog_value_edit_text); - final ProgressBar addPairAlertDialogProgressBar = addPairAlertDialogView.findViewById(R.id.add_pair_alert_dialog_progress_bar); - - addPairAlertDialogKeyTextInputLayout.setHint("Key"); - addPairAlertDialogValueTextInputLayout.setHint("Value"); - addPairAlertDialogTitleTextView.setText(content); - - font.applyFont(addPairAlertDialogTitleTextView, font.saralaBold); - font.applyFont(addPairAlertDialogKeyTextInputLayout, font.saralaBold); - font.applyFont(addPairAlertDialogKeyEditText, font.saralaBold); - font.applyFont(addPairAlertDialogValueTextInputLayout, font.saralaBold); - font.applyFont(addPairAlertDialogValueEditText, font.saralaBold); - - final CustomAlertDialogBuilder addPairAlertDialog = new CustomAlertDialogBuilder(context, addPairAlertDialogView); - addPairAlertDialog.setView(addPairAlertDialogView); - addPairAlertDialog.setIsCancelable(true); - addPairAlertDialog.setCanceledOnTouchOutside(false); - addPairAlertDialog.setPositiveButton(Text.BUTTON_ADD, new DialogInterface.OnClickListener() { - @Override - public void onClick(final DialogInterface dialog, int which) { - toggleUpdateAlertDialogAttributes(true); - - final String pairKey = addPairAlertDialogKeyEditText.getText().toString().trim(); - final String pairStringValue = addPairAlertDialogValueEditText.getText().toString().trim(); - - Object pairValue = pairStringValue; - if (Util.isBoolean(pairStringValue)) { - pairValue = Boolean.parseBoolean(pairStringValue.toLowerCase()); - } else if (Util.isInteger(pairStringValue)) { - pairValue = Long.parseLong(pairStringValue); - } else if (Util.isFloat(pairStringValue)) { - pairValue = Double.parseDouble(pairStringValue); - } - - if (ProfileUtil.isContentValid(field, addPairAlertDialogKeyTextInputLayout)) { - InterfaceUtil.hideKeyboardFrom(context, addPairAlertDialogView); - dialog.dismiss(); - callback.onSuccess(new Pair<>(pairKey, pairValue)); - } else { - toggleUpdateAlertDialogAttributes(false); - } - } - - private void toggleUpdateAlertDialogAttributes(boolean disableAttributes) { - int progressVisibility = disableAttributes ? View.VISIBLE : View.GONE; - addPairAlertDialogProgressBar.setVisibility(progressVisibility); - - int buttonVisibility = disableAttributes ? View.GONE : View.VISIBLE; - addPairAlertDialog.getPositiveButtonElement().setVisibility(buttonVisibility); - addPairAlertDialog.getNegativeButtonElement().setVisibility(buttonVisibility); - - addPairAlertDialog.getPositiveButtonElement().setEnabled(!disableAttributes); - addPairAlertDialog.getNegativeButtonElement().setEnabled(!disableAttributes); - addPairAlertDialog.setIsCancelable(!disableAttributes); - } - - }).setNegativeButton(Text.BUTTON_CANCEL, null); - addPairAlertDialog.show(); - addPairAlertDialogKeyEditText.requestFocus(); - } - - public void createSendOutcomeAlertDialog(final String content, final SendOutcomeAlertDialogCallback callback) { - final View sendOutcomeAlertDialogView = layoutInflater.inflate(R.layout.send_outcome_alert_dialog_layout, null, false); - - final CardView sendOutcomeDialogTitleCardView = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_selection_card_view); - final RelativeLayout sendOutcomeDialogTitleRelativeLayout = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_selection_relative_layout); - final TextView sendOutcomeDialogTitleTextView = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_selection_text_view); - final ImageView sendOutcomeDialogTitleArrowImageView = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_selection_arrow_image_view); - final RecyclerView sendOutcomeDialogSelectionRecyclerView = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_selection_recycler_view); - final LinearLayout sendOutcomeDialogSelectionContentLinearLayout = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_content_linear_layout); - final TextInputLayout sendOutcomeDialogNameTextInputLayout = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_name_text_input_layout); - final EditText sendOutcomeDialogNameEditText = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_name_edit_text); - final TextInputLayout sendOutcomeDialogValueTextInputLayout = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_value_text_input_layout); - final EditText sendOutcomeDialogValueEditText = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_value_edit_text); - final ProgressBar sendOutcomeDialogProgressBar = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_progress_bar); - - sendOutcomeDialogNameTextInputLayout.setHint("Name"); - sendOutcomeDialogValueTextInputLayout.setHint("Value"); - sendOutcomeDialogTitleTextView.setText(content); - - font.applyFont(sendOutcomeDialogTitleTextView, font.saralaBold); - font.applyFont(sendOutcomeDialogNameTextInputLayout, font.saralaBold); - font.applyFont(sendOutcomeDialogValueTextInputLayout, font.saralaBold); - - sendOutcomeDialogTitleCardView.setCardElevation(8f); - - recyclerViewBuilder.setupRecyclerView(sendOutcomeDialogSelectionRecyclerView, 3, false, true); - LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context); - sendOutcomeDialogSelectionRecyclerView.setLayoutManager(linearLayoutManager); - EnumSelectionRecyclerViewAdapter enumSelectionRecyclerViewAdapter = new EnumSelectionRecyclerViewAdapter(context, OutcomeEvent.values(), new EnumSelectionCallback() { - @Override - public void onSelection(String title) { - int nameVisibility = View.GONE; - int valueVisibility = View.GONE; - - OutcomeEvent outcomeEvent = OutcomeEvent.enumFromTitleString(title); - if (outcomeEvent == null) { - Drawable arrow = context.getResources().getDrawable(R.drawable.ic_chevron_down_white_48dp); - sendOutcomeDialogTitleArrowImageView.setImageDrawable(arrow); - sendOutcomeDialogTitleCardView.setCardElevation(0f); - sendOutcomeDialogSelectionRecyclerView.setVisibility(View.GONE); - sendOutcomeDialogSelectionContentLinearLayout.setVisibility(View.GONE); - - sendOutcomeDialogNameEditText.setVisibility(nameVisibility); - sendOutcomeDialogValueTextInputLayout.setVisibility(valueVisibility); - return; - } - - switch(outcomeEvent) { - case OUTCOME: - case UNIQUE_OUTCOME: - nameVisibility = View.VISIBLE; - break; - case OUTCOME_WITH_VALUE: - nameVisibility = View.VISIBLE; - valueVisibility = View.VISIBLE; - break; - } - - sendOutcomeDialogTitleTextView.setText(outcomeEvent.getTitle()); - - Drawable arrow = context.getResources().getDrawable(R.drawable.ic_chevron_down_white_48dp); - sendOutcomeDialogTitleArrowImageView.setImageDrawable(arrow); - sendOutcomeDialogTitleCardView.setCardElevation(0f); - sendOutcomeDialogSelectionRecyclerView.setVisibility(View.GONE); - - sendOutcomeDialogSelectionContentLinearLayout.setVisibility(View.VISIBLE); - sendOutcomeDialogNameTextInputLayout.setVisibility(nameVisibility); - sendOutcomeDialogNameEditText.setVisibility(nameVisibility); - sendOutcomeDialogValueTextInputLayout.setVisibility(valueVisibility); - sendOutcomeDialogValueEditText.setVisibility(valueVisibility); - } - }); - sendOutcomeDialogSelectionRecyclerView.setAdapter(enumSelectionRecyclerViewAdapter); - - sendOutcomeDialogTitleRelativeLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - boolean showMenu = sendOutcomeDialogSelectionRecyclerView.getVisibility() == View.GONE; - Drawable arrow = context.getResources().getDrawable(showMenu ? R.drawable.ic_chevron_up_white_48dp : R.drawable.ic_chevron_down_white_48dp); - int menuVisibility = showMenu ? View.VISIBLE : View.GONE; - int contentVisibility = showMenu ? View.GONE : View.VISIBLE; - float shadow = showMenu ? 8f : 0f; - - sendOutcomeDialogTitleArrowImageView.setImageDrawable(arrow); - sendOutcomeDialogTitleCardView.setCardElevation(shadow); - sendOutcomeDialogSelectionRecyclerView.setVisibility(menuVisibility); - sendOutcomeDialogSelectionContentLinearLayout.setVisibility(contentVisibility); - - - int nameVisibility = View.GONE; - int valueVisibility = View.GONE; - - String selectedTitle = sendOutcomeDialogTitleTextView.getText().toString(); - OutcomeEvent outcomeEvent = OutcomeEvent.enumFromTitleString(selectedTitle); - - if (outcomeEvent == null) { - sendOutcomeDialogSelectionContentLinearLayout.setVisibility(View.GONE); - return; - } - - if (!showMenu) { - switch (outcomeEvent) { - case OUTCOME: - case UNIQUE_OUTCOME: - nameVisibility = View.VISIBLE; - break; - case OUTCOME_WITH_VALUE: - nameVisibility = View.VISIBLE; - valueVisibility = View.VISIBLE; - break; - } - } - - sendOutcomeDialogSelectionContentLinearLayout.setVisibility(nameVisibility); - sendOutcomeDialogNameEditText.setVisibility(nameVisibility); - sendOutcomeDialogValueTextInputLayout.setVisibility(valueVisibility); - sendOutcomeDialogValueEditText.setVisibility(valueVisibility); - } - }); - - final CustomAlertDialogBuilder sendOutcomeAlertDialog = new CustomAlertDialogBuilder(context, sendOutcomeAlertDialogView); - sendOutcomeAlertDialog.setView(sendOutcomeAlertDialogView); - sendOutcomeAlertDialog.setIsCancelable(true); - sendOutcomeAlertDialog.setCanceledOnTouchOutside(false); - sendOutcomeAlertDialog.setPositiveButton(Text.BUTTON_SEND, new DialogInterface.OnClickListener() { - @Override - public void onClick(final DialogInterface dialog, int which) { - toggleUpdateAlertDialogAttributes(true); - - String selectedTitle = sendOutcomeDialogTitleTextView.getText().toString(); - OutcomeEvent outcomeEvent = OutcomeEvent.enumFromTitleString(selectedTitle); - - if (outcomeEvent == null) { - toaster.makeCustomViewToast("Please select an outcome type!", ToastType.ERROR); - toggleUpdateAlertDialogAttributes(false); - return; - } - - String name = sendOutcomeDialogNameEditText.getText().toString().trim(); - String value = sendOutcomeDialogValueEditText.getText().toString().trim(); - - if (name.isEmpty()) { - toaster.makeCustomViewToast("Please enter an outcome name!", ToastType.ERROR); - toggleUpdateAlertDialogAttributes(false); - return; - } - - if(callback.onSuccess(outcomeEvent, name, value)) { - toggleUpdateAlertDialogAttributes(false); - dialog.dismiss(); - InterfaceUtil.hideKeyboardFrom(context, sendOutcomeAlertDialogView); - } - } - - private void toggleUpdateAlertDialogAttributes(boolean disableAttributes) { - int progressVisibility = disableAttributes ? View.VISIBLE : View.GONE; - sendOutcomeDialogProgressBar.setVisibility(progressVisibility); - - int buttonVisibility = disableAttributes ? View.GONE : View.VISIBLE; - sendOutcomeAlertDialog.getPositiveButtonElement().setVisibility(buttonVisibility); - sendOutcomeAlertDialog.getNegativeButtonElement().setVisibility(buttonVisibility); - - sendOutcomeAlertDialog.getPositiveButtonElement().setEnabled(!disableAttributes); - sendOutcomeAlertDialog.getNegativeButtonElement().setEnabled(!disableAttributes); - sendOutcomeAlertDialog.setIsCancelable(!disableAttributes); - } - - }).setNegativeButton(Text.BUTTON_CANCEL, null); - sendOutcomeAlertDialog.show(); - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Font.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Font.java deleted file mode 100644 index aff8304a73..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Font.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.onesignal.sdktest.util; - -import android.content.Context; -import android.graphics.Typeface; -import com.google.android.material.textfield.TextInputLayout; -import android.view.View; -import android.widget.TextView; - -public class Font { - - public Typeface saralaRegular; - public Typeface saralaBold; - - - public Font(Context context) { - saralaRegular = Typeface.createFromAsset(context.getAssets(), "fonts/Sarala-Regular.ttf"); - saralaBold = Typeface.createFromAsset(context.getAssets(), "fonts/Sarala-Bold.ttf"); - } - - public void applyFont(View view, Typeface typeface) { - if (view instanceof TextView) { - ((TextView) view).setTypeface(typeface); - } else if (view instanceof TextInputLayout) { - ((TextInputLayout) view).setTypeface(typeface); - } - } - -} \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/IntentTo.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/IntentTo.java deleted file mode 100644 index d99f53b339..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/IntentTo.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.onesignal.sdktest.util; - -import android.app.Activity; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.os.Build; - -import androidx.annotation.RequiresApi; - -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.activity.MainActivity; - -public class IntentTo { - - private Context context; - - public IntentTo(Context context) { - this.context = context; - } - - @RequiresApi(api = Build.VERSION_CODES.N) - public void mainActivity() { - Intent mainActivityIntent = new Intent(context, MainActivity.class); - ComponentName componentName = mainActivityIntent.getComponent(); - mainActivityIntent = Intent.makeRestartActivityTask(componentName); - context.startActivity(mainActivityIntent); - ((Activity) context).overridePendingTransition(R.anim.fade_in, R.anim.fade_out); - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/InterfaceUtil.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/InterfaceUtil.java deleted file mode 100644 index 48bf7b918f..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/InterfaceUtil.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.onesignal.sdktest.util; - -import android.app.Activity; -import android.content.Context; -import android.view.View; -import android.view.inputmethod.InputMethodManager; - -public class InterfaceUtil { - - public static float getScreenDensity(Context context) { - return context.getResources().getDisplayMetrics().density; - } - - public static int getScreenWidth(Context context) { - return ((Activity) context).getWindowManager().getDefaultDisplay().getWidth(); - } - - public static int getScreenHeight(Context context) { - return ((Activity) context).getWindowManager().getDefaultDisplay().getHeight(); - } - - public static void showKeyboardFrom(Context context) { - InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); - inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0); - } - - public static void hideKeyboardFrom(Context context, View view) { - InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); - inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/ProfileUtil.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/ProfileUtil.java deleted file mode 100644 index 9a026c5f47..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/ProfileUtil.java +++ /dev/null @@ -1,148 +0,0 @@ -package com.onesignal.sdktest.util; - -import com.google.android.material.textfield.TextInputLayout; -import android.util.Patterns; - -import com.onesignal.sdktest.constant.Text; - -public class ProfileUtil { - - public enum FieldType { - - APP_ID("App Id"), - ALIAS("Alias"), - EMAIL("Email"), - SMS("SMS"), - EXTERNAL_USER_ID("External User Id"), - - TAG("Tags"), - TRIGGER("Triggers"); - - private final String title; - - FieldType(String title) { - this.title = title; - } - - public String getTitle() { - return title; - } - } - - private static boolean isAppIdValid(TextInputLayout appIdTextInputLayout) { - appIdTextInputLayout.setErrorEnabled(false); - if (appIdTextInputLayout.getEditText() != null) { - String appId = appIdTextInputLayout.getEditText().getText().toString().trim(); - if (appId.isEmpty()) { - appIdTextInputLayout.setError(Text.APP_ID_IS_REQUIRED); - return false; - } - if (appId.length() != 36) { - appIdTextInputLayout.setError(Text.INVALID_APP_ID); - return false; - } - } else { - appIdTextInputLayout.setError(Text.ERROR); - return false; - } - return true; - } - - private static boolean isAliasValid(TextInputLayout appIdTextInputLayout) { - appIdTextInputLayout.setErrorEnabled(false); - if (appIdTextInputLayout.getEditText() != null) { - String aliasLabel = appIdTextInputLayout.getEditText().getText().toString().trim(); - if (aliasLabel.isEmpty()) { - appIdTextInputLayout.setError(Text.ALIAS_LABEL_IS_REQUIRED); - return false; - } - } else { - appIdTextInputLayout.setError(Text.ERROR); - return false; - } - return true; - } - - public static boolean isEmailValid(TextInputLayout emailTextInputLayout) { - emailTextInputLayout.setErrorEnabled(false); - if (emailTextInputLayout.getEditText() != null) { - String email = emailTextInputLayout.getEditText().getText().toString().trim(); - if (email.isEmpty()) { - emailTextInputLayout.setError(Text.EMAIL_IS_REQUIRED); - return false; - } - if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) { - emailTextInputLayout.setError(Text.INVALID_EMAIL); - return false; - } - } else { - emailTextInputLayout.setError(Text.ERROR); - return false; - } - return true; - } - - public static boolean isSMSValid(TextInputLayout smsTextInputLayout) { - smsTextInputLayout.setErrorEnabled(false); - if (smsTextInputLayout.getEditText() != null) { - String smsNumber = smsTextInputLayout.getEditText().getText().toString().trim(); - if (smsNumber.isEmpty()) { - smsTextInputLayout.setError(Text.SMS_IS_REQUIRED); - return false; - } - } else { - smsTextInputLayout.setError(Text.ERROR); - return false; - } - return true; - } - - private static boolean isExternalUserIdValid(TextInputLayout externalUserIdTextInputLayout) { - externalUserIdTextInputLayout.setErrorEnabled(false); - if (externalUserIdTextInputLayout.getEditText() != null) { - String externalUserId = externalUserIdTextInputLayout.getEditText().getText().toString().trim(); - if (externalUserId.isEmpty()) { - externalUserIdTextInputLayout.setError(Text.EXTERNAL_USER_ID_IS_REQUIRED); - return false; - } - } else { - externalUserIdTextInputLayout.setError(Text.ERROR); - return false; - } - return true; - } - - private static boolean isKeyValid(TextInputLayout keyTextInputLayout) { - keyTextInputLayout.setErrorEnabled(false); - if (keyTextInputLayout.getEditText() != null) { - String key = keyTextInputLayout.getEditText().getText().toString().trim(); - if (key.isEmpty()) { - keyTextInputLayout.setError(Text.KEY_IS_REQUIRED); - return false; - } - } else { - keyTextInputLayout.setError(Text.ERROR); - return false; - } - return true; - } - - static boolean isContentValid(FieldType field, TextInputLayout alertDialogTextInputLayout) { - switch (field) { - case APP_ID: - return isAppIdValid(alertDialogTextInputLayout); - case ALIAS: - return isAliasValid(alertDialogTextInputLayout); - case EMAIL: - return isEmailValid(alertDialogTextInputLayout); - case SMS: - return isSMSValid(alertDialogTextInputLayout); - case EXTERNAL_USER_ID: - return isExternalUserIdValid(alertDialogTextInputLayout); - case TAG: - case TRIGGER: - return isKeyValid(alertDialogTextInputLayout); - } - return false; - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/SharedPreferenceUtil.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/SharedPreferenceUtil.java deleted file mode 100644 index 5cb286d7bf..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/SharedPreferenceUtil.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.onesignal.sdktest.util; - -import android.content.Context; -import android.content.SharedPreferences; - -import com.onesignal.sdktest.constant.Text; - -public class SharedPreferenceUtil { - - private static final String APP_SHARED_PREFS = "com.onesignal.sdktest"; - - public static final String OS_APP_ID_SHARED_PREF = "OS_APP_ID_SHARED_PREF"; - private static final String PRIVACY_CONSENT_SHARED_PREF = "PRIVACY_CONSENT_SHARED_PREF"; - public static final String USER_EXTERNAL_USER_ID_SHARED_PREF = "USER_EXTERNAL_USER_ID_SHARED_PREF"; - private static final String LOCATION_SHARED_PREF = "LOCATION_SHARED_PREF"; - private static final String IN_APP_MESSAGING_PAUSED_PREF = "IN_APP_MESSAGING_PAUSED_PREF"; - - private static SharedPreferences getSharedPreference(Context context) { - return context.getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE); - } - - public static boolean exists(Context context, String key) { - return getSharedPreference(context).contains(key); - } - - public static String getOneSignalAppId(Context context) { - return getSharedPreference(context).getString(OS_APP_ID_SHARED_PREF, "77e32082-ea27-42e3-a898-c72e141824ef"); - } - - public static boolean getUserPrivacyConsent(Context context) { - return getSharedPreference(context).getBoolean(PRIVACY_CONSENT_SHARED_PREF, false); - } - - public static String getCachedUserExternalUserId(Context context) { - return getSharedPreference(context).getString(USER_EXTERNAL_USER_ID_SHARED_PREF, Text.EMPTY); - } - - public static boolean getCachedLocationSharedStatus(Context context) { - return getSharedPreference(context).getBoolean(LOCATION_SHARED_PREF, false); - } - - public static boolean getCachedInAppMessagingPausedStatus(Context context) { - return getSharedPreference(context).getBoolean(IN_APP_MESSAGING_PAUSED_PREF, true); - } - - public static void cacheOneSignalAppId(Context context, String appId) { - getSharedPreference(context).edit().putString(OS_APP_ID_SHARED_PREF, appId).apply(); - } - - public static void cacheUserPrivacyConsent(Context context, boolean privacyConsent) { - getSharedPreference(context).edit().putBoolean(PRIVACY_CONSENT_SHARED_PREF, privacyConsent).apply(); - } - - public static void cacheUserExternalUserId(Context context, String userId) { - getSharedPreference(context).edit().putString(USER_EXTERNAL_USER_ID_SHARED_PREF, userId).apply(); - } - - public static void cacheLocationSharedStatus(Context context, boolean subscribed) { - getSharedPreference(context).edit().putBoolean(LOCATION_SHARED_PREF, subscribed).apply(); - } - - public static void cacheInAppMessagingPausedStatus(Context context, boolean paused) { - getSharedPreference(context).edit().putBoolean(IN_APP_MESSAGING_PAUSED_PREF, paused).apply(); - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Toaster.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Toaster.java deleted file mode 100644 index d41aafd1be..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Toaster.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.onesignal.sdktest.util; - -import android.app.Activity; -import android.content.Context; -import android.graphics.drawable.Drawable; -import androidx.cardview.widget.CardView; -import android.view.Gravity; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; -import android.widget.Toast; - -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.constant.Text; -import com.onesignal.sdktest.type.ToastType; - -public class Toaster { - - private Context context; - private Font font; - - public Toaster(Context context) { - this.context = context; - - font = new Font(context); - } - - public void makeToast(String bread) { - Toast.makeText(context, bread, Toast.LENGTH_SHORT).show(); - } - - public void makeLongToast(String bread) { - Toast.makeText(context, bread, Toast.LENGTH_LONG).show(); - } - - public void makeCustomViewToast(String bread, ToastType toastType) { - View toastView = ((Activity) context).getLayoutInflater().inflate(R.layout.toaster_toast_card_layout, null, false); - CardView toastCardView = toastView.findViewById(R.id.toaster_toast_card_view); - ImageView toastIcon = toastView.findViewById(R.id.toaster_toast_image_view); - TextView toastTextView = toastView.findViewById(R.id.toaster_toast_text_view); - - int color = context.getResources().getColor(toastType.getColor()); - toastCardView.setCardBackgroundColor(color); - - toastTextView.setTypeface(font.saralaBold); - toastTextView.setText(bread); - - Drawable icon = context.getResources().getDrawable(toastType.getIcon()); - toastIcon.setImageDrawable(icon); - - Toast toast = Toast.makeText(context, Text.EMPTY, Toast.LENGTH_LONG); - toast.setGravity(Gravity.CENTER, 0, (int) (InterfaceUtil.getScreenHeight(context) * 0.25f)); - toast.setView(toastView); - toast.show(); - } - -} \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Util.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Util.java deleted file mode 100644 index 737c927a78..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Util.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.onesignal.sdktest.util; - -public class Util { - - public static boolean isBoolean(String string) { - string = string.toLowerCase(); - return (string.equals("true") || string.equals("false")); - } - - public static boolean isInteger(String string) { - try { - Long.parseLong(string); - return true; - } catch (NumberFormatException e) { - return false; - } - } - - public static boolean isFloat(String string) { - try { - Double.parseDouble(string); - return true; - } catch (NumberFormatException e) { - return false; - } - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/res/anim/fade_in.xml b/Examples/OneSignalDemo/app/src/main/res/anim/fade_in.xml deleted file mode 100644 index 508851c6d5..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/anim/fade_in.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/res/anim/fade_out.xml b/Examples/OneSignalDemo/app/src/main/res/anim/fade_out.xml deleted file mode 100644 index 3be6cf46b7..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/anim/fade_out.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/res/drawable-v21/ripple_selector_red_white.xml b/Examples/OneSignalDemo/app/src/main/res/drawable-v21/ripple_selector_red_white.xml deleted file mode 100644 index 9ee1d9ebe6..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/drawable-v21/ripple_selector_red_white.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - diff --git a/Examples/OneSignalDemo/app/src/main/res/drawable-v21/ripple_selector_white_red.xml b/Examples/OneSignalDemo/app/src/main/res/drawable-v21/ripple_selector_white_red.xml deleted file mode 100644 index 80114e3322..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/drawable-v21/ripple_selector_white_red.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - diff --git a/Examples/OneSignalDemo/app/src/main/res/drawable/divider.xml b/Examples/OneSignalDemo/app/src/main/res/drawable/divider.xml deleted file mode 100644 index 453e94ec1c..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/drawable/divider.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/res/drawable/no_divider.xml b/Examples/OneSignalDemo/app/src/main/res/drawable/no_divider.xml deleted file mode 100644 index d4943f5968..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/drawable/no_divider.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/res/drawable/ripple_selector_red_white.xml b/Examples/OneSignalDemo/app/src/main/res/drawable/ripple_selector_red_white.xml deleted file mode 100644 index f3a53ae07f..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/drawable/ripple_selector_red_white.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/res/drawable/ripple_selector_white_red.xml b/Examples/OneSignalDemo/app/src/main/res/drawable/ripple_selector_white_red.xml deleted file mode 100644 index b042e412eb..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/drawable/ripple_selector_white_red.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/res/layout/activity_secondary.xml b/Examples/OneSignalDemo/app/src/main/res/layout/activity_secondary.xml deleted file mode 100644 index 267817f25b..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/layout/activity_secondary.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/res/layout/add_pair_alert_dialog_layout.xml b/Examples/OneSignalDemo/app/src/main/res/layout/add_pair_alert_dialog_layout.xml deleted file mode 100644 index dd54164959..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/layout/add_pair_alert_dialog_layout.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/res/layout/enum_selection_recycler_view_item_layout.xml b/Examples/OneSignalDemo/app/src/main/res/layout/enum_selection_recycler_view_item_layout.xml deleted file mode 100644 index 6dbbc6d3a8..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/layout/enum_selection_recycler_view_item_layout.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/res/layout/main_activity_layout.xml b/Examples/OneSignalDemo/app/src/main/res/layout/main_activity_layout.xml deleted file mode 100644 index ee4ce93cb5..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/layout/main_activity_layout.xml +++ /dev/null @@ -1,1275 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -