summaryrefslogtreecommitdiffstats
path: root/mobile/android/base/java/org/mozilla/gecko/trackingprotection/TrackingProtectionPrompt.java
blob: dcc62b6d4439851061a48bb8b4f720bce8255df6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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;
        }
    }