blob: 3976b89cd80f51ca5c45e19055fb584424cd0d49 [file] [log] [blame]
Jose Pascoal91aff132014-10-02 17:19:47 +01001package com.fairphone.updater;
2
Filipe Gonçalves72817782015-03-19 15:29:05 +00003import android.app.AlertDialog;
Filipe Gonçalves72817782015-03-19 15:29:05 +00004import android.content.DialogInterface;
Jose Pascoalad4ea572014-12-16 20:31:48 +00005import android.content.Intent;
Jose Pascoal2666b892014-10-02 21:05:08 +01006import android.content.SharedPreferences;
7import android.content.SharedPreferences.Editor;
Filipe Gonçalves72817782015-03-19 15:29:05 +00008import android.content.res.Resources;
Jose Pascoal79357c52015-03-12 20:14:29 +00009import android.net.Uri;
Jose Pascoal91aff132014-10-02 17:19:47 +010010import android.os.Bundle;
Filipe Gonçalves49ce23c2015-02-13 16:33:52 +000011import android.provider.Settings;
Jose Pascoal91aff132014-10-02 17:19:47 +010012import android.support.v4.app.Fragment;
13import android.support.v4.app.FragmentActivity;
Jose Pascoal3bc3a842014-10-16 19:03:21 +010014import android.support.v4.app.FragmentManager;
Jose Pascoal91aff132014-10-02 17:19:47 +010015import android.support.v4.app.FragmentTransaction;
Jose Pascoalaa579a82014-11-05 22:17:16 +000016import android.text.TextUtils;
Jose Pascoal2666b892014-10-02 21:05:08 +010017import android.util.Log;
18import android.view.View;
Pedro Arelo6d2bac92014-10-09 16:48:27 +010019import android.view.View.OnClickListener;
Jose Pascoalc172d892014-11-17 17:36:12 +000020import android.widget.ImageButton;
Jose Pascoal2666b892014-10-02 21:05:08 +010021import android.widget.TextView;
22import android.widget.Toast;
Jose Pascoal91aff132014-10-02 17:19:47 +010023
Jose Pascoal2666b892014-10-02 21:05:08 +010024import com.crashlytics.android.Crashlytics;
Jose Pascoal02d86242014-12-17 18:50:08 +000025import com.fairphone.updater.data.DownloadableItem;
Tiago Costa3add03e2014-12-16 12:05:23 +000026import com.fairphone.updater.data.Store;
Jose Pascoal7bf83a02014-10-13 18:30:18 +010027import com.fairphone.updater.data.UpdaterData;
28import com.fairphone.updater.data.Version;
29import com.fairphone.updater.data.VersionParserHelper;
Jose Pascoalb690af12014-10-06 18:29:26 +010030import com.fairphone.updater.fragments.DownloadAndRestartFragment;
Tiago Costa3855faa2014-11-14 17:55:05 +000031import com.fairphone.updater.fragments.InfoPopupDialog;
Jose Pascoal91aff132014-10-02 17:19:47 +010032import com.fairphone.updater.fragments.MainFragment;
Tiago Costadaaa32c2015-01-08 12:12:24 +000033import com.fairphone.updater.fragments.VersionDetailFragment;
Tiago Costa3855faa2014-11-14 17:55:05 +000034import com.fairphone.updater.fragments.VersionDetailFragment.DetailLayoutType;
Jose Pascoalad4ea572014-12-16 20:31:48 +000035import com.fairphone.updater.gappsinstaller.GappsInstallerHelper;
Jose Pascoale4c48e32014-10-03 19:55:39 +010036import com.fairphone.updater.tools.Utils;
Jose Pascoal91aff132014-10-02 17:19:47 +010037
Jose Pascoal7bf83a02014-10-13 18:30:18 +010038public class FairphoneUpdater extends FragmentActivity
Pedro Arelo6d2bac92014-10-09 16:48:27 +010039{
Jose Pascoal91aff132014-10-02 17:19:47 +010040
Jose Pascoal7bf83a02014-10-13 18:30:18 +010041 private static final String TAG = FairphoneUpdater.class.getSimpleName();
Jose Pascoal2666b892014-10-02 21:05:08 +010042
Filipe Gonçalves49ce23c2015-02-13 16:33:52 +000043 private static final String CRASHLYTICS_OPT_IN = "crashlytics_opt_in"; // IMPORTANT: keep synced with Settings.Global.CRASHLYTICS_OPT_IN
44
Pedro Arelo6d2bac92014-10-09 16:48:27 +010045 public static final String FAIRPHONE_UPDATER_NEW_VERSION_RECEIVED = "FairphoneUpdater.NEW.VERSION.RECEIVED";
Jose Pascoal2666b892014-10-02 21:05:08 +010046
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +000047 private static final String PREFERENCE_FIRST_TIME_ANDROID = "FirstTimeAndroid";
Jose Pascoal02d86242014-12-17 18:50:08 +000048
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +000049 private static final String PREFERENCE_FIRST_TIME_FAIRPHONE = "FirstTimeFairphone";
Jose Pascoal02d86242014-12-17 18:50:08 +000050
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +000051 private static final String PREFERENCE_FIRST_TIME_APP_STORE = "FirstTimeAppStore";
Tiago Costadaaa32c2015-01-08 12:12:24 +000052
Jose Pascoal85b803b2015-03-19 12:23:11 +000053 public static final String PREFERENCE_CURRENT_UPDATER_STATE = "CurrentUpdaterState";
Jose Pascoal2666b892014-10-02 21:05:08 +010054
Pedro Arelo6d2bac92014-10-09 16:48:27 +010055 private static final String PREFERENCE_DOWNLOAD_ID = "LatestUpdateDownloadId";
Jose Pascoal2666b892014-10-02 21:05:08 +010056
Pedro Arelo6d2bac92014-10-09 16:48:27 +010057 public static final String FAIRPHONE_UPDATER_PREFERENCES = "FairphoneUpdaterPreferences";
Jose Pascoal2666b892014-10-02 21:05:08 +010058
Jose Pascoal85b803b2015-03-19 12:23:11 +000059 public static final String PREFERENCE_SELECTED_VERSION_NUMBER = "SelectedVersionNumber";
Jose Pascoal2666b892014-10-02 21:05:08 +010060
Jose Pascoal85b803b2015-03-19 12:23:11 +000061 public static final String PREFERENCE_SELECTED_VERSION_TYPE = "SelectedVersionImageType";
Jose Pascoal2666b892014-10-02 21:05:08 +010062
Pedro Arelo6d2bac92014-10-09 16:48:27 +010063 public static final String FAIRPHONE_UPDATER_CONFIG_DOWNLOAD_FAILED = "FairphoneUpdater.Config.File.Download.FAILED";
Jose Pascoal2666b892014-10-02 21:05:08 +010064
Pedro Arelo6d2bac92014-10-09 16:48:27 +010065 public static final String FAIRPHONE_UPDATER_CONFIG_DOWNLOAD_LINK = "FairphoneUpdater.ConfigFile.Download.LINK";
Jose Pascoal02d86242014-12-17 18:50:08 +000066
Jose Pascoalad4ea572014-12-16 20:31:48 +000067 public static final String PREFERENCE_SELECTED_STORE_NUMBER = "SelectedStoreNumber";
Filipe Gonçalvesafeac2c2015-01-27 17:49:53 +000068
69 public static final String PREFERENCE_OTA_DOWNLOAD_URL = "OtaDownloadUrl";
Jose Pascoal87758742015-01-28 20:00:22 +000070
71 private static final String TAG_FIRST_FRAGMENT = "FIRST_FRAGMENT";
Jose Pascoal79357c52015-03-12 20:14:29 +000072 private String mZipPath;
Filipe Gonçalves7f6359a2015-03-19 16:01:03 +000073 private AlertDialog wifiOffDialog;
Filipe Gonçalvesafeac2c2015-01-27 17:49:53 +000074
Jose Pascoal2666b892014-10-02 21:05:08 +010075
Filipe Gonçalves7f6359a2015-03-19 16:01:03 +000076 public static enum UpdaterState
Pedro Arelo6d2bac92014-10-09 16:48:27 +010077 {
Jose Pascoal79357c52015-03-12 20:14:29 +000078 NORMAL, DOWNLOAD, PREINSTALL, ZIP_INSTALL
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +000079 }
Jose Pascoal2666b892014-10-02 21:05:08 +010080
Pedro Arelo6d2bac92014-10-09 16:48:27 +010081 private Version mDeviceVersion;
Pedro Arelo6d2bac92014-10-09 16:48:27 +010082 private Version mLatestVersion;
Pedro Arelo6d2bac92014-10-09 16:48:27 +010083 private Version mSelectedVersion;
Jose Pascoal2666b892014-10-02 21:05:08 +010084
Pedro Arelo6d2bac92014-10-09 16:48:27 +010085 private UpdaterState mCurrentState;
Pedro Arelo6d2bac92014-10-09 16:48:27 +010086 private SharedPreferences mSharedPreferences;
Jose Pascoal2666b892014-10-02 21:05:08 +010087
Pedro Arelo6d2bac92014-10-09 16:48:27 +010088 private long mLatestUpdateDownloadId;
Jose Pascoal2666b892014-10-02 21:05:08 +010089
Pedro Arelo6d2bac92014-10-09 16:48:27 +010090 public static boolean DEV_MODE_ENABLED;
Filipe Gonçalves825414a2015-01-26 14:52:48 +000091 public static boolean BETA_MODE_ENABLED;
Filipe72b5a7f2015-09-01 08:59:54 +000092 public static String otaDevDownloadUrl = "";
Jose Pascoal2666b892014-10-02 21:05:08 +010093
Pedro Arelo6d2bac92014-10-09 16:48:27 +010094 private TextView headerMainFairphoneText;
95 private TextView headerMainAndroidText;
96 private TextView headerFairphoneText;
97 private TextView headerAndroidText;
Tiago Costa6d360e22014-12-15 14:32:51 +000098 private TextView headerAppStoreText;
Pedro Arelo6d2bac92014-10-09 16:48:27 +010099 private TextView headerOtherOSText;
Jose Pascoalc172d892014-11-17 17:36:12 +0000100 private ImageButton headerFairphoneInfoButton;
101 private ImageButton headerAndroidInfoButton;
Jose Pascoal02d86242014-12-17 18:50:08 +0000102
Tiago Costa9008b612014-11-14 18:19:50 +0000103 private boolean mIsFirstTimeAndroid;
104 private boolean mIsFirstTimeFairphone;
Tiago Costadaaa32c2015-01-08 12:12:24 +0000105 private boolean mIsFirstTimeAppStore;
Jose Pascoal02d86242014-12-17 18:50:08 +0000106
Jose Pascoalad4ea572014-12-16 20:31:48 +0000107 private Store mSelectedStore;
Jose Pascoal02d86242014-12-17 18:50:08 +0000108
109 private TextView headerMainAppStoreText;
Filipe72b5a7f2015-09-01 08:59:54 +0000110 public enum HeaderType
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100111 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000112 MAIN_FAIRPHONE, MAIN_ANDROID, MAIN_APP_STORE, FAIRPHONE, ANDROID, OTHER_OS, APP_STORE
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000113 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100114
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100115 @Override
116 protected void onCreate(Bundle savedInstanceState)
117 {
118 super.onCreate(savedInstanceState);
Jose Pascoal79357c52015-03-12 20:14:29 +0000119 mSharedPreferences = getSharedPreferences(FAIRPHONE_UPDATER_PREFERENCES, MODE_PRIVATE);
120
Jose Pascoal87758742015-01-28 20:00:22 +0000121 onNewIntent(getIntent());
122
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100123 setContentView(R.layout.activity_updater);
Jose Pascoal2666b892014-10-02 21:05:08 +0100124
Filipe Gonçalves49ce23c2015-02-13 16:33:52 +0000125 if (Settings.Global.getInt(getContentResolver(), CRASHLYTICS_OPT_IN, 0) == 1)
126 {
127 Log.d(TAG, "Crash reports active.");
Filipe72b5a7f2015-09-01 08:59:54 +0000128 try {
129 Crashlytics.start(this);
130 } catch(Exception e) {
131 Log.w(TAG, "Crashlytics failed to start");
132 }
Filipe Gonçalves49ce23c2015-02-13 16:33:52 +0000133 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100134
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100135 DEV_MODE_ENABLED = false;
Jose Pascoal2666b892014-10-02 21:05:08 +0100136
Filipe72b5a7f2015-09-01 08:59:54 +0000137 otaDevDownloadUrl = "";
138
Tiago Costa9008b612014-11-14 18:19:50 +0000139 // update first times
140 mIsFirstTimeAndroid = mSharedPreferences.getBoolean(PREFERENCE_FIRST_TIME_ANDROID, true);
Jose Pascoal02d86242014-12-17 18:50:08 +0000141
Tiago Costa9008b612014-11-14 18:19:50 +0000142 mIsFirstTimeFairphone = mSharedPreferences.getBoolean(PREFERENCE_FIRST_TIME_FAIRPHONE, true);
Jose Pascoal02d86242014-12-17 18:50:08 +0000143
Tiago Costae02ce352015-01-23 15:43:22 +0000144 mIsFirstTimeAppStore = false;//mSharedPreferences.getBoolean(PREFERENCE_FIRST_TIME_APP_STORE, true);
Tiago Costa1216b102015-03-10 15:48:18 +0000145
Jose Pascoal4fe7ba52015-03-13 16:54:31 +0000146 String otaDownloadUrl = getResources().getString(R.string.downloadUrl);
Tiago Costa1216b102015-03-10 15:48:18 +0000147
148 // reset download URL
149 Editor editor = mSharedPreferences.edit();
Jose Pascoal4fe7ba52015-03-13 16:54:31 +0000150 editor.putString(PREFERENCE_OTA_DOWNLOAD_URL, otaDownloadUrl);
Filipe72b5a7f2015-09-01 08:59:54 +0000151 editor.apply();
Tiago Costadaaa32c2015-01-08 12:12:24 +0000152
Filipe Gonçalvesad527aa2015-01-12 15:13:35 +0000153 // get system data
154 mDeviceVersion = VersionParserHelper.getDeviceVersion(this);
155
156 isDeviceSupported();
157
Filipe Gonçalves825414a2015-01-26 14:52:48 +0000158 setupBetaStatus();
159
Jose Pascoalaa579a82014-11-05 22:17:16 +0000160 // check current state
161 mCurrentState = getCurrentUpdaterState();
Jose Pascoalaa579a82014-11-05 22:17:16 +0000162
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100163 boolean isConfigLoaded = UpdaterService.readUpdaterData(this);
Filipe Gonçalves9c8d93a2015-01-28 14:35:49 +0000164 if (!isConfigLoaded) {
Jose Pascoal0b48f8d2015-02-06 16:06:41 +0000165 mSharedPreferences.edit().remove(UpdaterService.LAST_CONFIG_DOWNLOAD_IN_MS).apply();
Filipe Gonçalves9c8d93a2015-01-28 14:35:49 +0000166 }
Filipe Gonçalves42ffc322015-01-28 12:51:14 +0000167
Jose Pascoalaa579a82014-11-05 22:17:16 +0000168 if (mDeviceVersion != null)
169 {
170 mLatestVersion = isConfigLoaded ? UpdaterData.getInstance().getLatestVersion(mDeviceVersion.getImageType()) : null;
171 }
172 else
173 {
174 mLatestVersion = null;
175 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100176
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100177 initHeaderViews();
Jose Pascoale4c48e32014-10-03 19:55:39 +0100178
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100179 setupFragments(savedInstanceState);
Filipe72b5a7f2015-09-01 08:59:54 +0000180
181 startService();
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100182 }
Filipe Gonçalves72817782015-03-19 15:29:05 +0000183
184
Filipe Gonçalves825414a2015-01-26 14:52:48 +0000185
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000186 void setupBetaStatus()
Filipe Gonçalves825414a2015-01-26 14:52:48 +0000187 {
188 BETA_MODE_ENABLED = mDeviceVersion.getBetaStatus().equals("1");
189 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100190
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100191 private void isDeviceSupported()
192 {
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000193 if(Utils.isDeviceUnsupported(this))
Jose Pascoalda00b382015-01-20 18:39:28 +0000194 {
Filipe Gonçalvesad527aa2015-01-12 15:13:35 +0000195 Toast.makeText(this, R.string.device_not_supported_message, Toast.LENGTH_LONG).show();
196 finish();
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100197 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100198 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100199
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000200 void getSelectedVersionFromSharedPreferences()
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100201 {
202 String versionImageType = mSharedPreferences.getString(PREFERENCE_SELECTED_VERSION_TYPE, "");
Maarten Derksbb287762015-10-12 17:22:45 +0200203 String versionNumber = mSharedPreferences.getString(PREFERENCE_SELECTED_VERSION_NUMBER, "0");
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100204 mSelectedVersion = UpdaterData.getInstance().getVersion(versionImageType, versionNumber);
205 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000206
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000207 void getSelectedStoreFromSharedPreferences()
Jose Pascoalad4ea572014-12-16 20:31:48 +0000208 {
Maarten Derksbb287762015-10-12 17:22:45 +0200209 String storeNumber = mSharedPreferences.getString(PREFERENCE_SELECTED_STORE_NUMBER, "-1");
Jose Pascoalad4ea572014-12-16 20:31:48 +0000210 mSelectedStore = UpdaterData.getInstance().getStore(storeNumber);
211 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100212
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100213 public UpdaterState getCurrentUpdaterState()
214 {
Jose Pascoal2666b892014-10-02 21:05:08 +0100215
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000216 String currentState = mSharedPreferences.getString(PREFERENCE_CURRENT_UPDATER_STATE, null);
Jose Pascoal2666b892014-10-02 21:05:08 +0100217
Jose Pascoalaa579a82014-11-05 22:17:16 +0000218 if (TextUtils.isEmpty(currentState))
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100219 {
220 currentState = UpdaterState.NORMAL.name();
Jose Pascoal2666b892014-10-02 21:05:08 +0100221
Jose Pascoalaa579a82014-11-05 22:17:16 +0000222 updateStatePreference(UpdaterState.NORMAL);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100223 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100224
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100225 return UpdaterState.valueOf(currentState);
226 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100227
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000228 long getLongPreference(String key)
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100229 {
230 return mSharedPreferences.getLong(key, 0);
231 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100232
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000233 void savePreference(String key, long value)
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100234 {
235 Editor editor = mSharedPreferences.edit();
Jose Pascoal2666b892014-10-02 21:05:08 +0100236
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100237 editor.putLong(key, value);
Jose Pascoal2666b892014-10-02 21:05:08 +0100238
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100239 editor.commit();
240 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100241
Tiago Costa1216b102015-03-10 15:48:18 +0000242 public void changeOTADownloadURL(String newUrl){
Filipe72b5a7f2015-09-01 08:59:54 +0000243 otaDevDownloadUrl = TextUtils.isEmpty(newUrl) ? getResources().getString(R.string.downloadUrl) : newUrl;
Jose Pascoaldca09ac2015-03-11 16:35:06 +0000244
Tiago Costa1216b102015-03-10 15:48:18 +0000245 Editor editor = mSharedPreferences.edit();
Filipe72b5a7f2015-09-01 08:59:54 +0000246 editor.putString(PREFERENCE_OTA_DOWNLOAD_URL, otaDevDownloadUrl);
Tiago Costa1216b102015-03-10 15:48:18 +0000247 editor.commit();
248 }
249
Filipe Gonçalves1e69a0e2015-03-16 17:22:55 +0000250 public void forceConfigDownload(){
Filipe72b5a7f2015-09-01 08:59:54 +0000251 Utils.startUpdaterService(getApplicationContext(), true);
Tiago Costa1216b102015-03-10 15:48:18 +0000252 }
253
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100254 private void initHeaderViews()
255 {
256 headerMainFairphoneText = (TextView) findViewById(R.id.header_main_fairphone_text);
257 headerMainAndroidText = (TextView) findViewById(R.id.header_main_android_text);
Jose Pascoal02d86242014-12-17 18:50:08 +0000258 headerMainAppStoreText = (TextView) findViewById(R.id.header_main_app_store_text);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100259 headerFairphoneText = (TextView) findViewById(R.id.header_fairphone_text);
260 headerAndroidText = (TextView) findViewById(R.id.header_android_text);
261 headerOtherOSText = (TextView) findViewById(R.id.header_other_os_text);
Tiago Costa6d360e22014-12-15 14:32:51 +0000262 headerAppStoreText = (TextView) findViewById(R.id.header_app_store_text);
Jose Pascoal2666b892014-10-02 21:05:08 +0100263
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100264 OnClickListener headerBackPressListener = new OnClickListener()
265 {
266 @Override
267 public void onClick(View v)
268 {
269 onBackPressed();
270 }
271 };
Jose Pascoal2666b892014-10-02 21:05:08 +0100272
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100273 headerFairphoneText.setOnClickListener(headerBackPressListener);
274 headerAndroidText.setOnClickListener(headerBackPressListener);
Tiago Costa6d360e22014-12-15 14:32:51 +0000275 headerAppStoreText.setOnClickListener(headerBackPressListener);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100276 headerOtherOSText.setOnClickListener(headerBackPressListener);
Jose Pascoal02d86242014-12-17 18:50:08 +0000277
278 headerFairphoneInfoButton = (ImageButton) findViewById(R.id.header_fairphone_info_button);
279 headerAndroidInfoButton = (ImageButton) findViewById(R.id.header_android_info_button);
280
Tiago Costa3855faa2014-11-14 17:55:05 +0000281 headerFairphoneInfoButton.setOnClickListener(new OnClickListener()
282 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000283
Tiago Costa3855faa2014-11-14 17:55:05 +0000284 @Override
285 public void onClick(View v)
286 {
287 showInfoPopupDialog(DetailLayoutType.FAIRPHONE);
288 }
289 });
Jose Pascoal02d86242014-12-17 18:50:08 +0000290
Tiago Costa3855faa2014-11-14 17:55:05 +0000291 headerAndroidInfoButton.setOnClickListener(new OnClickListener()
292 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000293
Tiago Costa3855faa2014-11-14 17:55:05 +0000294 @Override
295 public void onClick(View v)
296 {
297 showInfoPopupDialog(DetailLayoutType.ANDROID);
298 }
299 });
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100300 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100301
Tiago Costa3855faa2014-11-14 17:55:05 +0000302 private void showInfoPopupDialog(DetailLayoutType layoutType)
303 {
304 FragmentManager fm = getSupportFragmentManager();
Jose Pascoal02d86242014-12-17 18:50:08 +0000305 InfoPopupDialog popupDialog = new InfoPopupDialog(layoutType);
Tiago Costa3855faa2014-11-14 17:55:05 +0000306 popupDialog.show(fm, layoutType.name());
307 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000308
Jose Pascoalb397dc62014-10-13 19:26:58 +0100309 @Override
310 public void onBackPressed()
311 {
312 Fragment fragment = getTopFragment();
Jose Pascoal40916302015-02-06 18:43:47 +0000313 if (fragment != null && fragment instanceof DownloadAndRestartFragment && getCurrentUpdaterState() != UpdaterState.NORMAL)
Jose Pascoalb397dc62014-10-13 19:26:58 +0100314 {
Jose Pascoal4adf3192015-02-23 18:10:16 +0000315 ((DownloadAndRestartFragment) fragment).abortUpdateProcess("");
Jose Pascoalb397dc62014-10-13 19:26:58 +0100316 }
Jose Pascoal79357c52015-03-12 20:14:29 +0000317
318 if (fragment != null && TAG_FIRST_FRAGMENT.equals(fragment.getTag()))
Jose Pascoal3bc3a842014-10-16 19:03:21 +0100319 {
Jose Pascoalbeebb8b2014-12-17 19:28:04 +0000320 clearSelectedItems();
Jose Pascoal3bc3a842014-10-16 19:03:21 +0100321 finish();
322 }
Jose Pascoal87758742015-01-28 20:00:22 +0000323
324 super.onBackPressed();
Jose Pascoalb397dc62014-10-13 19:26:58 +0100325 }
326
Tiago Costa3855faa2014-11-14 17:55:05 +0000327 public void updateHeader(HeaderType type, String headerText, boolean showInfo)
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100328 {
Jose Pascoal2666b892014-10-02 21:05:08 +0100329
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100330 switch (type)
331 {
332 case FAIRPHONE:
333 headerMainFairphoneText.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100334 headerMainAndroidText.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000335 headerMainAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100336 headerFairphoneText.setVisibility(View.VISIBLE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100337 headerAndroidText.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000338 headerAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100339 headerOtherOSText.setVisibility(View.GONE);
Jose Pascoal2666b892014-10-02 21:05:08 +0100340
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100341 headerFairphoneText.setText(headerText);
Jose Pascoal02d86242014-12-17 18:50:08 +0000342
343 if (showInfo && mIsFirstTimeFairphone)
344 {
Tiago Costa9008b612014-11-14 18:19:50 +0000345 showInfoPopupDialog(DetailLayoutType.UPDATE_FAIRPHONE);
346 Editor editor = mSharedPreferences.edit();
Jose Pascoal02d86242014-12-17 18:50:08 +0000347
Tiago Costa9008b612014-11-14 18:19:50 +0000348 mIsFirstTimeFairphone = false;
Jose Pascoal02d86242014-12-17 18:50:08 +0000349
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000350 editor.putBoolean(PREFERENCE_FIRST_TIME_FAIRPHONE, false);
Jose Pascoal0b48f8d2015-02-06 16:06:41 +0000351 editor.apply();
Tiago Costa9008b612014-11-14 18:19:50 +0000352 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000353
Tiago Costa3855faa2014-11-14 17:55:05 +0000354 headerFairphoneInfoButton.setVisibility(showInfo ? View.VISIBLE : View.GONE);
355 headerAndroidInfoButton.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100356 break;
Jose Pascoalb690af12014-10-06 18:29:26 +0100357
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100358 case ANDROID:
359 headerMainFairphoneText.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100360 headerMainAndroidText.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000361 headerMainAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100362 headerFairphoneText.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100363 headerAndroidText.setVisibility(View.VISIBLE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000364 headerAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100365 headerOtherOSText.setVisibility(View.GONE);
Jose Pascoal91aff132014-10-02 17:19:47 +0100366
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100367 headerAndroidText.setText(headerText);
Jose Pascoal02d86242014-12-17 18:50:08 +0000368
369 if (showInfo && mIsFirstTimeAndroid)
370 {
Tiago Costa9008b612014-11-14 18:19:50 +0000371 showInfoPopupDialog(DetailLayoutType.UPDATE_ANDROID);
372 Editor editor = mSharedPreferences.edit();
Jose Pascoal02d86242014-12-17 18:50:08 +0000373
Tiago Costa9008b612014-11-14 18:19:50 +0000374 mIsFirstTimeAndroid = false;
Jose Pascoal02d86242014-12-17 18:50:08 +0000375
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000376 editor.putBoolean(PREFERENCE_FIRST_TIME_ANDROID, false);
Jose Pascoal0b48f8d2015-02-06 16:06:41 +0000377 editor.apply();
Tiago Costa9008b612014-11-14 18:19:50 +0000378 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000379
Tiago Costa3855faa2014-11-14 17:55:05 +0000380 headerFairphoneInfoButton.setVisibility(View.GONE);
381 headerAndroidInfoButton.setVisibility(showInfo ? View.VISIBLE : View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100382 break;
Jose Pascoal91aff132014-10-02 17:19:47 +0100383
Tiago Costa6d360e22014-12-15 14:32:51 +0000384 case APP_STORE:
385 headerMainFairphoneText.setVisibility(View.GONE);
386 headerMainAndroidText.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000387 headerMainAppStoreText.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000388 headerFairphoneText.setVisibility(View.GONE);
389 headerAndroidText.setVisibility(View.GONE);
390 headerAppStoreText.setVisibility(View.VISIBLE);
391 headerOtherOSText.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000392 headerAppStoreText.setText(headerText);
Jose Pascoal02d86242014-12-17 18:50:08 +0000393
Tiago Costadaaa32c2015-01-08 12:12:24 +0000394 if (showInfo && mIsFirstTimeAppStore)
395 {
396 showInfoPopupDialog(DetailLayoutType.APP_STORE);
397 Editor editor = mSharedPreferences.edit();
398
399 mIsFirstTimeAppStore = false;
400
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000401 editor.putBoolean(PREFERENCE_FIRST_TIME_APP_STORE, false);
Jose Pascoal0b48f8d2015-02-06 16:06:41 +0000402 editor.apply();
Tiago Costadaaa32c2015-01-08 12:12:24 +0000403 }
404
Tiago Costa6d360e22014-12-15 14:32:51 +0000405 headerFairphoneInfoButton.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000406 headerAndroidInfoButton.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000407 break;
408
Pedro Arelocb88f672014-10-09 17:41:02 +0100409 case OTHER_OS:
410 headerMainFairphoneText.setVisibility(View.GONE);
411 headerMainAndroidText.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000412 headerMainAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100413 headerFairphoneText.setVisibility(View.GONE);
414 headerAndroidText.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000415 headerAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100416 headerOtherOSText.setVisibility(View.VISIBLE);
417
418 headerOtherOSText.setText(headerText);
Jose Pascoal02d86242014-12-17 18:50:08 +0000419
Tiago Costa3855faa2014-11-14 17:55:05 +0000420 headerFairphoneInfoButton.setVisibility(View.GONE);
421 headerAndroidInfoButton.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100422 break;
423
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100424 case MAIN_ANDROID:
425 headerMainFairphoneText.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100426 headerMainAndroidText.setVisibility(View.VISIBLE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000427 headerMainAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100428 headerFairphoneText.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100429 headerAndroidText.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000430 headerAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100431 headerOtherOSText.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000432
433 headerFairphoneInfoButton.setVisibility(View.GONE);
434 headerAndroidInfoButton.setVisibility(View.GONE);
435 break;
Tiago Costa3855faa2014-11-14 17:55:05 +0000436
Jose Pascoal02d86242014-12-17 18:50:08 +0000437 case MAIN_APP_STORE:
438 headerMainFairphoneText.setVisibility(View.GONE);
439 headerMainAndroidText.setVisibility(View.GONE);
440 headerMainAppStoreText.setVisibility(View.VISIBLE);
441 headerFairphoneText.setVisibility(View.GONE);
442 headerAndroidText.setVisibility(View.GONE);
443 headerAppStoreText.setVisibility(View.GONE);
444 headerOtherOSText.setVisibility(View.GONE);
445
Tiago Costa3855faa2014-11-14 17:55:05 +0000446 headerFairphoneInfoButton.setVisibility(View.GONE);
447 headerAndroidInfoButton.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100448 break;
Jose Pascoal91aff132014-10-02 17:19:47 +0100449
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100450 case MAIN_FAIRPHONE:
451 default:
452 headerMainFairphoneText.setVisibility(View.VISIBLE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100453 headerMainAndroidText.setVisibility(View.GONE);
Filipe72b5a7f2015-09-01 08:59:54 +0000454 headerMainAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100455 headerFairphoneText.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100456 headerAndroidText.setVisibility(View.GONE);
Tiago Costa6d360e22014-12-15 14:32:51 +0000457 headerAppStoreText.setVisibility(View.GONE);
Pedro Arelocb88f672014-10-09 17:41:02 +0100458 headerOtherOSText.setVisibility(View.GONE);
Jose Pascoal02d86242014-12-17 18:50:08 +0000459
Tiago Costa3855faa2014-11-14 17:55:05 +0000460 headerFairphoneInfoButton.setVisibility(View.GONE);
461 headerAndroidInfoButton.setVisibility(View.GONE);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100462 break;
463 }
464 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100465
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100466 private void setupFragments(Bundle savedInstanceState)
467 {
468 // Check that the activity is using the layout version with
469 // the fragment_container FrameLayout
470 if (findViewById(R.id.fragment_holder) != null)
471 {
Jose Pascoal2666b892014-10-02 21:05:08 +0100472
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100473 // However, if we're being restored from a previous state,
474 // then we don't need to do anything and should return or else
475 // we could end up with overlapping fragments.
476 if (savedInstanceState != null)
477 {
478 return;
479 }
Jose Pascoal91aff132014-10-02 17:19:47 +0100480
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100481 // Create a new Fragment to be placed in the activity layout
Jose Pascoal87758742015-01-28 20:00:22 +0000482 Fragment firstFragment = new MainFragment();
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100483
484 // In case this activity was started with special instructions from
485 // an
486 // Intent, pass the Intent's extras to the fragment as arguments
Jose Pascoal02d86242014-12-17 18:50:08 +0000487 Intent intent = getIntent();
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000488 if (intent != null)
Jose Pascoal02d86242014-12-17 18:50:08 +0000489 {
490 Bundle bundle = intent.getExtras();
491 if (bundle != null)
492 {
493 firstFragment.setArguments(bundle);
494 }
495 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100496
497 // Add the fragment to the 'fragment_container' FrameLayout
Jose Pascoal799e3942014-11-04 21:12:26 +0000498 FragmentManager fragManager = getSupportFragmentManager();
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000499 if (fragManager != null)
Jose Pascoal799e3942014-11-04 21:12:26 +0000500 {
Jose Pascoal87758742015-01-28 20:00:22 +0000501 FragmentTransaction transation = fragManager.beginTransaction();
502 transation.add(R.id.fragment_holder, firstFragment, TAG_FIRST_FRAGMENT);
503 transation.addToBackStack(TAG_FIRST_FRAGMENT);
504 transation.commit();
Jose Pascoal799e3942014-11-04 21:12:26 +0000505 }
506 else
507 {
508 Log.e(TAG, "setupFragments - Couldn't get FragmentManager");
509 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100510 }
511 }
512
513 public Fragment getFragmentFromState()
514 {
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000515 Fragment firstFragment;
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100516 switch (mCurrentState)
517 {
518 case PREINSTALL:
519 case DOWNLOAD:
Jose Pascoalad4ea572014-12-16 20:31:48 +0000520 if (mSelectedVersion != null)
521 {
Tiago Costa198bf3d2014-12-16 15:23:18 +0000522 firstFragment = new DownloadAndRestartFragment(true);
Jose Pascoalad4ea572014-12-16 20:31:48 +0000523 }
524 else if (mSelectedStore != null)
525 {
Jose Pascoal1c049e02014-12-17 13:03:09 +0000526 firstFragment = new DownloadAndRestartFragment(false);
Jose Pascoal87758742015-01-28 20:00:22 +0000527 } else
528 {
Filipe Gonçalvesc984d512015-01-14 17:22:58 +0000529 firstFragment = new MainFragment();
530 updateStatePreference(UpdaterState.NORMAL);
Tiago Costa198bf3d2014-12-16 15:23:18 +0000531 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100532 break;
533 case NORMAL:
Jose Pascoal87758742015-01-28 20:00:22 +0000534 if(mLaunchGapps)
535 {
536 firstFragment = startGappsInstall();
537 }
538 else
539 {
540 firstFragment = new MainFragment();
541 }
542 break;
Jose Pascoal79357c52015-03-12 20:14:29 +0000543 case ZIP_INSTALL:
544 firstFragment = new DownloadAndRestartFragment(true);
545 break;
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100546 default:
547 firstFragment = new MainFragment();
548 break;
549 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000550
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100551 return firstFragment;
552 }
Jose Pascoalb690af12014-10-06 18:29:26 +0100553
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100554 public void changeFragment(Fragment newFragment)
555 {
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100556 Fragment topFragment = getTopFragment();
Filipe Gonçalvesc984d512015-01-14 17:22:58 +0000557 if ( newFragment != null && ( topFragment == null || !newFragment.getClass().equals(topFragment.getClass())) )
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100558 {
Jose Pascoal87758742015-01-28 20:00:22 +0000559 if(topFragment != null && newFragment instanceof MainFragment)
560 {
561 if(TAG_FIRST_FRAGMENT.equals(topFragment.getTag()))
562 {
563 return;
564 }
565 }
566
Jose Pascoal799e3942014-11-04 21:12:26 +0000567 FragmentManager fragManager = getSupportFragmentManager();
568 if (fragManager != null)
569 {
570 FragmentTransaction transaction = fragManager.beginTransaction();
571 // Replace whatever is in the fragment_container view with this
572 // fragment,
573 // and add the transaction to the back stack so the user can
574 // navigate
575 // back
Pedro Arelo8f002432015-02-19 17:03:19 +0000576 transaction.setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.pop_enter, R.anim.pop_exit);
Jose Pascoal799e3942014-11-04 21:12:26 +0000577 transaction.replace(R.id.fragment_holder, newFragment);
578 transaction.addToBackStack(null);
Jose Pascoal2666b892014-10-02 21:05:08 +0100579
Jose Pascoal799e3942014-11-04 21:12:26 +0000580 // Commit the transaction
581 transaction.commit();
582 }
583 else
584 {
585 Log.e(TAG, "changeFragment - Couldn't get FragmentManager");
586 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100587 }
588 }
Jose Pascoal436915f2014-10-08 15:37:26 +0100589
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000590 Fragment getTopFragment()
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100591 {
Jose Pascoal799e3942014-11-04 21:12:26 +0000592 Fragment topFragment = null;
593 FragmentManager fragManager = getSupportFragmentManager();
594 if (fragManager != null)
595 {
Jose Pascoal87758742015-01-28 20:00:22 +0000596 topFragment = fragManager.findFragmentById(R.id.fragment_holder);
Jose Pascoal799e3942014-11-04 21:12:26 +0000597 }
598 else
599 {
600 Log.e(TAG, "getTopFragment - Couldn't get FragmentManager");
601 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100602 return topFragment;
603 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100604
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100605 public boolean isUpdateAvailable()
606 {
Jose Pascoalaa579a82014-11-05 22:17:16 +0000607 boolean update = false;
Filipe Gonçalves3b08c8b2015-02-03 15:18:28 +0000608 if (mLatestVersion != null)
Filipe Gonçalves825414a2015-01-26 14:52:48 +0000609 {
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000610 update = BETA_MODE_ENABLED || mLatestVersion.isNewerVersionThan(mDeviceVersion);
Jose Pascoalaa579a82014-11-05 22:17:16 +0000611 }
612 return update;
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100613 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100614
Jose Pascoal40916302015-02-06 18:43:47 +0000615 public String getItemName(DownloadableItem item, boolean isVersion)
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100616 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000617 String itemName = "";
618 if (item != null)
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100619 {
Jose Pascoal40916302015-02-06 18:43:47 +0000620 if(isVersion)
Jose Pascoal02d86242014-12-17 18:50:08 +0000621 {
Jose Pascoal40916302015-02-06 18:43:47 +0000622 itemName = getVersionName((Version) item);
Jose Pascoal02d86242014-12-17 18:50:08 +0000623 }
Jose Pascoal40916302015-02-06 18:43:47 +0000624 else
Jose Pascoal02d86242014-12-17 18:50:08 +0000625 {
Jose Pascoal40916302015-02-06 18:43:47 +0000626 itemName = getStoreName((Store) item);
627 }
628 }
629 return itemName;
630 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000631
Jose Pascoal40916302015-02-06 18:43:47 +0000632 public String getVersionName(Version version)
633 {
634 String itemName = "";
635 if (version != null)
636 {
Jose Pascoal79357c52015-03-12 20:14:29 +0000637 if(mCurrentState != UpdaterState.ZIP_INSTALL) {
638 itemName = version.getImageTypeDescription(getResources()) + " ";
639 }
640 itemName += version.getName() + " " + version.getBuildNumber();
Jose Pascoal40916302015-02-06 18:43:47 +0000641 }
642 return itemName;
643 }
644
Jose Pascoalcfc2dd42015-02-09 18:00:05 +0000645 public static String getStoreName(Store store)
Jose Pascoal40916302015-02-06 18:43:47 +0000646 {
647 String itemName = "";
648 if (store != null)
649 {
650 itemName = store.getName();
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100651 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000652 return itemName;
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100653 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100654
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100655 public String getDeviceVersionName()
656 {
Jose Pascoal40916302015-02-06 18:43:47 +0000657 return getVersionName(mDeviceVersion);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100658 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100659
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100660 public String getLatestVersionName()
661 {
Jose Pascoal40916302015-02-06 18:43:47 +0000662 return getVersionName(mLatestVersion);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100663 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100664
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100665 public Version getDeviceVersion()
666 {
667 return mDeviceVersion;
668 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100669
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100670 public Version getLatestVersion()
671 {
672 return mLatestVersion;
673 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100674
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100675 public Version getSelectedVersion()
676 {
677 return mSelectedVersion;
678 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000679
Jose Pascoalad4ea572014-12-16 20:31:48 +0000680 public Store getSelectedStore()
681 {
682 return mSelectedStore;
683 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100684
Jose Pascoalcfc2dd42015-02-09 18:00:05 +0000685 public static HeaderType getHeaderTypeFromImageType(String imageType)
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100686 {
687 HeaderType type = HeaderType.MAIN_FAIRPHONE;
688 if (Version.IMAGE_TYPE_AOSP.equalsIgnoreCase(imageType))
689 {
690 type = HeaderType.ANDROID;
691 }
692 else if (Version.IMAGE_TYPE_FAIRPHONE.equalsIgnoreCase(imageType))
693 {
694 type = HeaderType.FAIRPHONE;
695 }
696 return type;
697 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100698
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100699 public void setSelectedVersion(Version selectedVersion)
700 {
Maarten Derksbb287762015-10-12 17:22:45 +0200701 String versionNumber = selectedVersion != null ? selectedVersion.getNumber() : "0";
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100702 String versionImageType = selectedVersion != null ? selectedVersion.getImageType() : "";
Jose Pascoale4c48e32014-10-03 19:55:39 +0100703
Jose Pascoalad4ea572014-12-16 20:31:48 +0000704 clearSelectedVersion(versionNumber, versionImageType);
705
706 mSelectedVersion = UpdaterData.getInstance().getVersion(versionImageType, versionNumber);
Maarten Derksbb287762015-10-12 17:22:45 +0200707 clearSelectedStore("-1");
Jose Pascoalad4ea572014-12-16 20:31:48 +0000708 }
709
Jose Pascoal02d86242014-12-17 18:50:08 +0000710 public void clearSelectedItems()
711 {
Maarten Derksbb287762015-10-12 17:22:45 +0200712 clearSelectedVersion("0", "");
713 clearSelectedStore("-1");
Jose Pascoal02d86242014-12-17 18:50:08 +0000714 }
715
Maarten Derksbb287762015-10-12 17:22:45 +0200716 private void clearSelectedVersion(String versionNumber, String versionImageType)
Jose Pascoalad4ea572014-12-16 20:31:48 +0000717 {
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100718 Editor editor = mSharedPreferences.edit();
Maarten Derksbb287762015-10-12 17:22:45 +0200719 editor.putString(PREFERENCE_SELECTED_VERSION_NUMBER, versionNumber);
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100720 editor.putString(PREFERENCE_SELECTED_VERSION_TYPE, versionImageType);
721 editor.commit();
Jose Pascoal02d86242014-12-17 18:50:08 +0000722
Jose Pascoalad4ea572014-12-16 20:31:48 +0000723 mSelectedVersion = null;
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100724 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000725
Tiago Costa3add03e2014-12-16 12:05:23 +0000726 public void setSelectedStore(Store selectedStore)
727 {
Maarten Derksbb287762015-10-12 17:22:45 +0200728 String storeNumber = selectedStore != null ? selectedStore.getNumber() : "-1";
Jose Pascoalad4ea572014-12-16 20:31:48 +0000729
730 clearSelectedStore(storeNumber);
731
732 mSelectedStore = UpdaterData.getInstance().getStore(storeNumber);
Maarten Derksbb287762015-10-12 17:22:45 +0200733 clearSelectedVersion("0", "");
Jose Pascoalad4ea572014-12-16 20:31:48 +0000734 }
735
Maarten Derksbb287762015-10-12 17:22:45 +0200736 private void clearSelectedStore(String storeNumber)
Jose Pascoalad4ea572014-12-16 20:31:48 +0000737 {
738 Editor editor = mSharedPreferences.edit();
Maarten Derksbb287762015-10-12 17:22:45 +0200739 editor.putString(PREFERENCE_SELECTED_STORE_NUMBER, storeNumber);
Jose Pascoalad4ea572014-12-16 20:31:48 +0000740 editor.commit();
Jose Pascoal02d86242014-12-17 18:50:08 +0000741
Jose Pascoalad4ea572014-12-16 20:31:48 +0000742 mSelectedStore = null;
Tiago Costa3add03e2014-12-16 12:05:23 +0000743 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100744
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100745 public void resetLastUpdateDownloadId()
746 {
747 mLatestUpdateDownloadId = 0;
748 savePreference(PREFERENCE_DOWNLOAD_ID, mLatestUpdateDownloadId);
749 setSelectedVersion(null);
750 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100751
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100752 private Version getLatestVersionFromConfig()
753 {
Jose Pascoalaa579a82014-11-05 22:17:16 +0000754 Version latest = null;
755 if (mDeviceVersion != null)
756 {
757 latest = UpdaterData.getInstance().getLatestVersion(mDeviceVersion.getImageType());
758 }
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100759 return latest;
760 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100761
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100762 public void updateLatestVersionFromConfig()
763 {
764 mLatestVersion = getLatestVersionFromConfig();
765 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100766
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000767 private boolean mLaunchGapps = false;
Tiago Costadaaa32c2015-01-08 12:12:24 +0000768
769 @Override
770 protected void onNewIntent(Intent intent)
771 {
Jose Pascoal87758742015-01-28 20:00:22 +0000772 super.onNewIntent(intent);
773 setIntent(intent);
Tiago Costadaaa32c2015-01-08 12:12:24 +0000774 mLaunchGapps = false;
775
Jose Pascoal79357c52015-03-12 20:14:29 +0000776 if(intent != null) {
Jose Pascoal8b8c2d22015-03-30 12:11:44 +0100777 String action = TextUtils.isEmpty(intent.getAction()) ? "" : intent.getAction();
Jose Pascoal79357c52015-03-12 20:14:29 +0000778 switch (action)
Tiago Costadaaa32c2015-01-08 12:12:24 +0000779 {
Jose Pascoal79357c52015-03-12 20:14:29 +0000780 case GappsInstallerHelper.EXTRA_START_GAPPS_INSTALL:
781 if (checkStartGappsInstall(intent)) {
782 mLaunchGapps = true;
783 } else {
784 Intent parentIntent = getParentActivityIntent();
785 if (checkStartGappsInstall(parentIntent)) {
786 mLaunchGapps = true;
787 }
788 }
789 break;
790 case Intent.ACTION_VIEW:
791 Uri data = intent.getData();
792 if(data != null)
793 {
Jose Pascoal2a8283b2015-03-13 14:43:42 +0000794
795 String zipPath = Utils.getPath(this, data);
Jose Pascoal79357c52015-03-12 20:14:29 +0000796 if(!TextUtils.isEmpty(zipPath)) {
797 mZipPath = zipPath;
798 updateStatePreference(UpdaterState.ZIP_INSTALL);
799 }
800 else
801 {
802 mZipPath = "";
803 }
804 }
805 break;
806 default:
807 //no action
808 break;
Tiago Costadaaa32c2015-01-08 12:12:24 +0000809 }
810 }
Tiago Costadaaa32c2015-01-08 12:12:24 +0000811 }
812
Jose Pascoalcfc2dd42015-02-09 18:00:05 +0000813 private static boolean checkStartGappsInstall(Intent intent)
Jose Pascoal62235572015-01-29 16:42:23 +0000814 {
815 return intent != null && GappsInstallerHelper.EXTRA_START_GAPPS_INSTALL.equals(intent.getAction());
816 }
817
Filipe Gonçalves7f6359a2015-03-19 16:01:03 +0000818 @Override
819 protected void onPause() {
820 super.onPause();
821 if(wifiOffDialog != null) {
822 wifiOffDialog.cancel();
823 wifiOffDialog = null;
824 }
825 }
826
827 @Override
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100828 protected void onResume()
829 {
830 super.onResume();
Jose Pascoal87758742015-01-28 20:00:22 +0000831
832 // check current state
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100833 mCurrentState = getCurrentUpdaterState();
Jose Pascoal79357c52015-03-12 20:14:29 +0000834 if(mCurrentState == UpdaterState.ZIP_INSTALL)
835 {
Jose Pascoal844a0ea2015-03-13 17:10:39 +0000836 updateStatePreference(TextUtils.isEmpty(mZipPath) ? UpdaterState.NORMAL : UpdaterState.ZIP_INSTALL);
Jose Pascoal79357c52015-03-12 20:14:29 +0000837 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100838
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100839 boolean isConfigLoaded = UpdaterService.readUpdaterData(this);
840 mDeviceVersion = VersionParserHelper.getDeviceVersion(this);
Jose Pascoalaa579a82014-11-05 22:17:16 +0000841
842 if (mDeviceVersion != null)
843 {
844 mLatestVersion = isConfigLoaded ? UpdaterData.getInstance().getLatestVersion(mDeviceVersion.getImageType()) : null;
845 }
846 else
847 {
848 mLatestVersion = null;
849 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100850
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100851 getSelectedVersionFromSharedPreferences();
Jose Pascoalad4ea572014-12-16 20:31:48 +0000852 getSelectedStoreFromSharedPreferences();
Jose Pascoal87758742015-01-28 20:00:22 +0000853
854 changeFragment(getFragmentFromState());
Filipe Gonçalves7f6359a2015-03-19 16:01:03 +0000855
856 // Show wifi disable dialog if in a blank state and no wifi is available
857 if ( wifiOffDialog == null &&
858 mCurrentState == UpdaterState.NORMAL &&
859 !Utils.isWiFiEnabled(this) &&
860 UpdaterData.getInstance().isAppStoreListEmpty() &&
861 !UpdaterData.getInstance().isAOSPVersionListNotEmpty() &&
862 !UpdaterData.getInstance().isFairphoneVersionListNotEmpty() )
863 {
864 Resources resources = getResources();
865
866 AlertDialog.Builder wifiOffDialogBuilder = new AlertDialog.Builder(this);
867
868 wifiOffDialogBuilder.setTitle(resources.getString(R.string.wifi_disabled));
869
870 // Setting Dialog Message
871 wifiOffDialogBuilder.setMessage(resources.getString(R.string.wifi_discaimer_message_startup));
872 wifiOffDialogBuilder.setPositiveButton(resources.getString(android.R.string.ok), new DialogInterface.OnClickListener() {
873 public void onClick(DialogInterface dialog, int id) {
874 // do nothing, since the state is still the same
875 }
876 });
877 wifiOffDialog = wifiOffDialogBuilder.create();
878 wifiOffDialog.show();
879 }
Tiago Costadaaa32c2015-01-08 12:12:24 +0000880 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100881
Jose Pascoal87758742015-01-28 20:00:22 +0000882 public Fragment startGappsInstall()
Tiago Costadaaa32c2015-01-08 12:12:24 +0000883 {
Jose Pascoal055562d2015-03-19 19:31:38 +0000884 mSelectedStore = Utils.getGappsStore();
Tiago Costadaaa32c2015-01-08 12:12:24 +0000885
886 VersionDetailFragment fragment = new VersionDetailFragment(false);
887
Tiago Costa73575aa2015-01-19 15:48:26 +0000888 if (mSelectedStore != null)
Tiago Costadaaa32c2015-01-08 12:12:24 +0000889 {
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000890 fragment.setupAppStoreFragment(mSelectedStore);
Tiago Costadaaa32c2015-01-08 12:12:24 +0000891 }
Jose Pascoal87758742015-01-28 20:00:22 +0000892 else
893 {
894 fragment = null;
895 }
896
897 return fragment;
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100898 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100899
Jose Pascoalaa579a82014-11-05 22:17:16 +0000900 private void startService()
901 {
902 if (mCurrentState == UpdaterState.NORMAL)
903 {
904 Utils.startUpdaterService(this, true);
905 }
906 else
907 {
908 Utils.startUpdaterService(this, false);
909 }
910 }
911
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100912 public void updateStatePreference(UpdaterState newState)
913 {
914 mCurrentState = newState;
Jose Pascoale4c48e32014-10-03 19:55:39 +0100915
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100916 Editor editor = mSharedPreferences.edit();
Jose Pascoale4c48e32014-10-03 19:55:39 +0100917
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100918 editor.putString(PREFERENCE_CURRENT_UPDATER_STATE, mCurrentState.name());
Jose Pascoale4c48e32014-10-03 19:55:39 +0100919
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100920 editor.commit();
921 }
Jose Pascoale4c48e32014-10-03 19:55:39 +0100922
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100923 public long getLatestDownloadId()
924 {
925 return mLatestUpdateDownloadId;
926 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100927
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100928 public long getLatestUpdateDownloadIdFromSharedPreference()
929 {
930 if (mLatestUpdateDownloadId == 0)
931 {
932 mLatestUpdateDownloadId = getLongPreference(PREFERENCE_DOWNLOAD_ID);
933 }
934 return mLatestUpdateDownloadId;
935 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100936
Pedro Arelo6d2bac92014-10-09 16:48:27 +0100937 public void saveLatestUpdateDownloadId(long latestUpdateDownloadId)
938 {
939 mLatestUpdateDownloadId = latestUpdateDownloadId;
940 savePreference(PREFERENCE_DOWNLOAD_ID, mLatestUpdateDownloadId);
Jose Pascoal02d86242014-12-17 18:50:08 +0000941 }
Jose Pascoalc2545cc2014-12-18 16:51:52 +0000942
943 public long getConfigFileDownloadIdFromSharedPreference()
944 {
945 return getLongPreference(UpdaterService.PREFERENCE_LAST_CONFIG_DOWNLOAD_ID);
946 }
947
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000948 public void clearConfigFileDownloadId()
Jose Pascoalc2545cc2014-12-18 16:51:52 +0000949 {
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000950 savePreference(UpdaterService.PREFERENCE_LAST_CONFIG_DOWNLOAD_ID, 0L);
Jose Pascoalc2545cc2014-12-18 16:51:52 +0000951 }
Jose Pascoal79357c52015-03-12 20:14:29 +0000952
953 public String getZipFilePath()
954 {
955 return mZipPath;
956 }
Jose Pascoal4fe7ba52015-03-13 16:54:31 +0000957
958 public String getPreferenceOtaDownloadUrl()
959 {
960 return mSharedPreferences.getString(FairphoneUpdater.PREFERENCE_OTA_DOWNLOAD_URL, getResources().getString(R.string.downloadUrl));
961 }
Jose Pascoal91aff132014-10-02 17:19:47 +0100962}