|
1 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
4 |
|
5 package org.mozilla.gecko.fxa.activities; |
|
6 |
|
7 import org.mozilla.gecko.background.common.log.Logger; |
|
8 import org.mozilla.gecko.fxa.FirefoxAccounts; |
|
9 import org.mozilla.gecko.fxa.authenticator.AndroidFxAccount; |
|
10 import org.mozilla.gecko.sync.setup.activities.LocaleAware.LocaleAwareFragmentActivity; |
|
11 |
|
12 import android.accounts.Account; |
|
13 import android.annotation.TargetApi; |
|
14 import android.app.ActionBar; |
|
15 import android.content.Intent; |
|
16 import android.os.Build; |
|
17 import android.os.Bundle; |
|
18 import android.view.MenuItem; |
|
19 |
|
20 /** |
|
21 * Activity which displays account status. |
|
22 */ |
|
23 public class FxAccountStatusActivity extends LocaleAwareFragmentActivity { |
|
24 private static final String LOG_TAG = FxAccountStatusActivity.class.getSimpleName(); |
|
25 |
|
26 protected FxAccountStatusFragment statusFragment; |
|
27 |
|
28 @Override |
|
29 protected void onCreate(Bundle savedInstanceState) { |
|
30 super.onCreate(savedInstanceState); |
|
31 |
|
32 // Display the fragment as the content. |
|
33 statusFragment = new FxAccountStatusFragment(); |
|
34 getSupportFragmentManager() |
|
35 .beginTransaction() |
|
36 .replace(android.R.id.content, statusFragment) |
|
37 .commit(); |
|
38 |
|
39 maybeSetHomeButtonEnabled(); |
|
40 } |
|
41 |
|
42 /** |
|
43 * Sufficiently recent Android versions need additional code to receive taps |
|
44 * on the status bar to go "up". See <a |
|
45 * href="http://stackoverflow.com/a/8953148">this stackoverflow answer</a> for |
|
46 * more information. |
|
47 */ |
|
48 @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) |
|
49 protected void maybeSetHomeButtonEnabled() { |
|
50 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) { |
|
51 Logger.debug(LOG_TAG, "Not enabling home button; version too low."); |
|
52 return; |
|
53 } |
|
54 final ActionBar actionBar = getActionBar(); |
|
55 if (actionBar != null) { |
|
56 Logger.debug(LOG_TAG, "Enabling home button."); |
|
57 actionBar.setHomeButtonEnabled(true); |
|
58 return; |
|
59 } |
|
60 Logger.debug(LOG_TAG, "Not enabling home button."); |
|
61 } |
|
62 |
|
63 @Override |
|
64 public void onResume() { |
|
65 super.onResume(); |
|
66 |
|
67 final AndroidFxAccount fxAccount = getAndroidFxAccount(); |
|
68 if (fxAccount == null) { |
|
69 Logger.warn(LOG_TAG, "Could not get Firefox Account."); |
|
70 |
|
71 // Gracefully redirect to get started. |
|
72 Intent intent = new Intent(this, FxAccountGetStartedActivity.class); |
|
73 // Per http://stackoverflow.com/a/8992365, this triggers a known bug with |
|
74 // the soft keyboard not being shown for the started activity. Why, Android, why? |
|
75 intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); |
|
76 startActivity(intent); |
|
77 |
|
78 setResult(RESULT_CANCELED); |
|
79 finish(); |
|
80 return; |
|
81 } |
|
82 statusFragment.refresh(fxAccount); |
|
83 } |
|
84 |
|
85 /** |
|
86 * Helper to fetch (unique) Android Firefox Account if one exists, or return null. |
|
87 */ |
|
88 protected AndroidFxAccount getAndroidFxAccount() { |
|
89 Account account = FirefoxAccounts.getFirefoxAccount(this); |
|
90 if (account == null) { |
|
91 return null; |
|
92 } |
|
93 return new AndroidFxAccount(this, account); |
|
94 } |
|
95 |
|
96 @Override |
|
97 public boolean onOptionsItemSelected(MenuItem item) { |
|
98 int itemId = item.getItemId(); |
|
99 switch (itemId) { |
|
100 case android.R.id.home: |
|
101 finish(); |
|
102 return true; |
|
103 } |
|
104 return super.onOptionsItemSelected(item); |
|
105 } |
|
106 } |