blob: 16c83308096970d3811dbf031613481b7a0fb7f6 [file] [log] [blame]
Jose Pascoal91aff132014-10-02 17:19:47 +01001package com.fairphone.updater;
2
Jose Pascoalad4ea572014-12-16 20:31:48 +00003import android.content.Intent;
Jose Pascoal2666b892014-10-02 21:05:08 +01004import android.content.SharedPreferences;
5import android.content.SharedPreferences.Editor;
Jose Pascoal91aff132014-10-02 17:19:47 +01006import android.os.Bundle;
7import android.support.v4.app.Fragment;
8import android.support.v4.app.FragmentActivity;
Jose Pascoal3bc3a842014-10-16 19:03:21 +01009import android.support.v4.app.FragmentManager;
Jose Pascoal91aff132014-10-02 17:19:47 +010010import android.support.v4.app.FragmentTransaction;
Jose Pascoalaa579a82014-11-05 22:17:16 +000011import android.text.TextUtils;
Jose Pascoal2666b892014-10-02 21:05:08 +010012import android.util.Log;
13import android.view.View;
Pedro Arelo6d2bac92014-10-09 16:48:27 +010014import android.view.View.OnClickListener;
Jose Pascoalc172d892014-11-17 17:36:12 +000015import android.widget.ImageButton;
Jose Pascoal2666b892014-10-02 21:05:08 +010016import android.widget.TextView;
17import android.widget.Toast;
Jose Pascoal91aff132014-10-02 17:19:47 +010018
Jose Pascoal2666b892014-10-02 21:05:08 +010019import com.crashlytics.android.Crashlytics;
Jose Pascoal87758742015-01-28 20:00:22 +000020import com.crashlytics.android.internal.f;
Jose Pascoal02d86242014-12-17 18:50:08 +000021import com.fairphone.updater.data.DownloadableItem;
Tiago Costa3add03e2014-12-16 12:05:23 +000022import com.fairphone.updater.data.Store;
Jose Pascoal7bf83a02014-10-13 18:30:18 +010023import com.fairphone.updater.data.UpdaterData;
24import com.fairphone.updater.data.Version;
25import com.fairphone.updater.data.VersionParserHelper;
Jose Pascoalb690af12014-10-06 18:29:26 +010026import com.fairphone.updater.fragments.DownloadAndRestartFragment;
Tiago Costa3855faa2014-11-14 17:55:05 +000027import com.fairphone.updater.fragments.InfoPopupDialog;
Jose Pascoal91aff132014-10-02 17:19:47 +010028import com.fairphone.updater.fragments.MainFragment;
Tiago Costadaaa32c2015-01-08 12:12:24 +000029import com.fairphone.updater.fragments.VersionDetailFragment;
Tiago Costa3855faa2014-11-14 17:55:05 +000030import com.fairphone.updater.fragments.VersionDetailFragment.DetailLayoutType;
Jose Pascoalad4ea572014-12-16 20:31:48 +000031import com.fairphone.updater.gappsinstaller.GappsInstallerHelper;
Jose Pascoale4c48e32014-10-03 19:55:39 +010032import com.fairphone.updater.tools.Utils;
Jose Pascoal91aff132014-10-02 17:19:47 +010033
Filipe Gonçalvesafeac2c2015-01-27 17:49:53 +000034import java.util.List;
35
Jose Pascoal7bf83a02014-10-13 18:30:18 +010036public class FairphoneUpdater extends FragmentActivity
Pedro Arelo6d2bac92014-10-09 16:48:27 +010037{
Jose Pascoal91aff132014-10-02 17:19:47 +010038
Jose Pascoal7bf83a02014-10-13 18:30:18 +010039 private static final String TAG = FairphoneUpdater.class.getSimpleName();
Jose Pascoal2666b892014-10-02 21:05:08 +010040
Pedro Arelo6d2bac92014-10-09 16:48:27 +010041 public static final String FAIRPHONE_UPDATER_NEW_VERSION_RECEIVED = "FairphoneUpdater.NEW.VERSION.RECEIVED";
Jose Pascoal2666b892014-10-02 21:05:08 +010042
Tiago Costa9008b612014-11-14 18:19:50 +000043 public static final String PREFERENCE_FIRST_TIME_ANDROID = "FirstTimeAndroid";
Jose Pascoal02d86242014-12-17 18:50:08 +000044
Tiago Costa9008b612014-11-14 18:19:50 +000045 public static final String PREFERENCE_FIRST_TIME_FAIRPHONE = "FirstTimeFairphone";
Jose Pascoal02d86242014-12-17 18:50:08 +000046
Tiago Costadaaa32c2015-01-08 12:12:24 +000047 public static final String PREFERENCE_FIRST_TIME_APP_STORE = "FirstTimeAppStore";
48
Pedro Arelo6d2bac92014-10-09 16:48:27 +010049 public static final String PREFERENCE_CURRENT_UPDATER_STATE = "CurrentUpdaterState";
Jose Pascoal2666b892014-10-02 21:05:08 +010050
Pedro Arelo6d2bac92014-10-09 16:48:27 +010051 private static final String PREFERENCE_DOWNLOAD_ID = "LatestUpdateDownloadId";
Jose Pascoal2666b892014-10-02 21:05:08 +010052
Pedro Arelo6d2bac92014-10-09 16:48:27 +010053 public static final String FAIRPHONE_UPDATER_PREFERENCES = "FairphoneUpdaterPreferences";
Jose Pascoal2666b892014-10-02 21:05:08 +010054
Pedro Arelo6d2bac92014-10-09 16:48:27 +010055 public static final String PREFERENCE_SELECTED_VERSION_NUMBER = "SelectedVersionNumber";
Jose Pascoal2666b892014-10-02 21:05:08 +010056
Pedro Arelo6d2bac92014-10-09 16:48:27 +010057 public static final String PREFERENCE_SELECTED_VERSION_TYPE = "SelectedVersionImageType";
Jose Pascoal2666b892014-10-02 21:05:08 +010058
Pedro Arelo6d2bac92014-10-09 16:48:27 +010059 public static final String FAIRPHONE_UPDATER_CONFIG_DOWNLOAD_FAILED = "FairphoneUpdater.Config.File.Download.FAILED";
Jose Pascoal2666b892014-10-02 21:05:08 +010060
Pedro Arelo6d2bac92014-10-09 16:48:27 +010061 public static final String FAIRPHONE_UPDATER_CONFIG_DOWNLOAD_LINK = "FairphoneUpdater.ConfigFile.Download.LINK";
Jose Pascoal02d86242014-12-17 18:50:08 +000062
Jose Pascoalad4ea572014-12-16 20:31:48 +000063 public static final String PREFERENCE_SELECTED_STORE_NUMBER = "SelectedStoreNumber";
Filipe Gonçalvesafeac2c2015-01-27 17:49:53 +000064
65 public static final String PREFERENCE_OTA_DOWNLOAD_URL = "OtaDownloadUrl";
Jose Pascoal87758742015-01-28 20:00:22 +000066
67 private static final String TAG_FIRST_FRAGMENT = "FIRST_FRAGMENT";
Filipe Gonçalvesafeac2c2015-01-27 17:49:53 +000068
Jose Pascoal2666b892014-10-02 21:05:08 +010069
Pedro Arelo6d2bac92014-10-09 16:48:27 +010070 public static enum UpdaterState
71 {
72 NORMAL, DOWNLOAD, PREINSTALL
73 };
Jose Pascoal2666b892014-10-02 21:05:08 +010074
Pedro Arelo6d2bac92014-10-09 16:48:27 +010075 private Version mDeviceVersion;
Pedro Arelo6d2bac92014-10-09 16:48:27 +010076 private Version mLatestVersion;
Pedro Arelo6d2bac92014-10-09 16:48:27 +010077 private Version mSelectedVersion;
Jose Pascoal2666b892014-10-02 21:05:08 +010078
Pedro Arelo6d2bac92014-10-09 16:48:27 +010079 private UpdaterState mCurrentState;
Pedro Arelo6d2bac92014-10-09 16:48:27 +010080 private SharedPreferences mSharedPreferences;
Jose Pascoal2666b892014-10-02 21:05:08 +010081
Pedro Arelo6d2bac92014-10-09 16:48:27 +010082 private long mLatestUpdateDownloadId;
Jose Pascoal2666b892014-10-02 21:05:08 +010083
Pedro Arelo6d2bac92014-10-09 16:48:27 +010084 public static boolean DEV_MODE_ENABLED;
85 private int mIsDevModeCounter;
Filipe Gonçalvesafeac2c2015-01-27 17:49:53 +000086
Jose Pascoal87758742015-01-28 20:00:22 +000087 public String mOtaDownloadUrl;
Jose Pascoal2666b892014-10-02 21:05:08 +010088
Pedro Arelo6d2bac92014-10-09 16:48:27 +010089 private TextView headerMainFairphoneText;
90 private TextView headerMainAndroidText;
91 private TextView headerFairphoneText;
92 private TextView headerAndroidText;
Tiago Costa6d360e22014-12-15 14:32:51 +000093 private TextView headerAppStoreText;
Pedro Arelo6d2bac92014-10-09 16:48:27 +010094 private TextView headerOtherOSText;
Jose Pascoalc172d892014-11-17 17:36:12 +000095 private ImageButton headerFairphoneInfoButton;
96 private ImageButton headerAndroidInfoButton;
Jose Pascoal02d86242014-12-17 18:50:08 +000097
Tiago Costa9008b612014-11-14 18:19:50 +000098 private boolean mIsFirstTimeAndroid;
99 private boolean mIsFirstTimeFairphone;
Tiago Costadaaa32c2015-01-08 12:12:24 +0000100 private boolean mIsFirstTimeAppStore;
Jose Pascoal02d86242014-12-17 18:50:08 +0000101
Jose Pascoalad4ea572014-12-16 20:31:48 +0000102 private Store mSelectedStore;
Jose Pascoal02d86242014-12-17 18:50:08 +0000103
104 private TextView headerMainAppStoreText;
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100105 public static enum HeaderType
106 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000107 MAIN_FAIRPHONE, MAIN_ANDROID, MAIN_APP_STORE, FAIRPHONE, ANDROID, OTHER_OS, APP_STORE
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100108 };
Jose Pascoal2666b892014-10-02 21:05:08 +0100109
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100110 @Override
111 protected void onCreate(Bundle savedInstanceState)
112 {
113 super.onCreate(savedInstanceState);
Jose Pascoal87758742015-01-28 20:00:22 +0000114 onNewIntent(getIntent());
115
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100116 setContentView(R.layout.activity_updater);
Jose Pascoal2666b892014-10-02 21:05:08 +0100117
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100118 Crashlytics.start(this);
Jose Pascoale4c48e32014-10-03 19:55:39 +0100119
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100120 DEV_MODE_ENABLED = false;
121 mIsDevModeCounter = 10;
Jose Pascoal2666b892014-10-02 21:05:08 +0100122
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100123 mSharedPreferences = getSharedPreferences(FAIRPHONE_UPDATER_PREFERENCES, MODE_PRIVATE);
Jose Pascoal2666b892014-10-02 21:05:08 +0100124
Tiago Costa9008b612014-11-14 18:19:50 +0000125 // update first times
126 mIsFirstTimeAndroid = mSharedPreferences.getBoolean(PREFERENCE_FIRST_TIME_ANDROID, true);
Jose Pascoal02d86242014-12-17 18:50:08 +0000127
Tiago Costa9008b612014-11-14 18:19:50 +0000128 mIsFirstTimeFairphone = mSharedPreferences.getBoolean(PREFERENCE_FIRST_TIME_FAIRPHONE, true);
Jose Pascoal02d86242014-12-17 18:50:08 +0000129
Tiago Costae02ce352015-01-23 15:43:22 +0000130 mIsFirstTimeAppStore = false;//mSharedPreferences.getBoolean(PREFERENCE_FIRST_TIME_APP_STORE, true);
Filipe Gonçalvesafeac2c2015-01-27 17:49:53 +0000131
Jose Pascoal87758742015-01-28 20:00:22 +0000132 mOtaDownloadUrl = mSharedPreferences.getString(PREFERENCE_OTA_DOWNLOAD_URL, getResources().getString(R.string.downloadUrl));
Tiago Costadaaa32c2015-01-08 12:12:24 +0000133
Filipe Gonçalvesad527aa2015-01-12 15:13:35 +0000134 // get system data
135 mDeviceVersion = VersionParserHelper.getDeviceVersion(this);
136
137 isDeviceSupported();
138
Jose Pascoalaa579a82014-11-05 22:17:16 +0000139 // check current state
140 mCurrentState = getCurrentUpdaterState();
Jose Pascoalaa579a82014-11-05 22:17:16 +0000141
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100142 boolean isConfigLoaded = UpdaterService.readUpdaterData(this);
Filipe Gonçalves9c8d93a2015-01-28 14:35:49 +0000143 if (!isConfigLoaded) {
Filipe Gonçalves42ffc322015-01-28 12:51:14 +0000144 mSharedPreferences.edit().remove(UpdaterService.LAST_CONFIG_DOWNLOAD_IN_MS).commit();
Filipe Gonçalves9c8d93a2015-01-28 14:35:49 +0000145 }
Filipe Gonçalves42ffc322015-01-28 12:51:14 +0000146
147 startService();
Jose Pascoal2666b892014-10-02 21:05:08 +0100148
Jose Pascoalaa579a82014-11-05 22:17:16 +0000149 if (mDeviceVersion != null)
150 {
151 mLatestVersion = isConfigLoaded ? UpdaterData.getInstance().getLatestVersion(mDeviceVersion.getImageType()) : null;
152 }
153 else
154 {
155 mLatestVersion = null;
156 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100157
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100158 getSelectedVersionFromSharedPreferences();
Jose Pascoalad4ea572014-12-16 20:31:48 +0000159 getSelectedStoreFromSharedPreferences();
Jose Pascoal2666b892014-10-02 21:05:08 +0100160
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100161 initHeaderViews();
Jose Pascoale4c48e32014-10-03 19:55:39 +0100162
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100163 setupFragments(savedInstanceState);
164 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100165
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100166 private void isDeviceSupported()
167 {
Jose Pascoalda00b382015-01-20 18:39:28 +0000168 if(!Utils.isDeviceSupported(this))
169 {
Filipe Gonçalvesad527aa2015-01-12 15:13:35 +0000170 Toast.makeText(this, R.string.device_not_supported_message, Toast.LENGTH_LONG).show();
171 finish();
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100172 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100173 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100174
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100175 protected void getSelectedVersionFromSharedPreferences()
176 {
177 String versionImageType = mSharedPreferences.getString(PREFERENCE_SELECTED_VERSION_TYPE, "");
178 int versionNumber = mSharedPreferences.getInt(PREFERENCE_SELECTED_VERSION_NUMBER, 0);
179 mSelectedVersion = UpdaterData.getInstance().getVersion(versionImageType, versionNumber);
180 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000181
Jose Pascoalad4ea572014-12-16 20:31:48 +0000182 protected void getSelectedStoreFromSharedPreferences()
183 {
184 int storeNumber = mSharedPreferences.getInt(PREFERENCE_SELECTED_STORE_NUMBER, 0);
185 mSelectedStore = UpdaterData.getInstance().getStore(storeNumber);
186 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100187
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100188 public UpdaterState getCurrentUpdaterState()
189 {
Jose Pascoal2666b892014-10-02 21:05:08 +0100190
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100191 String currentState = getStringPreference(PREFERENCE_CURRENT_UPDATER_STATE);
Jose Pascoal2666b892014-10-02 21:05:08 +0100192
Jose Pascoalaa579a82014-11-05 22:17:16 +0000193 if (TextUtils.isEmpty(currentState))
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100194 {
195 currentState = UpdaterState.NORMAL.name();
Jose Pascoal2666b892014-10-02 21:05:08 +0100196
Jose Pascoalaa579a82014-11-05 22:17:16 +0000197 updateStatePreference(UpdaterState.NORMAL);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100198 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100199
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100200 return UpdaterState.valueOf(currentState);
201 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100202
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100203 public String getStringPreference(String key)
204 {
205 return mSharedPreferences.getString(key, null);
206 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100207
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100208 public long getLongPreference(String key)
209 {
210 return mSharedPreferences.getLong(key, 0);
211 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100212
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100213 public boolean getBooleanPreference(String key)
214 {
215 return mSharedPreferences.getBoolean(key, false);
216 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100217
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100218 public void savePreference(String key, String value)
219 {
220 Editor editor = mSharedPreferences.edit();
Jose Pascoal2666b892014-10-02 21:05:08 +0100221
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100222 editor.putString(key, value);
Jose Pascoal2666b892014-10-02 21:05:08 +0100223
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100224 editor.commit();
225 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100226
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100227 public void savePreference(String key, boolean value)
228 {
229 Editor editor = mSharedPreferences.edit();
Jose Pascoal2666b892014-10-02 21:05:08 +0100230
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100231 editor.putBoolean(key, value);
Jose Pascoal2666b892014-10-02 21:05:08 +0100232
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100233 editor.commit();
234 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100235
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100236 public void savePreference(String key, long value)
237 {
238 Editor editor = mSharedPreferences.edit();
Jose Pascoal2666b892014-10-02 21:05:08 +0100239
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100240 editor.putLong(key, value);
Jose Pascoal2666b892014-10-02 21:05:08 +0100241
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100242 editor.commit();
243 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100244
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100245 private void initHeaderViews()
246 {
247 headerMainFairphoneText = (TextView) findViewById(R.id.header_main_fairphone_text);
248 headerMainAndroidText = (TextView) findViewById(R.id.header_main_android_text);
Jose Pascoal02d86242014-12-17 18:50:08 +0000249 headerMainAppStoreText = (TextView) findViewById(R.id.header_main_app_store_text);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100250 headerFairphoneText = (TextView) findViewById(R.id.header_fairphone_text);
251 headerAndroidText = (TextView) findViewById(R.id.header_android_text);
252 headerOtherOSText = (TextView) findViewById(R.id.header_other_os_text);
Tiago Costa6d360e22014-12-15 14:32:51 +0000253 headerAppStoreText = (TextView) findViewById(R.id.header_app_store_text);
Jose Pascoal2666b892014-10-02 21:05:08 +0100254
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100255 OnClickListener headerBackPressListener = new OnClickListener()
256 {
257 @Override
258 public void onClick(View v)
259 {
260 onBackPressed();
261 }
262 };
Jose Pascoal2666b892014-10-02 21:05:08 +0100263
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100264 headerFairphoneText.setOnClickListener(headerBackPressListener);
265 headerAndroidText.setOnClickListener(headerBackPressListener);
Tiago Costa6d360e22014-12-15 14:32:51 +0000266 headerAppStoreText.setOnClickListener(headerBackPressListener);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100267 headerOtherOSText.setOnClickListener(headerBackPressListener);
Jose Pascoal02d86242014-12-17 18:50:08 +0000268
269 headerFairphoneInfoButton = (ImageButton) findViewById(R.id.header_fairphone_info_button);
270 headerAndroidInfoButton = (ImageButton) findViewById(R.id.header_android_info_button);
271
Tiago Costa3855faa2014-11-14 17:55:05 +0000272 headerFairphoneInfoButton.setOnClickListener(new OnClickListener()
273 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000274
Tiago Costa3855faa2014-11-14 17:55:05 +0000275 @Override
276 public void onClick(View v)
277 {
278 showInfoPopupDialog(DetailLayoutType.FAIRPHONE);
279 }
280 });
Jose Pascoal02d86242014-12-17 18:50:08 +0000281
Tiago Costa3855faa2014-11-14 17:55:05 +0000282 headerAndroidInfoButton.setOnClickListener(new OnClickListener()
283 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000284
Tiago Costa3855faa2014-11-14 17:55:05 +0000285 @Override
286 public void onClick(View v)
287 {
288 showInfoPopupDialog(DetailLayoutType.ANDROID);
289 }
290 });
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100291 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100292
Tiago Costa3855faa2014-11-14 17:55:05 +0000293 private void showInfoPopupDialog(DetailLayoutType layoutType)
294 {
295 FragmentManager fm = getSupportFragmentManager();
Jose Pascoal02d86242014-12-17 18:50:08 +0000296 InfoPopupDialog popupDialog = new InfoPopupDialog(layoutType);
Tiago Costa3855faa2014-11-14 17:55:05 +0000297 popupDialog.show(fm, layoutType.name());
298 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000299
Jose Pascoalb397dc62014-10-13 19:26:58 +0100300 @Override
301 public void onBackPressed()
302 {
303 Fragment fragment = getTopFragment();
304 if (fragment != null && fragment instanceof DownloadAndRestartFragment && !getCurrentUpdaterState().equals(UpdaterState.NORMAL))
305 {
Filipe Gonçalvescd0f33d2014-12-15 15:05:15 +0000306 ((DownloadAndRestartFragment) fragment).abortUpdateProcess();
Jose Pascoalb397dc62014-10-13 19:26:58 +0100307 }
Jose Pascoal87758742015-01-28 20:00:22 +0000308 else if (fragment != null && TAG_FIRST_FRAGMENT.equals(fragment.getTag()))
Jose Pascoal3bc3a842014-10-16 19:03:21 +0100309 {
Jose Pascoalbeebb8b2014-12-17 19:28:04 +0000310 clearSelectedItems();
Jose Pascoal3bc3a842014-10-16 19:03:21 +0100311 finish();
312 }
Jose Pascoal87758742015-01-28 20:00:22 +0000313
314 super.onBackPressed();
Jose Pascoalb397dc62014-10-13 19:26:58 +0100315 }
316
Tiago Costa3855faa2014-11-14 17:55:05 +0000317 public void updateHeader(HeaderType type, String headerText, boolean showInfo)
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100318 {
Jose Pascoal2666b892014-10-02 21:05:08 +0100319
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100320 switch (type)
321 {
322 case FAIRPHONE:
323 headerMainFairphoneText.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100324 headerMainAndroidText.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000325 headerMainAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100326 headerFairphoneText.setVisibility(View.VISIBLE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100327 headerAndroidText.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000328 headerAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100329 headerOtherOSText.setVisibility(View.GONE);
Jose Pascoal2666b892014-10-02 21:05:08 +0100330
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100331 headerFairphoneText.setText(headerText);
Jose Pascoal02d86242014-12-17 18:50:08 +0000332
333 if (showInfo && mIsFirstTimeFairphone)
334 {
Tiago Costa9008b612014-11-14 18:19:50 +0000335 showInfoPopupDialog(DetailLayoutType.UPDATE_FAIRPHONE);
336 Editor editor = mSharedPreferences.edit();
Jose Pascoal02d86242014-12-17 18:50:08 +0000337
Tiago Costa9008b612014-11-14 18:19:50 +0000338 mIsFirstTimeFairphone = false;
Jose Pascoal02d86242014-12-17 18:50:08 +0000339
Tiago Costa9008b612014-11-14 18:19:50 +0000340 editor.putBoolean(PREFERENCE_FIRST_TIME_FAIRPHONE, mIsFirstTimeFairphone);
341 editor.commit();
342 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000343
Tiago Costa3855faa2014-11-14 17:55:05 +0000344 headerFairphoneInfoButton.setVisibility(showInfo ? View.VISIBLE : View.GONE);
345 headerAndroidInfoButton.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100346 break;
Jose Pascoalb690af12014-10-06 18:29:26 +0100347
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100348 case ANDROID:
349 headerMainFairphoneText.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100350 headerMainAndroidText.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000351 headerMainAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100352 headerFairphoneText.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100353 headerAndroidText.setVisibility(View.VISIBLE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000354 headerAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100355 headerOtherOSText.setVisibility(View.GONE);
Jose Pascoal91aff132014-10-02 17:19:47 +0100356
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100357 headerAndroidText.setText(headerText);
Jose Pascoal02d86242014-12-17 18:50:08 +0000358
359 if (showInfo && mIsFirstTimeAndroid)
360 {
Tiago Costa9008b612014-11-14 18:19:50 +0000361 showInfoPopupDialog(DetailLayoutType.UPDATE_ANDROID);
362 Editor editor = mSharedPreferences.edit();
Jose Pascoal02d86242014-12-17 18:50:08 +0000363
Tiago Costa9008b612014-11-14 18:19:50 +0000364 mIsFirstTimeAndroid = false;
Jose Pascoal02d86242014-12-17 18:50:08 +0000365
Filipe Gonçalves79f668d2014-12-03 16:56:35 +0000366 editor.putBoolean(PREFERENCE_FIRST_TIME_ANDROID, mIsFirstTimeAndroid);
Tiago Costa9008b612014-11-14 18:19:50 +0000367 editor.commit();
368 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000369
Tiago Costa3855faa2014-11-14 17:55:05 +0000370 headerFairphoneInfoButton.setVisibility(View.GONE);
371 headerAndroidInfoButton.setVisibility(showInfo ? View.VISIBLE : View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100372 break;
Jose Pascoal91aff132014-10-02 17:19:47 +0100373
Tiago Costa6d360e22014-12-15 14:32:51 +0000374 case APP_STORE:
375 headerMainFairphoneText.setVisibility(View.GONE);
376 headerMainAndroidText.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000377 headerMainAppStoreText.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000378 headerFairphoneText.setVisibility(View.GONE);
379 headerAndroidText.setVisibility(View.GONE);
380 headerAppStoreText.setVisibility(View.VISIBLE);
381 headerOtherOSText.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000382 headerAppStoreText.setText(headerText);
Jose Pascoal02d86242014-12-17 18:50:08 +0000383
Tiago Costadaaa32c2015-01-08 12:12:24 +0000384 if (showInfo && mIsFirstTimeAppStore)
385 {
386 showInfoPopupDialog(DetailLayoutType.APP_STORE);
387 Editor editor = mSharedPreferences.edit();
388
389 mIsFirstTimeAppStore = false;
390
391 editor.putBoolean(PREFERENCE_FIRST_TIME_APP_STORE, mIsFirstTimeAppStore);
392 editor.commit();
393 }
394
Tiago Costa6d360e22014-12-15 14:32:51 +0000395 headerFairphoneInfoButton.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000396 headerAndroidInfoButton.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000397 break;
398
Pedro Arelocb88f672014-10-09 17:41:02 +0100399 case OTHER_OS:
400 headerMainFairphoneText.setVisibility(View.GONE);
401 headerMainAndroidText.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000402 headerMainAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100403 headerFairphoneText.setVisibility(View.GONE);
404 headerAndroidText.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000405 headerAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100406 headerOtherOSText.setVisibility(View.VISIBLE);
407
408 headerOtherOSText.setText(headerText);
Jose Pascoal02d86242014-12-17 18:50:08 +0000409
Tiago Costa3855faa2014-11-14 17:55:05 +0000410 headerFairphoneInfoButton.setVisibility(View.GONE);
411 headerAndroidInfoButton.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100412 break;
413
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100414 case MAIN_ANDROID:
415 headerMainFairphoneText.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100416 headerMainAndroidText.setVisibility(View.VISIBLE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000417 headerMainAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100418 headerFairphoneText.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100419 headerAndroidText.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000420 headerAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100421 headerOtherOSText.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000422
423 headerFairphoneInfoButton.setVisibility(View.GONE);
424 headerAndroidInfoButton.setVisibility(View.GONE);
425 break;
Tiago Costa3855faa2014-11-14 17:55:05 +0000426
Jose Pascoal02d86242014-12-17 18:50:08 +0000427 case MAIN_APP_STORE:
428 headerMainFairphoneText.setVisibility(View.GONE);
429 headerMainAndroidText.setVisibility(View.GONE);
430 headerMainAppStoreText.setVisibility(View.VISIBLE);
431 headerFairphoneText.setVisibility(View.GONE);
432 headerAndroidText.setVisibility(View.GONE);
433 headerAppStoreText.setVisibility(View.GONE);
434 headerOtherOSText.setVisibility(View.GONE);
435
Tiago Costa3855faa2014-11-14 17:55:05 +0000436 headerFairphoneInfoButton.setVisibility(View.GONE);
437 headerAndroidInfoButton.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100438 break;
Jose Pascoal91aff132014-10-02 17:19:47 +0100439
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100440 case MAIN_FAIRPHONE:
441 default:
442 headerMainFairphoneText.setVisibility(View.VISIBLE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100443 headerMainAndroidText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100444 headerFairphoneText.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100445 headerAndroidText.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000446 headerAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100447 headerOtherOSText.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000448
Tiago Costa3855faa2014-11-14 17:55:05 +0000449 headerFairphoneInfoButton.setVisibility(View.GONE);
450 headerAndroidInfoButton.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100451 break;
452 }
453 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100454
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100455 private void setupFragments(Bundle savedInstanceState)
456 {
457 // Check that the activity is using the layout version with
458 // the fragment_container FrameLayout
459 if (findViewById(R.id.fragment_holder) != null)
460 {
Jose Pascoal2666b892014-10-02 21:05:08 +0100461
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100462 // However, if we're being restored from a previous state,
463 // then we don't need to do anything and should return or else
464 // we could end up with overlapping fragments.
465 if (savedInstanceState != null)
466 {
467 return;
468 }
Jose Pascoal91aff132014-10-02 17:19:47 +0100469
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100470 // Create a new Fragment to be placed in the activity layout
Jose Pascoal87758742015-01-28 20:00:22 +0000471 Fragment firstFragment = new MainFragment();
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100472
473 // In case this activity was started with special instructions from
474 // an
475 // Intent, pass the Intent's extras to the fragment as arguments
Jose Pascoal02d86242014-12-17 18:50:08 +0000476 Intent intent = getIntent();
477 if (firstFragment != null && intent != null)
478 {
479 Bundle bundle = intent.getExtras();
480 if (bundle != null)
481 {
482 firstFragment.setArguments(bundle);
483 }
484 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100485
486 // Add the fragment to the 'fragment_container' FrameLayout
Jose Pascoal799e3942014-11-04 21:12:26 +0000487 FragmentManager fragManager = getSupportFragmentManager();
Jose Pascoal02d86242014-12-17 18:50:08 +0000488 if (firstFragment != null && fragManager != null)
Jose Pascoal799e3942014-11-04 21:12:26 +0000489 {
Jose Pascoal87758742015-01-28 20:00:22 +0000490 FragmentTransaction transation = fragManager.beginTransaction();
491 transation.add(R.id.fragment_holder, firstFragment, TAG_FIRST_FRAGMENT);
492 transation.addToBackStack(TAG_FIRST_FRAGMENT);
493 transation.commit();
Jose Pascoal799e3942014-11-04 21:12:26 +0000494 }
495 else
496 {
497 Log.e(TAG, "setupFragments - Couldn't get FragmentManager");
498 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100499 }
500 }
501
502 public Fragment getFragmentFromState()
503 {
Tiago Costa198bf3d2014-12-16 15:23:18 +0000504 Fragment firstFragment = null;
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100505 switch (mCurrentState)
506 {
507 case PREINSTALL:
508 case DOWNLOAD:
Jose Pascoalad4ea572014-12-16 20:31:48 +0000509 if (mSelectedVersion != null)
510 {
Tiago Costa198bf3d2014-12-16 15:23:18 +0000511 firstFragment = new DownloadAndRestartFragment(true);
Jose Pascoalad4ea572014-12-16 20:31:48 +0000512 }
513 else if (mSelectedStore != null)
514 {
Jose Pascoal1c049e02014-12-17 13:03:09 +0000515 firstFragment = new DownloadAndRestartFragment(false);
Jose Pascoal87758742015-01-28 20:00:22 +0000516 } else
517 {
Filipe Gonçalvesc984d512015-01-14 17:22:58 +0000518 firstFragment = new MainFragment();
519 updateStatePreference(UpdaterState.NORMAL);
Tiago Costa198bf3d2014-12-16 15:23:18 +0000520 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100521 break;
522 case NORMAL:
Jose Pascoal87758742015-01-28 20:00:22 +0000523 if(mLaunchGapps)
524 {
525 firstFragment = startGappsInstall();
526 }
527 else
528 {
529 firstFragment = new MainFragment();
530 }
531 break;
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100532 default:
533 firstFragment = new MainFragment();
534 break;
535 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000536
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100537 return firstFragment;
538 }
Jose Pascoalb690af12014-10-06 18:29:26 +0100539
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100540 public void changeFragment(Fragment newFragment)
541 {
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100542 Fragment topFragment = getTopFragment();
Filipe Gonçalvesc984d512015-01-14 17:22:58 +0000543 if ( newFragment != null && ( topFragment == null || !newFragment.getClass().equals(topFragment.getClass())) )
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100544 {
Jose Pascoal87758742015-01-28 20:00:22 +0000545 if(topFragment != null && newFragment instanceof MainFragment)
546 {
547 if(TAG_FIRST_FRAGMENT.equals(topFragment.getTag()))
548 {
549 return;
550 }
551 }
552
Jose Pascoal799e3942014-11-04 21:12:26 +0000553 FragmentManager fragManager = getSupportFragmentManager();
554 if (fragManager != null)
555 {
556 FragmentTransaction transaction = fragManager.beginTransaction();
557 // Replace whatever is in the fragment_container view with this
558 // fragment,
559 // and add the transaction to the back stack so the user can
560 // navigate
561 // back
Jose Pascoal799e3942014-11-04 21:12:26 +0000562 transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
563 transaction.replace(R.id.fragment_holder, newFragment);
564 transaction.addToBackStack(null);
Jose Pascoal2666b892014-10-02 21:05:08 +0100565
Jose Pascoal799e3942014-11-04 21:12:26 +0000566 // Commit the transaction
567 transaction.commit();
568 }
569 else
570 {
571 Log.e(TAG, "changeFragment - Couldn't get FragmentManager");
572 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100573 }
574 }
Jose Pascoal436915f2014-10-08 15:37:26 +0100575
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100576 public Fragment getTopFragment()
577 {
Jose Pascoal799e3942014-11-04 21:12:26 +0000578 Fragment topFragment = null;
579 FragmentManager fragManager = getSupportFragmentManager();
580 if (fragManager != null)
581 {
Jose Pascoal87758742015-01-28 20:00:22 +0000582 topFragment = fragManager.findFragmentById(R.id.fragment_holder);
Jose Pascoal799e3942014-11-04 21:12:26 +0000583 }
584 else
585 {
586 Log.e(TAG, "getTopFragment - Couldn't get FragmentManager");
587 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100588 return topFragment;
589 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100590
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100591 public void onEnableDevMode()
592 {
593 if (!DEV_MODE_ENABLED)
594 {
595 mIsDevModeCounter--;
Jose Pascoal2666b892014-10-02 21:05:08 +0100596
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100597 Log.d(TAG, "Developer mode in " + mIsDevModeCounter + " Clicks...");
Jose Pascoal2666b892014-10-02 21:05:08 +0100598
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100599 if (mIsDevModeCounter <= 0)
600 {
601 DEV_MODE_ENABLED = true;
Jose Pascoal2666b892014-10-02 21:05:08 +0100602
Pedro Arelo773bd822014-10-10 11:57:34 +0100603 Toast.makeText(getApplicationContext(), getResources().getString(R.string.dev_mode_message), Toast.LENGTH_LONG).show();
Jose Pascoal2666b892014-10-02 21:05:08 +0100604
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100605 Log.d(TAG, "Developer mode enabled for this session");
Jose Pascoal2666b892014-10-02 21:05:08 +0100606
Filipe Gonçalves8f226b02014-12-12 11:21:58 +0000607 Utils.downloadConfigFile(this, true);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100608 }
609 }
610 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100611
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100612 public boolean isUpdateAvailable()
613 {
Jose Pascoalaa579a82014-11-05 22:17:16 +0000614 boolean update = false;
615 if (mLatestVersion != null)
616 {
617 update = mLatestVersion.isNewerVersionThan(mDeviceVersion);
618 }
619 return update;
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100620 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100621
Jose Pascoal02d86242014-12-17 18:50:08 +0000622 public String getItemName(DownloadableItem item)
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100623 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000624 String itemName = "";
625 if (item != null)
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100626 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000627 if (item instanceof Version)
628 {
629 Version version = (Version) item;
630 itemName = version.getImageTypeDescription(getResources()) + " " + version.getName() + " " + version.getBuildNumber();
631 }
632 else if (item instanceof Store)
633 {
634
635 Store store = (Store) item;
636 itemName = store.getName();
637 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100638 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000639 return itemName;
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100640 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100641
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100642 public String getDeviceVersionName()
643 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000644 return getItemName(mDeviceVersion);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100645 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100646
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100647 public String getLatestVersionName()
648 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000649 return getItemName(mLatestVersion);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100650 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100651
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100652 public String getSelectedVersionName()
653 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000654 return getItemName(mSelectedVersion);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100655 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100656
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100657 public Version getDeviceVersion()
658 {
659 return mDeviceVersion;
660 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100661
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100662 public Version getLatestVersion()
663 {
664 return mLatestVersion;
665 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100666
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100667 public Version getSelectedVersion()
668 {
669 return mSelectedVersion;
670 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000671
Jose Pascoalad4ea572014-12-16 20:31:48 +0000672 public Store getSelectedStore()
673 {
674 return mSelectedStore;
675 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100676
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100677 public HeaderType getHeaderTypeFromImageType(String imageType)
678 {
679 HeaderType type = HeaderType.MAIN_FAIRPHONE;
680 if (Version.IMAGE_TYPE_AOSP.equalsIgnoreCase(imageType))
681 {
682 type = HeaderType.ANDROID;
683 }
684 else if (Version.IMAGE_TYPE_FAIRPHONE.equalsIgnoreCase(imageType))
685 {
686 type = HeaderType.FAIRPHONE;
687 }
688 return type;
689 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100690
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100691 public void setSelectedVersion(Version selectedVersion)
692 {
693 int versionNumber = selectedVersion != null ? selectedVersion.getNumber() : 0;
694 String versionImageType = selectedVersion != null ? selectedVersion.getImageType() : "";
Jose Pascoale4c48e32014-10-03 19:55:39 +0100695
Jose Pascoalad4ea572014-12-16 20:31:48 +0000696 clearSelectedVersion(versionNumber, versionImageType);
697
698 mSelectedVersion = UpdaterData.getInstance().getVersion(versionImageType, versionNumber);
699 clearSelectedStore(0);
700 }
701
Jose Pascoal02d86242014-12-17 18:50:08 +0000702 public void clearSelectedItems()
703 {
704 clearSelectedVersion(0, "");
705 clearSelectedStore(0);
706 }
707
Jose Pascoalad4ea572014-12-16 20:31:48 +0000708 private void clearSelectedVersion(int versionNumber, String versionImageType)
709 {
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100710 Editor editor = mSharedPreferences.edit();
711 editor.putInt(PREFERENCE_SELECTED_VERSION_NUMBER, versionNumber);
712 editor.putString(PREFERENCE_SELECTED_VERSION_TYPE, versionImageType);
713 editor.commit();
Jose Pascoal02d86242014-12-17 18:50:08 +0000714
Jose Pascoalad4ea572014-12-16 20:31:48 +0000715 mSelectedVersion = null;
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100716 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000717
Tiago Costa3add03e2014-12-16 12:05:23 +0000718 public void setSelectedStore(Store selectedStore)
719 {
Jose Pascoalad4ea572014-12-16 20:31:48 +0000720 int storeNumber = selectedStore != null ? selectedStore.getNumber() : 0;
721
722 clearSelectedStore(storeNumber);
723
724 mSelectedStore = UpdaterData.getInstance().getStore(storeNumber);
725 clearSelectedVersion(0, "");
726 }
727
728 private void clearSelectedStore(int storeNumber)
729 {
730 Editor editor = mSharedPreferences.edit();
731 editor.putInt(PREFERENCE_SELECTED_STORE_NUMBER, storeNumber);
732 editor.commit();
Jose Pascoal02d86242014-12-17 18:50:08 +0000733
Jose Pascoalad4ea572014-12-16 20:31:48 +0000734 mSelectedStore = null;
Tiago Costa3add03e2014-12-16 12:05:23 +0000735 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100736
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100737 public void resetLastUpdateDownloadId()
738 {
739 mLatestUpdateDownloadId = 0;
740 savePreference(PREFERENCE_DOWNLOAD_ID, mLatestUpdateDownloadId);
741 setSelectedVersion(null);
742 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100743
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100744 private Version getLatestVersionFromConfig()
745 {
Jose Pascoalaa579a82014-11-05 22:17:16 +0000746 Version latest = null;
747 if (mDeviceVersion != null)
748 {
749 latest = UpdaterData.getInstance().getLatestVersion(mDeviceVersion.getImageType());
750 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100751 return latest;
752 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100753
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100754 public void updateLatestVersionFromConfig()
755 {
756 mLatestVersion = getLatestVersionFromConfig();
757 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100758
Tiago Costadaaa32c2015-01-08 12:12:24 +0000759 boolean mLaunchGapps = false;
760
761 @Override
762 protected void onNewIntent(Intent intent)
763 {
Jose Pascoal87758742015-01-28 20:00:22 +0000764 super.onNewIntent(intent);
765 setIntent(intent);
766
Tiago Costadaaa32c2015-01-08 12:12:24 +0000767 mLaunchGapps = false;
768
Jose Pascoal62235572015-01-29 16:42:23 +0000769 if (checkStartGappsInstall(intent))
Tiago Costadaaa32c2015-01-08 12:12:24 +0000770 {
771 mLaunchGapps = true;
772 }
773 else
774 {
775 intent = getParentActivityIntent();
Jose Pascoal62235572015-01-29 16:42:23 +0000776 if (checkStartGappsInstall(intent))
Tiago Costadaaa32c2015-01-08 12:12:24 +0000777 {
778 mLaunchGapps = true;
779 }
780 }
Tiago Costadaaa32c2015-01-08 12:12:24 +0000781 }
782
Jose Pascoal62235572015-01-29 16:42:23 +0000783 private boolean checkStartGappsInstall(Intent intent)
784 {
785 return intent != null && GappsInstallerHelper.EXTRA_START_GAPPS_INSTALL.equals(intent.getAction());
786 }
787
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100788 @Override
789 protected void onResume()
790 {
791 super.onResume();
Jose Pascoal87758742015-01-28 20:00:22 +0000792
793 // check current state
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100794 mCurrentState = getCurrentUpdaterState();
Jose Pascoale4c48e32014-10-03 19:55:39 +0100795
Jose Pascoalaa579a82014-11-05 22:17:16 +0000796 startService();
Jose Pascoal87758742015-01-28 20:00:22 +0000797
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100798 boolean isConfigLoaded = UpdaterService.readUpdaterData(this);
799 mDeviceVersion = VersionParserHelper.getDeviceVersion(this);
Jose Pascoalaa579a82014-11-05 22:17:16 +0000800
801 if (mDeviceVersion != null)
802 {
803 mLatestVersion = isConfigLoaded ? UpdaterData.getInstance().getLatestVersion(mDeviceVersion.getImageType()) : null;
804 }
805 else
806 {
807 mLatestVersion = null;
808 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100809
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100810 getSelectedVersionFromSharedPreferences();
Jose Pascoalad4ea572014-12-16 20:31:48 +0000811 getSelectedStoreFromSharedPreferences();
Jose Pascoal87758742015-01-28 20:00:22 +0000812
813 changeFragment(getFragmentFromState());
Tiago Costadaaa32c2015-01-08 12:12:24 +0000814 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100815
Jose Pascoal87758742015-01-28 20:00:22 +0000816 public Fragment startGappsInstall()
Tiago Costadaaa32c2015-01-08 12:12:24 +0000817 {
Tiago Costa73575aa2015-01-19 15:48:26 +0000818 getSelectedStoreFromSharedPreferences();
Tiago Costadaaa32c2015-01-08 12:12:24 +0000819
820 VersionDetailFragment fragment = new VersionDetailFragment(false);
821
Tiago Costa73575aa2015-01-19 15:48:26 +0000822 if (mSelectedStore != null)
Tiago Costadaaa32c2015-01-08 12:12:24 +0000823 {
Tiago Costa73575aa2015-01-19 15:48:26 +0000824 fragment.setupFragment(mSelectedStore, DetailLayoutType.APP_STORE);
Tiago Costadaaa32c2015-01-08 12:12:24 +0000825 }
Jose Pascoal87758742015-01-28 20:00:22 +0000826 else
827 {
828 fragment = null;
829 }
830
831 return fragment;
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100832 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100833
Jose Pascoalaa579a82014-11-05 22:17:16 +0000834 private void startService()
835 {
836 if (mCurrentState == UpdaterState.NORMAL)
837 {
838 Utils.startUpdaterService(this, true);
839 }
840 else
841 {
842 Utils.startUpdaterService(this, false);
843 }
844 }
845
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100846 public void changeState(UpdaterState newState)
847 {
848 updateStatePreference(newState);
849 changeFragment(getFragmentFromState());
850 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100851
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100852 public void updateStatePreference(UpdaterState newState)
853 {
854 mCurrentState = newState;
Jose Pascoale4c48e32014-10-03 19:55:39 +0100855
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100856 Editor editor = mSharedPreferences.edit();
Jose Pascoale4c48e32014-10-03 19:55:39 +0100857
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100858 editor.putString(PREFERENCE_CURRENT_UPDATER_STATE, mCurrentState.name());
Jose Pascoale4c48e32014-10-03 19:55:39 +0100859
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100860 editor.commit();
861 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100862
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100863 @Override
864 protected void onStop()
865 {
866 super.onStop();
Jose Pascoale4c48e32014-10-03 19:55:39 +0100867
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100868 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100869
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100870 public long getLatestDownloadId()
871 {
872 return mLatestUpdateDownloadId;
873 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100874
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100875 public long getLatestUpdateDownloadIdFromSharedPreference()
876 {
877 if (mLatestUpdateDownloadId == 0)
878 {
879 mLatestUpdateDownloadId = getLongPreference(PREFERENCE_DOWNLOAD_ID);
880 }
881 return mLatestUpdateDownloadId;
882 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100883
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100884 public void saveLatestUpdateDownloadId(long latestUpdateDownloadId)
885 {
886 mLatestUpdateDownloadId = latestUpdateDownloadId;
887 savePreference(PREFERENCE_DOWNLOAD_ID, mLatestUpdateDownloadId);
Jose Pascoal02d86242014-12-17 18:50:08 +0000888 }
Jose Pascoalc2545cc2014-12-18 16:51:52 +0000889
890 public long getConfigFileDownloadIdFromSharedPreference()
891 {
892 return getLongPreference(UpdaterService.PREFERENCE_LAST_CONFIG_DOWNLOAD_ID);
893 }
894
895 public void saveConfigFileDownloadId(long latestUpdateDownloadId)
896 {
897 savePreference(UpdaterService.PREFERENCE_LAST_CONFIG_DOWNLOAD_ID, latestUpdateDownloadId);
898 }
Jose Pascoal91aff132014-10-02 17:19:47 +0100899}