blob: 99cf36b42372b048c1a931ec11738a368335a891 [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;
Filipe Gonçalves49ce23c2015-02-13 16:33:52 +00007import android.provider.Settings;
Jose Pascoal91aff132014-10-02 17:19:47 +01008import android.support.v4.app.Fragment;
9import android.support.v4.app.FragmentActivity;
Jose Pascoal3bc3a842014-10-16 19:03:21 +010010import android.support.v4.app.FragmentManager;
Jose Pascoal91aff132014-10-02 17:19:47 +010011import android.support.v4.app.FragmentTransaction;
Jose Pascoalaa579a82014-11-05 22:17:16 +000012import android.text.TextUtils;
Jose Pascoal2666b892014-10-02 21:05:08 +010013import android.util.Log;
14import android.view.View;
Pedro Arelo6d2bac92014-10-09 16:48:27 +010015import android.view.View.OnClickListener;
Jose Pascoalc172d892014-11-17 17:36:12 +000016import android.widget.ImageButton;
Jose Pascoal2666b892014-10-02 21:05:08 +010017import android.widget.TextView;
18import android.widget.Toast;
Jose Pascoal91aff132014-10-02 17:19:47 +010019
Jose Pascoal2666b892014-10-02 21:05:08 +010020import com.crashlytics.android.Crashlytics;
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
Jose Pascoal7bf83a02014-10-13 18:30:18 +010034public class FairphoneUpdater extends FragmentActivity
Pedro Arelo6d2bac92014-10-09 16:48:27 +010035{
Jose Pascoal91aff132014-10-02 17:19:47 +010036
Jose Pascoal7bf83a02014-10-13 18:30:18 +010037 private static final String TAG = FairphoneUpdater.class.getSimpleName();
Jose Pascoal2666b892014-10-02 21:05:08 +010038
Filipe Gonçalves49ce23c2015-02-13 16:33:52 +000039 private static final String CRASHLYTICS_OPT_IN = "crashlytics_opt_in"; // IMPORTANT: keep synced with Settings.Global.CRASHLYTICS_OPT_IN
40
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
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +000043 private static final String PREFERENCE_FIRST_TIME_ANDROID = "FirstTimeAndroid";
Jose Pascoal02d86242014-12-17 18:50:08 +000044
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +000045 private static final String PREFERENCE_FIRST_TIME_FAIRPHONE = "FirstTimeFairphone";
Jose Pascoal02d86242014-12-17 18:50:08 +000046
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +000047 private static final String PREFERENCE_FIRST_TIME_APP_STORE = "FirstTimeAppStore";
Tiago Costadaaa32c2015-01-08 12:12:24 +000048
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +000049 private 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
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +000055 private static final String PREFERENCE_SELECTED_VERSION_NUMBER = "SelectedVersionNumber";
Jose Pascoal2666b892014-10-02 21:05:08 +010056
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +000057 private 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
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +000073 }
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;
Filipe Gonçalves825414a2015-01-26 14:52:48 +000085 public static boolean BETA_MODE_ENABLED;
Pedro Arelo6d2bac92014-10-09 16:48:27 +010086 private int mIsDevModeCounter;
Filipe Gonçalvesafeac2c2015-01-27 17:49:53 +000087
Jose Pascoal87758742015-01-28 20:00:22 +000088 public String mOtaDownloadUrl;
Jose Pascoal2666b892014-10-02 21:05:08 +010089
Pedro Arelo6d2bac92014-10-09 16:48:27 +010090 private TextView headerMainFairphoneText;
91 private TextView headerMainAndroidText;
92 private TextView headerFairphoneText;
93 private TextView headerAndroidText;
Tiago Costa6d360e22014-12-15 14:32:51 +000094 private TextView headerAppStoreText;
Pedro Arelo6d2bac92014-10-09 16:48:27 +010095 private TextView headerOtherOSText;
Jose Pascoalc172d892014-11-17 17:36:12 +000096 private ImageButton headerFairphoneInfoButton;
97 private ImageButton headerAndroidInfoButton;
Jose Pascoal02d86242014-12-17 18:50:08 +000098
Tiago Costa9008b612014-11-14 18:19:50 +000099 private boolean mIsFirstTimeAndroid;
100 private boolean mIsFirstTimeFairphone;
Tiago Costadaaa32c2015-01-08 12:12:24 +0000101 private boolean mIsFirstTimeAppStore;
Jose Pascoal02d86242014-12-17 18:50:08 +0000102
Jose Pascoalad4ea572014-12-16 20:31:48 +0000103 private Store mSelectedStore;
Jose Pascoal02d86242014-12-17 18:50:08 +0000104
105 private TextView headerMainAppStoreText;
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100106 public static enum HeaderType
107 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000108 MAIN_FAIRPHONE, MAIN_ANDROID, MAIN_APP_STORE, FAIRPHONE, ANDROID, OTHER_OS, APP_STORE
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000109 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100110
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100111 @Override
112 protected void onCreate(Bundle savedInstanceState)
113 {
114 super.onCreate(savedInstanceState);
Jose Pascoal87758742015-01-28 20:00:22 +0000115 onNewIntent(getIntent());
116
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100117 setContentView(R.layout.activity_updater);
Jose Pascoal2666b892014-10-02 21:05:08 +0100118
Filipe Gonçalves49ce23c2015-02-13 16:33:52 +0000119 if (Settings.Global.getInt(getContentResolver(), CRASHLYTICS_OPT_IN, 0) == 1)
120 {
121 Log.d(TAG, "Crash reports active.");
122 Crashlytics.start(this);
123 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100124
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100125 DEV_MODE_ENABLED = false;
126 mIsDevModeCounter = 10;
Jose Pascoal2666b892014-10-02 21:05:08 +0100127
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100128 mSharedPreferences = getSharedPreferences(FAIRPHONE_UPDATER_PREFERENCES, MODE_PRIVATE);
Jose Pascoal2666b892014-10-02 21:05:08 +0100129
Tiago Costa9008b612014-11-14 18:19:50 +0000130 // update first times
131 mIsFirstTimeAndroid = mSharedPreferences.getBoolean(PREFERENCE_FIRST_TIME_ANDROID, true);
Jose Pascoal02d86242014-12-17 18:50:08 +0000132
Tiago Costa9008b612014-11-14 18:19:50 +0000133 mIsFirstTimeFairphone = mSharedPreferences.getBoolean(PREFERENCE_FIRST_TIME_FAIRPHONE, true);
Jose Pascoal02d86242014-12-17 18:50:08 +0000134
Tiago Costae02ce352015-01-23 15:43:22 +0000135 mIsFirstTimeAppStore = false;//mSharedPreferences.getBoolean(PREFERENCE_FIRST_TIME_APP_STORE, true);
Tiago Costa1216b102015-03-10 15:48:18 +0000136
137 mOtaDownloadUrl = getResources().getString(R.string.downloadUrl);
138
139 // reset download URL
140 Editor editor = mSharedPreferences.edit();
141 editor.putString(PREFERENCE_OTA_DOWNLOAD_URL, mOtaDownloadUrl);
142 editor.commit();
Tiago Costadaaa32c2015-01-08 12:12:24 +0000143
Filipe Gonçalvesad527aa2015-01-12 15:13:35 +0000144 // get system data
145 mDeviceVersion = VersionParserHelper.getDeviceVersion(this);
146
147 isDeviceSupported();
148
Filipe Gonçalves825414a2015-01-26 14:52:48 +0000149 setupBetaStatus();
150
Jose Pascoalaa579a82014-11-05 22:17:16 +0000151 // check current state
152 mCurrentState = getCurrentUpdaterState();
Jose Pascoalaa579a82014-11-05 22:17:16 +0000153
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100154 boolean isConfigLoaded = UpdaterService.readUpdaterData(this);
Filipe Gonçalves9c8d93a2015-01-28 14:35:49 +0000155 if (!isConfigLoaded) {
Jose Pascoal0b48f8d2015-02-06 16:06:41 +0000156 mSharedPreferences.edit().remove(UpdaterService.LAST_CONFIG_DOWNLOAD_IN_MS).apply();
Filipe Gonçalves9c8d93a2015-01-28 14:35:49 +0000157 }
Filipe Gonçalves42ffc322015-01-28 12:51:14 +0000158
159 startService();
Jose Pascoal2666b892014-10-02 21:05:08 +0100160
Jose Pascoalaa579a82014-11-05 22:17:16 +0000161 if (mDeviceVersion != null)
162 {
163 mLatestVersion = isConfigLoaded ? UpdaterData.getInstance().getLatestVersion(mDeviceVersion.getImageType()) : null;
164 }
165 else
166 {
167 mLatestVersion = null;
168 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100169
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100170 getSelectedVersionFromSharedPreferences();
Jose Pascoalad4ea572014-12-16 20:31:48 +0000171 getSelectedStoreFromSharedPreferences();
Jose Pascoal2666b892014-10-02 21:05:08 +0100172
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100173 initHeaderViews();
Jose Pascoale4c48e32014-10-03 19:55:39 +0100174
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100175 setupFragments(savedInstanceState);
176 }
Filipe Gonçalves825414a2015-01-26 14:52:48 +0000177
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000178 void setupBetaStatus()
Filipe Gonçalves825414a2015-01-26 14:52:48 +0000179 {
180 BETA_MODE_ENABLED = mDeviceVersion.getBetaStatus().equals("1");
181 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100182
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100183 private void isDeviceSupported()
184 {
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000185 if(Utils.isDeviceUnsupported(this))
Jose Pascoalda00b382015-01-20 18:39:28 +0000186 {
Filipe Gonçalvesad527aa2015-01-12 15:13:35 +0000187 Toast.makeText(this, R.string.device_not_supported_message, Toast.LENGTH_LONG).show();
188 finish();
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100189 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100190 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100191
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000192 void getSelectedVersionFromSharedPreferences()
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100193 {
194 String versionImageType = mSharedPreferences.getString(PREFERENCE_SELECTED_VERSION_TYPE, "");
195 int versionNumber = mSharedPreferences.getInt(PREFERENCE_SELECTED_VERSION_NUMBER, 0);
196 mSelectedVersion = UpdaterData.getInstance().getVersion(versionImageType, versionNumber);
197 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000198
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000199 void getSelectedStoreFromSharedPreferences()
Jose Pascoalad4ea572014-12-16 20:31:48 +0000200 {
201 int storeNumber = mSharedPreferences.getInt(PREFERENCE_SELECTED_STORE_NUMBER, 0);
202 mSelectedStore = UpdaterData.getInstance().getStore(storeNumber);
203 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100204
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100205 public UpdaterState getCurrentUpdaterState()
206 {
Jose Pascoal2666b892014-10-02 21:05:08 +0100207
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000208 String currentState = mSharedPreferences.getString(PREFERENCE_CURRENT_UPDATER_STATE, null);
Jose Pascoal2666b892014-10-02 21:05:08 +0100209
Jose Pascoalaa579a82014-11-05 22:17:16 +0000210 if (TextUtils.isEmpty(currentState))
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100211 {
212 currentState = UpdaterState.NORMAL.name();
Jose Pascoal2666b892014-10-02 21:05:08 +0100213
Jose Pascoalaa579a82014-11-05 22:17:16 +0000214 updateStatePreference(UpdaterState.NORMAL);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100215 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100216
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100217 return UpdaterState.valueOf(currentState);
218 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100219
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000220 long getLongPreference(String key)
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100221 {
222 return mSharedPreferences.getLong(key, 0);
223 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100224
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000225 void savePreference(String key, long value)
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100226 {
227 Editor editor = mSharedPreferences.edit();
Jose Pascoal2666b892014-10-02 21:05:08 +0100228
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100229 editor.putLong(key, value);
Jose Pascoal2666b892014-10-02 21:05:08 +0100230
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100231 editor.commit();
232 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100233
Tiago Costa1216b102015-03-10 15:48:18 +0000234 public void changeOTADownloadURL(String newUrl){
Jose Pascoaldca09ac2015-03-11 16:35:06 +0000235 mOtaDownloadUrl = TextUtils.isEmpty(newUrl) ? getResources().getString(R.string.downloadUrl) : newUrl;
236
Tiago Costa1216b102015-03-10 15:48:18 +0000237 Editor editor = mSharedPreferences.edit();
Jose Pascoaldca09ac2015-03-11 16:35:06 +0000238 editor.putString(PREFERENCE_OTA_DOWNLOAD_URL, mOtaDownloadUrl);
Tiago Costa1216b102015-03-10 15:48:18 +0000239 editor.commit();
240 }
241
242 public void forceConfiDownload(){
243 Utils.downloadConfigFile(this, true);
244 }
245
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100246 private void initHeaderViews()
247 {
248 headerMainFairphoneText = (TextView) findViewById(R.id.header_main_fairphone_text);
249 headerMainAndroidText = (TextView) findViewById(R.id.header_main_android_text);
Jose Pascoal02d86242014-12-17 18:50:08 +0000250 headerMainAppStoreText = (TextView) findViewById(R.id.header_main_app_store_text);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100251 headerFairphoneText = (TextView) findViewById(R.id.header_fairphone_text);
252 headerAndroidText = (TextView) findViewById(R.id.header_android_text);
253 headerOtherOSText = (TextView) findViewById(R.id.header_other_os_text);
Tiago Costa6d360e22014-12-15 14:32:51 +0000254 headerAppStoreText = (TextView) findViewById(R.id.header_app_store_text);
Jose Pascoal2666b892014-10-02 21:05:08 +0100255
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100256 OnClickListener headerBackPressListener = new OnClickListener()
257 {
258 @Override
259 public void onClick(View v)
260 {
261 onBackPressed();
262 }
263 };
Jose Pascoal2666b892014-10-02 21:05:08 +0100264
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100265 headerFairphoneText.setOnClickListener(headerBackPressListener);
266 headerAndroidText.setOnClickListener(headerBackPressListener);
Tiago Costa6d360e22014-12-15 14:32:51 +0000267 headerAppStoreText.setOnClickListener(headerBackPressListener);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100268 headerOtherOSText.setOnClickListener(headerBackPressListener);
Jose Pascoal02d86242014-12-17 18:50:08 +0000269
270 headerFairphoneInfoButton = (ImageButton) findViewById(R.id.header_fairphone_info_button);
271 headerAndroidInfoButton = (ImageButton) findViewById(R.id.header_android_info_button);
272
Tiago Costa3855faa2014-11-14 17:55:05 +0000273 headerFairphoneInfoButton.setOnClickListener(new OnClickListener()
274 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000275
Tiago Costa3855faa2014-11-14 17:55:05 +0000276 @Override
277 public void onClick(View v)
278 {
279 showInfoPopupDialog(DetailLayoutType.FAIRPHONE);
280 }
281 });
Jose Pascoal02d86242014-12-17 18:50:08 +0000282
Tiago Costa3855faa2014-11-14 17:55:05 +0000283 headerAndroidInfoButton.setOnClickListener(new OnClickListener()
284 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000285
Tiago Costa3855faa2014-11-14 17:55:05 +0000286 @Override
287 public void onClick(View v)
288 {
289 showInfoPopupDialog(DetailLayoutType.ANDROID);
290 }
291 });
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100292 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100293
Tiago Costa3855faa2014-11-14 17:55:05 +0000294 private void showInfoPopupDialog(DetailLayoutType layoutType)
295 {
296 FragmentManager fm = getSupportFragmentManager();
Jose Pascoal02d86242014-12-17 18:50:08 +0000297 InfoPopupDialog popupDialog = new InfoPopupDialog(layoutType);
Tiago Costa3855faa2014-11-14 17:55:05 +0000298 popupDialog.show(fm, layoutType.name());
299 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000300
Jose Pascoalb397dc62014-10-13 19:26:58 +0100301 @Override
302 public void onBackPressed()
303 {
304 Fragment fragment = getTopFragment();
Jose Pascoal40916302015-02-06 18:43:47 +0000305 if (fragment != null && fragment instanceof DownloadAndRestartFragment && getCurrentUpdaterState() != UpdaterState.NORMAL)
Jose Pascoalb397dc62014-10-13 19:26:58 +0100306 {
Jose Pascoal4adf3192015-02-23 18:10:16 +0000307 ((DownloadAndRestartFragment) fragment).abortUpdateProcess("");
Jose Pascoalb397dc62014-10-13 19:26:58 +0100308 }
Jose Pascoal87758742015-01-28 20:00:22 +0000309 else if (fragment != null && TAG_FIRST_FRAGMENT.equals(fragment.getTag()))
Jose Pascoal3bc3a842014-10-16 19:03:21 +0100310 {
Jose Pascoalbeebb8b2014-12-17 19:28:04 +0000311 clearSelectedItems();
Jose Pascoal3bc3a842014-10-16 19:03:21 +0100312 finish();
313 }
Jose Pascoal87758742015-01-28 20:00:22 +0000314
315 super.onBackPressed();
Jose Pascoalb397dc62014-10-13 19:26:58 +0100316 }
317
Tiago Costa3855faa2014-11-14 17:55:05 +0000318 public void updateHeader(HeaderType type, String headerText, boolean showInfo)
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100319 {
Jose Pascoal2666b892014-10-02 21:05:08 +0100320
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100321 switch (type)
322 {
323 case FAIRPHONE:
324 headerMainFairphoneText.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100325 headerMainAndroidText.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000326 headerMainAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100327 headerFairphoneText.setVisibility(View.VISIBLE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100328 headerAndroidText.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000329 headerAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100330 headerOtherOSText.setVisibility(View.GONE);
Jose Pascoal2666b892014-10-02 21:05:08 +0100331
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100332 headerFairphoneText.setText(headerText);
Jose Pascoal02d86242014-12-17 18:50:08 +0000333
334 if (showInfo && mIsFirstTimeFairphone)
335 {
Tiago Costa9008b612014-11-14 18:19:50 +0000336 showInfoPopupDialog(DetailLayoutType.UPDATE_FAIRPHONE);
337 Editor editor = mSharedPreferences.edit();
Jose Pascoal02d86242014-12-17 18:50:08 +0000338
Tiago Costa9008b612014-11-14 18:19:50 +0000339 mIsFirstTimeFairphone = false;
Jose Pascoal02d86242014-12-17 18:50:08 +0000340
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000341 editor.putBoolean(PREFERENCE_FIRST_TIME_FAIRPHONE, false);
Jose Pascoal0b48f8d2015-02-06 16:06:41 +0000342 editor.apply();
Tiago Costa9008b612014-11-14 18:19:50 +0000343 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000344
Tiago Costa3855faa2014-11-14 17:55:05 +0000345 headerFairphoneInfoButton.setVisibility(showInfo ? View.VISIBLE : View.GONE);
346 headerAndroidInfoButton.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100347 break;
Jose Pascoalb690af12014-10-06 18:29:26 +0100348
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100349 case ANDROID:
350 headerMainFairphoneText.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100351 headerMainAndroidText.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000352 headerMainAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100353 headerFairphoneText.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100354 headerAndroidText.setVisibility(View.VISIBLE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000355 headerAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100356 headerOtherOSText.setVisibility(View.GONE);
Jose Pascoal91aff132014-10-02 17:19:47 +0100357
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100358 headerAndroidText.setText(headerText);
Jose Pascoal02d86242014-12-17 18:50:08 +0000359
360 if (showInfo && mIsFirstTimeAndroid)
361 {
Tiago Costa9008b612014-11-14 18:19:50 +0000362 showInfoPopupDialog(DetailLayoutType.UPDATE_ANDROID);
363 Editor editor = mSharedPreferences.edit();
Jose Pascoal02d86242014-12-17 18:50:08 +0000364
Tiago Costa9008b612014-11-14 18:19:50 +0000365 mIsFirstTimeAndroid = false;
Jose Pascoal02d86242014-12-17 18:50:08 +0000366
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000367 editor.putBoolean(PREFERENCE_FIRST_TIME_ANDROID, false);
Jose Pascoal0b48f8d2015-02-06 16:06:41 +0000368 editor.apply();
Tiago Costa9008b612014-11-14 18:19:50 +0000369 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000370
Tiago Costa3855faa2014-11-14 17:55:05 +0000371 headerFairphoneInfoButton.setVisibility(View.GONE);
372 headerAndroidInfoButton.setVisibility(showInfo ? View.VISIBLE : View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100373 break;
Jose Pascoal91aff132014-10-02 17:19:47 +0100374
Tiago Costa6d360e22014-12-15 14:32:51 +0000375 case APP_STORE:
376 headerMainFairphoneText.setVisibility(View.GONE);
377 headerMainAndroidText.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000378 headerMainAppStoreText.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000379 headerFairphoneText.setVisibility(View.GONE);
380 headerAndroidText.setVisibility(View.GONE);
381 headerAppStoreText.setVisibility(View.VISIBLE);
382 headerOtherOSText.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000383 headerAppStoreText.setText(headerText);
Jose Pascoal02d86242014-12-17 18:50:08 +0000384
Tiago Costadaaa32c2015-01-08 12:12:24 +0000385 if (showInfo && mIsFirstTimeAppStore)
386 {
387 showInfoPopupDialog(DetailLayoutType.APP_STORE);
388 Editor editor = mSharedPreferences.edit();
389
390 mIsFirstTimeAppStore = false;
391
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000392 editor.putBoolean(PREFERENCE_FIRST_TIME_APP_STORE, false);
Jose Pascoal0b48f8d2015-02-06 16:06:41 +0000393 editor.apply();
Tiago Costadaaa32c2015-01-08 12:12:24 +0000394 }
395
Tiago Costa6d360e22014-12-15 14:32:51 +0000396 headerFairphoneInfoButton.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000397 headerAndroidInfoButton.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000398 break;
399
Pedro Arelocb88f672014-10-09 17:41:02 +0100400 case OTHER_OS:
401 headerMainFairphoneText.setVisibility(View.GONE);
402 headerMainAndroidText.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000403 headerMainAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100404 headerFairphoneText.setVisibility(View.GONE);
405 headerAndroidText.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000406 headerAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100407 headerOtherOSText.setVisibility(View.VISIBLE);
408
409 headerOtherOSText.setText(headerText);
Jose Pascoal02d86242014-12-17 18:50:08 +0000410
Tiago Costa3855faa2014-11-14 17:55:05 +0000411 headerFairphoneInfoButton.setVisibility(View.GONE);
412 headerAndroidInfoButton.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100413 break;
414
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100415 case MAIN_ANDROID:
416 headerMainFairphoneText.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100417 headerMainAndroidText.setVisibility(View.VISIBLE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000418 headerMainAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100419 headerFairphoneText.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100420 headerAndroidText.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000421 headerAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100422 headerOtherOSText.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000423
424 headerFairphoneInfoButton.setVisibility(View.GONE);
425 headerAndroidInfoButton.setVisibility(View.GONE);
426 break;
Tiago Costa3855faa2014-11-14 17:55:05 +0000427
Jose Pascoal02d86242014-12-17 18:50:08 +0000428 case MAIN_APP_STORE:
429 headerMainFairphoneText.setVisibility(View.GONE);
430 headerMainAndroidText.setVisibility(View.GONE);
431 headerMainAppStoreText.setVisibility(View.VISIBLE);
432 headerFairphoneText.setVisibility(View.GONE);
433 headerAndroidText.setVisibility(View.GONE);
434 headerAppStoreText.setVisibility(View.GONE);
435 headerOtherOSText.setVisibility(View.GONE);
436
Tiago Costa3855faa2014-11-14 17:55:05 +0000437 headerFairphoneInfoButton.setVisibility(View.GONE);
438 headerAndroidInfoButton.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100439 break;
Jose Pascoal91aff132014-10-02 17:19:47 +0100440
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100441 case MAIN_FAIRPHONE:
442 default:
443 headerMainFairphoneText.setVisibility(View.VISIBLE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100444 headerMainAndroidText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100445 headerFairphoneText.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100446 headerAndroidText.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000447 headerAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100448 headerOtherOSText.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000449
Tiago Costa3855faa2014-11-14 17:55:05 +0000450 headerFairphoneInfoButton.setVisibility(View.GONE);
451 headerAndroidInfoButton.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100452 break;
453 }
454 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100455
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100456 private void setupFragments(Bundle savedInstanceState)
457 {
458 // Check that the activity is using the layout version with
459 // the fragment_container FrameLayout
460 if (findViewById(R.id.fragment_holder) != null)
461 {
Jose Pascoal2666b892014-10-02 21:05:08 +0100462
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100463 // However, if we're being restored from a previous state,
464 // then we don't need to do anything and should return or else
465 // we could end up with overlapping fragments.
466 if (savedInstanceState != null)
467 {
468 return;
469 }
Jose Pascoal91aff132014-10-02 17:19:47 +0100470
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100471 // Create a new Fragment to be placed in the activity layout
Jose Pascoal87758742015-01-28 20:00:22 +0000472 Fragment firstFragment = new MainFragment();
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100473
474 // In case this activity was started with special instructions from
475 // an
476 // Intent, pass the Intent's extras to the fragment as arguments
Jose Pascoal02d86242014-12-17 18:50:08 +0000477 Intent intent = getIntent();
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000478 if (intent != null)
Jose Pascoal02d86242014-12-17 18:50:08 +0000479 {
480 Bundle bundle = intent.getExtras();
481 if (bundle != null)
482 {
483 firstFragment.setArguments(bundle);
484 }
485 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100486
487 // Add the fragment to the 'fragment_container' FrameLayout
Jose Pascoal799e3942014-11-04 21:12:26 +0000488 FragmentManager fragManager = getSupportFragmentManager();
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000489 if (fragManager != null)
Jose Pascoal799e3942014-11-04 21:12:26 +0000490 {
Jose Pascoal87758742015-01-28 20:00:22 +0000491 FragmentTransaction transation = fragManager.beginTransaction();
492 transation.add(R.id.fragment_holder, firstFragment, TAG_FIRST_FRAGMENT);
493 transation.addToBackStack(TAG_FIRST_FRAGMENT);
494 transation.commit();
Jose Pascoal799e3942014-11-04 21:12:26 +0000495 }
496 else
497 {
498 Log.e(TAG, "setupFragments - Couldn't get FragmentManager");
499 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100500 }
501 }
502
503 public Fragment getFragmentFromState()
504 {
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000505 Fragment firstFragment;
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100506 switch (mCurrentState)
507 {
508 case PREINSTALL:
509 case DOWNLOAD:
Jose Pascoalad4ea572014-12-16 20:31:48 +0000510 if (mSelectedVersion != null)
511 {
Tiago Costa198bf3d2014-12-16 15:23:18 +0000512 firstFragment = new DownloadAndRestartFragment(true);
Jose Pascoalad4ea572014-12-16 20:31:48 +0000513 }
514 else if (mSelectedStore != null)
515 {
Jose Pascoal1c049e02014-12-17 13:03:09 +0000516 firstFragment = new DownloadAndRestartFragment(false);
Jose Pascoal87758742015-01-28 20:00:22 +0000517 } else
518 {
Filipe Gonçalvesc984d512015-01-14 17:22:58 +0000519 firstFragment = new MainFragment();
520 updateStatePreference(UpdaterState.NORMAL);
Tiago Costa198bf3d2014-12-16 15:23:18 +0000521 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100522 break;
523 case NORMAL:
Jose Pascoal87758742015-01-28 20:00:22 +0000524 if(mLaunchGapps)
525 {
526 firstFragment = startGappsInstall();
527 }
528 else
529 {
530 firstFragment = new MainFragment();
531 }
532 break;
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100533 default:
534 firstFragment = new MainFragment();
535 break;
536 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000537
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100538 return firstFragment;
539 }
Jose Pascoalb690af12014-10-06 18:29:26 +0100540
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100541 public void changeFragment(Fragment newFragment)
542 {
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100543 Fragment topFragment = getTopFragment();
Filipe Gonçalvesc984d512015-01-14 17:22:58 +0000544 if ( newFragment != null && ( topFragment == null || !newFragment.getClass().equals(topFragment.getClass())) )
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100545 {
Jose Pascoal87758742015-01-28 20:00:22 +0000546 if(topFragment != null && newFragment instanceof MainFragment)
547 {
548 if(TAG_FIRST_FRAGMENT.equals(topFragment.getTag()))
549 {
550 return;
551 }
552 }
553
Jose Pascoal799e3942014-11-04 21:12:26 +0000554 FragmentManager fragManager = getSupportFragmentManager();
555 if (fragManager != null)
556 {
557 FragmentTransaction transaction = fragManager.beginTransaction();
558 // Replace whatever is in the fragment_container view with this
559 // fragment,
560 // and add the transaction to the back stack so the user can
561 // navigate
562 // back
Pedro Arelo8f002432015-02-19 17:03:19 +0000563 transaction.setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.pop_enter, R.anim.pop_exit);
Jose Pascoal799e3942014-11-04 21:12:26 +0000564 transaction.replace(R.id.fragment_holder, newFragment);
565 transaction.addToBackStack(null);
Jose Pascoal2666b892014-10-02 21:05:08 +0100566
Jose Pascoal799e3942014-11-04 21:12:26 +0000567 // Commit the transaction
568 transaction.commit();
569 }
570 else
571 {
572 Log.e(TAG, "changeFragment - Couldn't get FragmentManager");
573 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100574 }
575 }
Jose Pascoal436915f2014-10-08 15:37:26 +0100576
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000577 Fragment getTopFragment()
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100578 {
Jose Pascoal799e3942014-11-04 21:12:26 +0000579 Fragment topFragment = null;
580 FragmentManager fragManager = getSupportFragmentManager();
581 if (fragManager != null)
582 {
Jose Pascoal87758742015-01-28 20:00:22 +0000583 topFragment = fragManager.findFragmentById(R.id.fragment_holder);
Jose Pascoal799e3942014-11-04 21:12:26 +0000584 }
585 else
586 {
587 Log.e(TAG, "getTopFragment - Couldn't get FragmentManager");
588 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100589 return topFragment;
590 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100591
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100592 public void onEnableDevMode()
593 {
594 if (!DEV_MODE_ENABLED)
595 {
596 mIsDevModeCounter--;
Jose Pascoal2666b892014-10-02 21:05:08 +0100597
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100598 Log.d(TAG, "Developer mode in " + mIsDevModeCounter + " Clicks...");
Jose Pascoal2666b892014-10-02 21:05:08 +0100599
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100600 if (mIsDevModeCounter <= 0)
601 {
602 DEV_MODE_ENABLED = true;
Jose Pascoal2666b892014-10-02 21:05:08 +0100603
Pedro Arelo773bd822014-10-10 11:57:34 +0100604 Toast.makeText(getApplicationContext(), getResources().getString(R.string.dev_mode_message), Toast.LENGTH_LONG).show();
Jose Pascoal2666b892014-10-02 21:05:08 +0100605
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100606 Log.d(TAG, "Developer mode enabled for this session");
Jose Pascoal2666b892014-10-02 21:05:08 +0100607
Tiago Costa1216b102015-03-10 15:48:18 +0000608 forceConfiDownload();
609 //Utils.downloadConfigFile(this, true);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100610 }
611 }
612 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100613
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100614 public boolean isUpdateAvailable()
615 {
Jose Pascoalaa579a82014-11-05 22:17:16 +0000616 boolean update = false;
Filipe Gonçalves3b08c8b2015-02-03 15:18:28 +0000617 if (mLatestVersion != null)
Filipe Gonçalves825414a2015-01-26 14:52:48 +0000618 {
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000619 update = BETA_MODE_ENABLED || mLatestVersion.isNewerVersionThan(mDeviceVersion);
Jose Pascoalaa579a82014-11-05 22:17:16 +0000620 }
621 return update;
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100622 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100623
Jose Pascoal40916302015-02-06 18:43:47 +0000624 public String getItemName(DownloadableItem item, boolean isVersion)
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100625 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000626 String itemName = "";
627 if (item != null)
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100628 {
Jose Pascoal40916302015-02-06 18:43:47 +0000629 if(isVersion)
Jose Pascoal02d86242014-12-17 18:50:08 +0000630 {
Jose Pascoal40916302015-02-06 18:43:47 +0000631 itemName = getVersionName((Version) item);
Jose Pascoal02d86242014-12-17 18:50:08 +0000632 }
Jose Pascoal40916302015-02-06 18:43:47 +0000633 else
Jose Pascoal02d86242014-12-17 18:50:08 +0000634 {
Jose Pascoal40916302015-02-06 18:43:47 +0000635 itemName = getStoreName((Store) item);
636 }
637 }
638 return itemName;
639 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000640
Jose Pascoal40916302015-02-06 18:43:47 +0000641 public String getVersionName(Version version)
642 {
643 String itemName = "";
644 if (version != null)
645 {
646 itemName = version.getImageTypeDescription(getResources()) + " " + version.getName() + " " + version.getBuildNumber();
647 }
648 return itemName;
649 }
650
Jose Pascoalcfc2dd42015-02-09 18:00:05 +0000651 public static String getStoreName(Store store)
Jose Pascoal40916302015-02-06 18:43:47 +0000652 {
653 String itemName = "";
654 if (store != null)
655 {
656 itemName = store.getName();
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100657 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000658 return itemName;
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100659 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100660
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100661 public String getDeviceVersionName()
662 {
Jose Pascoal40916302015-02-06 18:43:47 +0000663 return getVersionName(mDeviceVersion);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100664 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100665
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100666 public String getLatestVersionName()
667 {
Jose Pascoal40916302015-02-06 18:43:47 +0000668 return getVersionName(mLatestVersion);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100669 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100670
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100671 public Version getDeviceVersion()
672 {
673 return mDeviceVersion;
674 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100675
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100676 public Version getLatestVersion()
677 {
678 return mLatestVersion;
679 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100680
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100681 public Version getSelectedVersion()
682 {
683 return mSelectedVersion;
684 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000685
Jose Pascoalad4ea572014-12-16 20:31:48 +0000686 public Store getSelectedStore()
687 {
688 return mSelectedStore;
689 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100690
Jose Pascoalcfc2dd42015-02-09 18:00:05 +0000691 public static HeaderType getHeaderTypeFromImageType(String imageType)
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100692 {
693 HeaderType type = HeaderType.MAIN_FAIRPHONE;
694 if (Version.IMAGE_TYPE_AOSP.equalsIgnoreCase(imageType))
695 {
696 type = HeaderType.ANDROID;
697 }
698 else if (Version.IMAGE_TYPE_FAIRPHONE.equalsIgnoreCase(imageType))
699 {
700 type = HeaderType.FAIRPHONE;
701 }
702 return type;
703 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100704
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100705 public void setSelectedVersion(Version selectedVersion)
706 {
707 int versionNumber = selectedVersion != null ? selectedVersion.getNumber() : 0;
708 String versionImageType = selectedVersion != null ? selectedVersion.getImageType() : "";
Jose Pascoale4c48e32014-10-03 19:55:39 +0100709
Jose Pascoalad4ea572014-12-16 20:31:48 +0000710 clearSelectedVersion(versionNumber, versionImageType);
711
712 mSelectedVersion = UpdaterData.getInstance().getVersion(versionImageType, versionNumber);
713 clearSelectedStore(0);
714 }
715
Jose Pascoal02d86242014-12-17 18:50:08 +0000716 public void clearSelectedItems()
717 {
718 clearSelectedVersion(0, "");
719 clearSelectedStore(0);
720 }
721
Jose Pascoalad4ea572014-12-16 20:31:48 +0000722 private void clearSelectedVersion(int versionNumber, String versionImageType)
723 {
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100724 Editor editor = mSharedPreferences.edit();
725 editor.putInt(PREFERENCE_SELECTED_VERSION_NUMBER, versionNumber);
726 editor.putString(PREFERENCE_SELECTED_VERSION_TYPE, versionImageType);
727 editor.commit();
Jose Pascoal02d86242014-12-17 18:50:08 +0000728
Jose Pascoalad4ea572014-12-16 20:31:48 +0000729 mSelectedVersion = null;
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100730 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000731
Tiago Costa3add03e2014-12-16 12:05:23 +0000732 public void setSelectedStore(Store selectedStore)
733 {
Jose Pascoalad4ea572014-12-16 20:31:48 +0000734 int storeNumber = selectedStore != null ? selectedStore.getNumber() : 0;
735
736 clearSelectedStore(storeNumber);
737
738 mSelectedStore = UpdaterData.getInstance().getStore(storeNumber);
739 clearSelectedVersion(0, "");
740 }
741
742 private void clearSelectedStore(int storeNumber)
743 {
744 Editor editor = mSharedPreferences.edit();
745 editor.putInt(PREFERENCE_SELECTED_STORE_NUMBER, storeNumber);
746 editor.commit();
Jose Pascoal02d86242014-12-17 18:50:08 +0000747
Jose Pascoalad4ea572014-12-16 20:31:48 +0000748 mSelectedStore = null;
Tiago Costa3add03e2014-12-16 12:05:23 +0000749 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100750
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100751 public void resetLastUpdateDownloadId()
752 {
753 mLatestUpdateDownloadId = 0;
754 savePreference(PREFERENCE_DOWNLOAD_ID, mLatestUpdateDownloadId);
755 setSelectedVersion(null);
756 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100757
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100758 private Version getLatestVersionFromConfig()
759 {
Jose Pascoalaa579a82014-11-05 22:17:16 +0000760 Version latest = null;
761 if (mDeviceVersion != null)
762 {
763 latest = UpdaterData.getInstance().getLatestVersion(mDeviceVersion.getImageType());
764 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100765 return latest;
766 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100767
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100768 public void updateLatestVersionFromConfig()
769 {
770 mLatestVersion = getLatestVersionFromConfig();
771 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100772
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000773 private boolean mLaunchGapps = false;
Tiago Costadaaa32c2015-01-08 12:12:24 +0000774
775 @Override
776 protected void onNewIntent(Intent intent)
777 {
Jose Pascoal87758742015-01-28 20:00:22 +0000778 super.onNewIntent(intent);
779 setIntent(intent);
780
Tiago Costadaaa32c2015-01-08 12:12:24 +0000781 mLaunchGapps = false;
782
Jose Pascoal62235572015-01-29 16:42:23 +0000783 if (checkStartGappsInstall(intent))
Tiago Costadaaa32c2015-01-08 12:12:24 +0000784 {
785 mLaunchGapps = true;
786 }
787 else
788 {
Jose Pascoal40916302015-02-06 18:43:47 +0000789 Intent parentIntent = getParentActivityIntent();
790 if (checkStartGappsInstall(parentIntent))
Tiago Costadaaa32c2015-01-08 12:12:24 +0000791 {
792 mLaunchGapps = true;
793 }
794 }
Tiago Costadaaa32c2015-01-08 12:12:24 +0000795 }
796
Jose Pascoalcfc2dd42015-02-09 18:00:05 +0000797 private static boolean checkStartGappsInstall(Intent intent)
Jose Pascoal62235572015-01-29 16:42:23 +0000798 {
799 return intent != null && GappsInstallerHelper.EXTRA_START_GAPPS_INSTALL.equals(intent.getAction());
800 }
801
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100802 @Override
803 protected void onResume()
804 {
805 super.onResume();
Jose Pascoal87758742015-01-28 20:00:22 +0000806
807 // check current state
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100808 mCurrentState = getCurrentUpdaterState();
Jose Pascoale4c48e32014-10-03 19:55:39 +0100809
Jose Pascoalaa579a82014-11-05 22:17:16 +0000810 startService();
Jose Pascoal87758742015-01-28 20:00:22 +0000811
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100812 boolean isConfigLoaded = UpdaterService.readUpdaterData(this);
813 mDeviceVersion = VersionParserHelper.getDeviceVersion(this);
Jose Pascoalaa579a82014-11-05 22:17:16 +0000814
815 if (mDeviceVersion != null)
816 {
817 mLatestVersion = isConfigLoaded ? UpdaterData.getInstance().getLatestVersion(mDeviceVersion.getImageType()) : null;
818 }
819 else
820 {
821 mLatestVersion = null;
822 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100823
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100824 getSelectedVersionFromSharedPreferences();
Jose Pascoalad4ea572014-12-16 20:31:48 +0000825 getSelectedStoreFromSharedPreferences();
Jose Pascoal87758742015-01-28 20:00:22 +0000826
827 changeFragment(getFragmentFromState());
Tiago Costadaaa32c2015-01-08 12:12:24 +0000828 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100829
Jose Pascoal87758742015-01-28 20:00:22 +0000830 public Fragment startGappsInstall()
Tiago Costadaaa32c2015-01-08 12:12:24 +0000831 {
Tiago Costa73575aa2015-01-19 15:48:26 +0000832 getSelectedStoreFromSharedPreferences();
Tiago Costadaaa32c2015-01-08 12:12:24 +0000833
834 VersionDetailFragment fragment = new VersionDetailFragment(false);
835
Tiago Costa73575aa2015-01-19 15:48:26 +0000836 if (mSelectedStore != null)
Tiago Costadaaa32c2015-01-08 12:12:24 +0000837 {
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000838 fragment.setupAppStoreFragment(mSelectedStore);
Tiago Costadaaa32c2015-01-08 12:12:24 +0000839 }
Jose Pascoal87758742015-01-28 20:00:22 +0000840 else
841 {
842 fragment = null;
843 }
844
845 return fragment;
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100846 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100847
Jose Pascoalaa579a82014-11-05 22:17:16 +0000848 private void startService()
849 {
850 if (mCurrentState == UpdaterState.NORMAL)
851 {
852 Utils.startUpdaterService(this, true);
853 }
854 else
855 {
856 Utils.startUpdaterService(this, false);
857 }
858 }
859
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100860 public void updateStatePreference(UpdaterState newState)
861 {
862 mCurrentState = newState;
Jose Pascoale4c48e32014-10-03 19:55:39 +0100863
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100864 Editor editor = mSharedPreferences.edit();
Jose Pascoale4c48e32014-10-03 19:55:39 +0100865
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100866 editor.putString(PREFERENCE_CURRENT_UPDATER_STATE, mCurrentState.name());
Jose Pascoale4c48e32014-10-03 19:55:39 +0100867
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100868 editor.commit();
869 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100870
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100871 public long getLatestDownloadId()
872 {
873 return mLatestUpdateDownloadId;
874 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100875
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100876 public long getLatestUpdateDownloadIdFromSharedPreference()
877 {
878 if (mLatestUpdateDownloadId == 0)
879 {
880 mLatestUpdateDownloadId = getLongPreference(PREFERENCE_DOWNLOAD_ID);
881 }
882 return mLatestUpdateDownloadId;
883 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100884
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100885 public void saveLatestUpdateDownloadId(long latestUpdateDownloadId)
886 {
887 mLatestUpdateDownloadId = latestUpdateDownloadId;
888 savePreference(PREFERENCE_DOWNLOAD_ID, mLatestUpdateDownloadId);
Jose Pascoal02d86242014-12-17 18:50:08 +0000889 }
Jose Pascoalc2545cc2014-12-18 16:51:52 +0000890
891 public long getConfigFileDownloadIdFromSharedPreference()
892 {
893 return getLongPreference(UpdaterService.PREFERENCE_LAST_CONFIG_DOWNLOAD_ID);
894 }
895
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000896 public void clearConfigFileDownloadId()
Jose Pascoalc2545cc2014-12-18 16:51:52 +0000897 {
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000898 savePreference(UpdaterService.PREFERENCE_LAST_CONFIG_DOWNLOAD_ID, 0L);
Jose Pascoalc2545cc2014-12-18 16:51:52 +0000899 }
Jose Pascoal91aff132014-10-02 17:19:47 +0100900}