diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /mobile/android/base/java/org/mozilla/gecko/tabqueue/TabQueuePrompt.java | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'mobile/android/base/java/org/mozilla/gecko/tabqueue/TabQueuePrompt.java')
-rw-r--r-- | mobile/android/base/java/org/mozilla/gecko/tabqueue/TabQueuePrompt.java | 215 |
1 files changed, 215 insertions, 0 deletions
diff --git a/mobile/android/base/java/org/mozilla/gecko/tabqueue/TabQueuePrompt.java b/mobile/android/base/java/org/mozilla/gecko/tabqueue/TabQueuePrompt.java new file mode 100644 index 000000000..ead16ccba --- /dev/null +++ b/mobile/android/base/java/org/mozilla/gecko/tabqueue/TabQueuePrompt.java @@ -0,0 +1,215 @@ +/* -*- 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.tabqueue; + +import org.mozilla.gecko.GeckoSharedPrefs; +import org.mozilla.gecko.Locales; +import org.mozilla.gecko.R; +import org.mozilla.gecko.Telemetry; +import org.mozilla.gecko.TelemetryContract; + +import android.annotation.TargetApi; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.provider.Settings; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.widget.Toast; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.AnimatorSet; +import android.animation.ObjectAnimator; + +public class TabQueuePrompt extends Locales.LocaleAwareActivity { + public static final String LOGTAG = "Gecko" + TabQueuePrompt.class.getSimpleName(); + + private static final int SETTINGS_REQUEST_CODE = 1; + + // Flag set during animation to prevent animation multiple-start. + private boolean isAnimating; + + private View containerView; + private View buttonContainer; + private View enabledConfirmation; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + showTabQueueEnablePrompt(); + } + + private void showTabQueueEnablePrompt() { + setContentView(R.layout.tab_queue_prompt); + + final View okButton = findViewById(R.id.ok_button); + okButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + onConfirmButtonPressed(); + Telemetry.sendUIEvent(TelemetryContract.Event.ACTION, TelemetryContract.Method.BUTTON, "tabqueue_prompt_yes"); + } + }); + findViewById(R.id.cancel_button).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Telemetry.sendUIEvent(TelemetryContract.Event.ACTION, TelemetryContract.Method.BUTTON, "tabqueue_prompt_no"); + setResult(TabQueueHelper.TAB_QUEUE_NO); + finish(); + } + }); + final View settingsButton = findViewById(R.id.settings_button); + settingsButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + onSettingsButtonPressed(); + } + }); + + final View tipView = findViewById(R.id.tip_text); + final View settingsPermitView = findViewById(R.id.settings_permit_text); + + if (TabQueueHelper.canDrawOverlays(this)) { + okButton.setVisibility(View.VISIBLE); + settingsButton.setVisibility(View.GONE); + tipView.setVisibility(View.VISIBLE); + settingsPermitView.setVisibility(View.GONE); + } else { + okButton.setVisibility(View.GONE); + settingsButton.setVisibility(View.VISIBLE); + tipView.setVisibility(View.GONE); + settingsPermitView.setVisibility(View.VISIBLE); + } + + containerView = findViewById(R.id.tab_queue_container); + buttonContainer = findViewById(R.id.button_container); + enabledConfirmation = findViewById(R.id.enabled_confirmation); + + 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() { + enabledConfirmation.setVisibility(View.VISIBLE); + enabledConfirmation.setAlpha(0); + + final Animator buttonsAlphaAnimator = ObjectAnimator.ofFloat(buttonContainer, "alpha", 0); + buttonsAlphaAnimator.setDuration(300); + + final Animator messagesAlphaAnimator = ObjectAnimator.ofFloat(enabledConfirmation, "alpha", 1); + messagesAlphaAnimator.setDuration(300); + messagesAlphaAnimator.setStartDelay(200); + + final AnimatorSet set = new AnimatorSet(); + set.playTogether(buttonsAlphaAnimator, messagesAlphaAnimator); + + set.addListener(new AnimatorListenerAdapter() { + + @Override + public void onAnimationEnd(Animator animation) { + + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + slideOut(); + setResult(TabQueueHelper.TAB_QUEUE_YES); + } + }, 1000); + } + }); + + set.start(); + } + + @TargetApi(Build.VERSION_CODES.M) + private void onSettingsButtonPressed() { + Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); + intent.setData(Uri.parse("package:" + getPackageName())); + startActivityForResult(intent, SETTINGS_REQUEST_CODE); + + Toast.makeText(this, R.string.tab_queue_prompt_permit_drawing_over_apps, Toast.LENGTH_LONG).show(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode != SETTINGS_REQUEST_CODE) { + return; + } + + if (TabQueueHelper.canDrawOverlays(this)) { + // User granted the permission in Android's settings. + Telemetry.sendUIEvent(TelemetryContract.Event.ACTION, TelemetryContract.Method.BUTTON, "tabqueue_prompt_yes"); + + setResult(TabQueueHelper.TAB_QUEUE_YES); + finish(); + } + } + + /** + * 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; + } +}
\ No newline at end of file |