summaryrefslogtreecommitdiffstats
path: root/mobile/android/base/java/org/mozilla/gecko/trackingprotection/TrackingProtectionPrompt.java
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/base/java/org/mozilla/gecko/trackingprotection/TrackingProtectionPrompt.java')
-rw-r--r--mobile/android/base/java/org/mozilla/gecko/trackingprotection/TrackingProtectionPrompt.java131
1 files changed, 131 insertions, 0 deletions
diff --git a/mobile/android/base/java/org/mozilla/gecko/trackingprotection/TrackingProtectionPrompt.java b/mobile/android/base/java/org/mozilla/gecko/trackingprotection/TrackingProtectionPrompt.java
new file mode 100644
index 000000000..dcc62b6d4
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/trackingprotection/TrackingProtectionPrompt.java
@@ -0,0 +1,131 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.gecko.trackingprotection;
+
+import org.mozilla.gecko.Locales;
+import org.mozilla.gecko.R;
+import org.mozilla.gecko.preferences.GeckoPreferences;
+import org.mozilla.gecko.util.HardwareUtils;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.MotionEvent;
+import android.view.View;
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
+
+public class TrackingProtectionPrompt extends Locales.LocaleAwareActivity {
+ public static final String LOGTAG = "Gecko" + TrackingProtectionPrompt.class.getSimpleName();
+
+ // Flag set during animation to prevent animation multiple-start.
+ private boolean isAnimating;
+
+ private View containerView;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ showPrompt();
+ }
+
+ private void showPrompt() {
+ setContentView(R.layout.tracking_protection_prompt);
+
+ findViewById(R.id.ok_button).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ onConfirmButtonPressed();
+ }
+ });
+ findViewById(R.id.link_text).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ slideOut();
+ final Intent settingsIntent = new Intent(TrackingProtectionPrompt.this, GeckoPreferences.class);
+ GeckoPreferences.setResourceToOpen(settingsIntent, "preferences_privacy");
+ startActivity(settingsIntent);
+
+ // Don't use a transition to settings if we're on a device where that
+ // would look bad.
+ if (HardwareUtils.IS_KINDLE_DEVICE) {
+ overridePendingTransition(0, 0);
+ }
+ }
+ });
+
+ containerView = findViewById(R.id.tracking_protection_inner_container);
+
+ containerView.setTranslationY(500);
+ containerView.setAlpha(0);
+
+ final Animator translateAnimator = ObjectAnimator.ofFloat(containerView, "translationY", 0);
+ translateAnimator.setDuration(400);
+
+ final Animator alphaAnimator = ObjectAnimator.ofFloat(containerView, "alpha", 1);
+ alphaAnimator.setStartDelay(200);
+ alphaAnimator.setDuration(600);
+
+ final AnimatorSet set = new AnimatorSet();
+ set.playTogether(alphaAnimator, translateAnimator);
+ set.setStartDelay(400);
+
+ set.start();
+ }
+
+ @Override
+ public void finish() {
+ super.finish();
+
+ // Don't perform an activity-dismiss animation.
+ overridePendingTransition(0, 0);
+ }
+
+ private void onConfirmButtonPressed() {
+ slideOut();
+ }
+
+ /**
+ * Slide the overlay down off the screen and destroy it.
+ */
+ private void slideOut() {
+ if (isAnimating) {
+ return;
+ }
+
+ isAnimating = true;
+
+ ObjectAnimator animator = ObjectAnimator.ofFloat(containerView, "translationY", containerView.getHeight());
+ animator.addListener(new AnimatorListenerAdapter() {
+
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ finish();
+ }
+
+ });
+ animator.start();
+ }
+
+ /**
+ * Close the dialog if back is pressed.
+ */
+ @Override
+ public void onBackPressed() {
+ slideOut();
+ }
+
+ /**
+ * Close the dialog if the anything that isn't a button is tapped.
+ */
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ slideOut();
+ return true;
+ }
+ }