blob: 0a9029739b4fe3e51e8a0f0b1efc5c2da75118b2 [file] [log] [blame]
Jose Pascoal91aff132014-10-02 17:19:47 +01001package com.fairphone.updater.fragments;
2
Jose Pascoal54b3ae62014-10-07 20:29:58 +01003import android.content.BroadcastReceiver;
4import android.content.Context;
5import android.content.Intent;
6import android.content.IntentFilter;
Tiago Costadaaa32c2015-01-08 12:12:24 +00007import android.content.SharedPreferences.Editor;
Jose Pascoal91aff132014-10-02 17:19:47 +01008import android.os.Bundle;
Jose Pascoal87758742015-01-28 20:00:22 +00009import android.support.v4.app.Fragment;
Jose Pascoal91aff132014-10-02 17:19:47 +010010import android.view.LayoutInflater;
11import android.view.View;
12import android.view.View.OnClickListener;
13import android.view.ViewGroup;
Jose Pascoal2666b892014-10-02 21:05:08 +010014import android.widget.Button;
15import android.widget.LinearLayout;
Tiago Costadaaa32c2015-01-08 12:12:24 +000016import android.widget.RelativeLayout;
Jose Pascoal2666b892014-10-02 21:05:08 +010017import android.widget.TextView;
18import android.widget.Toast;
Jose Pascoal91aff132014-10-02 17:19:47 +010019
Jose Pascoal7bf83a02014-10-13 18:30:18 +010020import com.fairphone.updater.FairphoneUpdater;
21import com.fairphone.updater.FairphoneUpdater.HeaderType;
22import com.fairphone.updater.FairphoneUpdater.UpdaterState;
Jose Pascoalee8a8eb2014-10-15 15:20:28 +010023import com.fairphone.updater.R;
Tiago Costadaaa32c2015-01-08 12:12:24 +000024import com.fairphone.updater.data.Store;
Jose Pascoal7bf83a02014-10-13 18:30:18 +010025import com.fairphone.updater.data.UpdaterData;
26import com.fairphone.updater.data.Version;
Jose Pascoalee8a8eb2014-10-15 15:20:28 +010027import com.fairphone.updater.fragments.VersionDetailFragment.DetailLayoutType;
Tiago Costadaaa32c2015-01-08 12:12:24 +000028import com.fairphone.updater.gappsinstaller.GappsInstallerHelper;
Jose Pascoal91aff132014-10-02 17:19:47 +010029
Jose Pascoal810950b2014-10-09 17:16:08 +010030public class MainFragment extends BaseFragment
31{
Jose Pascoal91aff132014-10-02 17:19:47 +010032
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +000033 public static final String SHARED_PREFERENCES_ENABLE_GAPPS = "SHARED_PREFERENCES_ENABLE_GAPPS_POPUP";
Tiago Costadaaa32c2015-01-08 12:12:24 +000034
Jose Pascoal810950b2014-10-09 17:16:08 +010035 private LinearLayout mVersionUpToDateGroup;
36 private TextView mVersionUpToDateCurrentVersionNameText;
37 private LinearLayout mUpdateAvailableGroup;
38 private TextView mUpdateAvailableCurrentVersionNameText;
39 private TextView mUpdateAvailableNameText;
40 private Button mUpdateAvailableInstallButton;
Jose Pascoalfe1cb412014-10-09 18:45:59 +010041 private LinearLayout mOtherOSOptionsGroup;
Jose Pascoal810950b2014-10-09 17:16:08 +010042 private Button mOtherOSOptionsButton;
43 private Version mDeviceVersion;
44 private BroadcastReceiver newVersionbroadcastReceiver;
Jose Pascoal2666b892014-10-02 21:05:08 +010045
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +000046 private RelativeLayout mGappsIcon;
Tiago Costadaaa32c2015-01-08 12:12:24 +000047 private Button mGappsButton;
48 private Button mGappsDismissButton;
49
Jose Pascoal810950b2014-10-09 17:16:08 +010050 @Override
51 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
52 {
53 // Inflate the layout for this fragment
54 View view = inflater.inflate(R.layout.fragment_main, container, false);
Jose Pascoal2666b892014-10-02 21:05:08 +010055
Jose Pascoalee8a8eb2014-10-15 15:20:28 +010056 setupLayout(inflater, view);
Jose Pascoal2666b892014-10-02 21:05:08 +010057
Jose Pascoal810950b2014-10-09 17:16:08 +010058 return view;
59 }
Jose Pascoal2666b892014-10-02 21:05:08 +010060
Jose Pascoal810950b2014-10-09 17:16:08 +010061 private void updateHeader()
62 {
63 if (Version.IMAGE_TYPE_FAIRPHONE.equalsIgnoreCase(mDeviceVersion.getImageType()))
64 {
Tiago Costa3855faa2014-11-14 17:55:05 +000065 mainActivity.updateHeader(HeaderType.MAIN_FAIRPHONE, "", false);
Jose Pascoal810950b2014-10-09 17:16:08 +010066 }
67 else if (Version.IMAGE_TYPE_AOSP.equalsIgnoreCase(mDeviceVersion.getImageType()))
68 {
Tiago Costa3855faa2014-11-14 17:55:05 +000069 mainActivity.updateHeader(HeaderType.MAIN_ANDROID, "", false);
Jose Pascoal810950b2014-10-09 17:16:08 +010070 }
71 }
Jose Pascoalb690af12014-10-06 18:29:26 +010072
Jose Pascoalee8a8eb2014-10-15 15:20:28 +010073 private void setupLayout(LayoutInflater inflater, View view)
Jose Pascoal810950b2014-10-09 17:16:08 +010074 {
Jose Pascoalee8a8eb2014-10-15 15:20:28 +010075 setupCurrentVersionGroup(inflater, view);
76
Jose Pascoal810950b2014-10-09 17:16:08 +010077 // Version up to date group
78 mVersionUpToDateGroup = (LinearLayout) view.findViewById(R.id.version_up_to_date_group);
79 mVersionUpToDateCurrentVersionNameText = (TextView) view.findViewById(R.id.version_up_to_date_current_version_name_text);
Jose Pascoal2666b892014-10-02 21:05:08 +010080
Jose Pascoal810950b2014-10-09 17:16:08 +010081 // Update available group
82 mUpdateAvailableGroup = (LinearLayout) view.findViewById(R.id.update_available_group);
83 mUpdateAvailableCurrentVersionNameText = (TextView) view.findViewById(R.id.update_available_current_version_name_text);
84 mUpdateAvailableNameText = (TextView) view.findViewById(R.id.update_available_name_text);
85 mUpdateAvailableInstallButton = (Button) view.findViewById(R.id.install_update_button);
Jose Pascoal2666b892014-10-02 21:05:08 +010086
Jose Pascoal810950b2014-10-09 17:16:08 +010087 // Other OS Options group
Jose Pascoalfe1cb412014-10-09 18:45:59 +010088 mOtherOSOptionsGroup = (LinearLayout) view.findViewById(R.id.other_os_options_group);
Jose Pascoal810950b2014-10-09 17:16:08 +010089 mOtherOSOptionsButton = (Button) view.findViewById(R.id.other_os_options_button);
Tiago Costadaaa32c2015-01-08 12:12:24 +000090
91 // gapps
92 mGappsButton = (Button) view.findViewById(R.id.install_gapps_button);
93 mGappsDismissButton = (Button) view.findViewById(R.id.install_gapps_dismiss_button);
94 mGappsIcon = (RelativeLayout) view.findViewById(R.id.gapps_reminder_group);
Tiago Costadaaa32c2015-01-08 12:12:24 +000095 }
96
97 private boolean getGappsInstalationButtonState()
98 {
Jose Pascoal87758742015-01-28 20:00:22 +000099 boolean showGappsGroup = mSharedPreferences.getBoolean(SHARED_PREFERENCES_ENABLE_GAPPS, true);
100 boolean gappsNotInstalled = !GappsInstallerHelper.areGappsInstalled();
101 boolean hasStoreInfo = getSelectedStoreFromSharedPreferences() != null;
102 return showGappsGroup && gappsNotInstalled && hasStoreInfo;
Tiago Costadaaa32c2015-01-08 12:12:24 +0000103 }
104
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000105 Store getSelectedStoreFromSharedPreferences()
Tiago Costa5b621322015-01-08 12:22:56 +0000106 {
107 return UpdaterData.getInstance().getStore(mSharedPreferences.getInt(FairphoneUpdater.PREFERENCE_SELECTED_STORE_NUMBER, 0));
108 }
109
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000110 private void disableGappsInstalationButton()
Tiago Costadaaa32c2015-01-08 12:12:24 +0000111 {
112 Editor edit = mSharedPreferences.edit();
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000113 edit.putBoolean(SHARED_PREFERENCES_ENABLE_GAPPS, false);
Tiago Costa5b621322015-01-08 12:22:56 +0000114
Jose Pascoal0b48f8d2015-02-06 16:06:41 +0000115 edit.apply();
Jose Pascoal810950b2014-10-09 17:16:08 +0100116 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100117
Jose Pascoalee8a8eb2014-10-15 15:20:28 +0100118 private void setupCurrentVersionGroup(LayoutInflater inflater, View view)
119 {
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000120 LinearLayout mCurrentVersionGroup = (LinearLayout) view.findViewById(R.id.current_version_group);
Jose Pascoalee8a8eb2014-10-15 15:20:28 +0100121
122 View updateGroupView = null;
123 if (Version.IMAGE_TYPE_FAIRPHONE.equalsIgnoreCase(mainActivity.getDeviceVersion().getImageType()))
124 {
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000125 updateGroupView = inflater.inflate(R.layout.fragment_main_update_available_fairphone, mCurrentVersionGroup);
Jose Pascoalee8a8eb2014-10-15 15:20:28 +0100126 }
127 else if (Version.IMAGE_TYPE_AOSP.equalsIgnoreCase(mainActivity.getDeviceVersion().getImageType()))
128 {
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000129 updateGroupView = inflater.inflate(R.layout.fragment_main_update_available_android, mCurrentVersionGroup);
Jose Pascoalee8a8eb2014-10-15 15:20:28 +0100130 }
131 if (updateGroupView != null)
132 {
133 updateGroupView.setLayoutParams(mCurrentVersionGroup.getLayoutParams());
Jose Pascoalee8a8eb2014-10-15 15:20:28 +0100134 }
135 }
136
Tiago Costadaaa32c2015-01-08 12:12:24 +0000137 private void enableGappsGroup(boolean showAndEnable)
138 {
139 if (showAndEnable)
140 {
141 mGappsIcon.setVisibility(View.VISIBLE);
142
143 mGappsButton.setOnClickListener(new OnClickListener()
144 {
145
146 @Override
147 public void onClick(View v)
148 {
149 startGappsInstall();
150 }
151 });
Tiago Costa5b621322015-01-08 12:22:56 +0000152
Tiago Costadaaa32c2015-01-08 12:12:24 +0000153 mGappsDismissButton.setOnClickListener(new OnClickListener()
154 {
155
156 @Override
157 public void onClick(View v)
158 {
159 mGappsIcon.setVisibility(View.GONE);
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000160 disableGappsInstalationButton();
Tiago Costadaaa32c2015-01-08 12:12:24 +0000161 }
162 });
163 }
164 else
165 {
166 mGappsIcon.setVisibility(View.GONE);
Tiago Costadaaa32c2015-01-08 12:12:24 +0000167 }
168 }
169
170 private void startGappsInstall()
171 {
Jose Pascoal87758742015-01-28 20:00:22 +0000172 Fragment gappsFragment = mainActivity.startGappsInstall();
173 mainActivity.changeFragment(gappsFragment);
Tiago Costadaaa32c2015-01-08 12:12:24 +0000174 }
175
Jose Pascoal810950b2014-10-09 17:16:08 +0100176 private void updateOtherOSOptionsGroup()
177 {
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000178 if (UpdaterData.getInstance().isFairphoneVersionListNotEmpty() || UpdaterData.getInstance().isAOSPVersionListNotEmpty())
Jose Pascoal810950b2014-10-09 17:16:08 +0100179 {
Jose Pascoalfe1cb412014-10-09 18:45:59 +0100180 mOtherOSOptionsGroup.setVisibility(View.VISIBLE);
181 mOtherOSOptionsButton.setOnClickListener(new OnClickListener()
Jose Pascoal810950b2014-10-09 17:16:08 +0100182 {
Jose Pascoalfe1cb412014-10-09 18:45:59 +0100183
184 @Override
185 public void onClick(View v)
186 {
187 OtherOSOptionsFragment newFragment = new OtherOSOptionsFragment();
188 mainActivity.changeFragment(newFragment);
189 }
190 });
191 }
192 else
193 {
194 mOtherOSOptionsGroup.setVisibility(View.GONE);
195 }
Jose Pascoal810950b2014-10-09 17:16:08 +0100196 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100197
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000198 void toogleUpdateAvailableGroup()
Jose Pascoal810950b2014-10-09 17:16:08 +0100199 {
Jose Pascoal8ed98d62014-10-09 20:41:11 +0100200 updateCurrentVersionGroup();
201
Jose Pascoal810950b2014-10-09 17:16:08 +0100202 if (mainActivity.isUpdateAvailable())
203 {
204 mVersionUpToDateGroup.setVisibility(View.GONE);
205 mUpdateAvailableGroup.setVisibility(View.VISIBLE);
Jose Pascoal2666b892014-10-02 21:05:08 +0100206
Jose Pascoal810950b2014-10-09 17:16:08 +0100207 updateUpdateAvailableGroup();
208 }
209 else
210 {
Tiago Costa5b621322015-01-08 12:22:56 +0000211 if (mUpdateAvailableGroup != null)
212 {
213 mUpdateAvailableGroup.setVisibility(View.GONE);
214 }
215
216 if( mVersionUpToDateGroup != null){
217 mVersionUpToDateGroup.setVisibility(View.VISIBLE);
218 }
Jose Pascoal810950b2014-10-09 17:16:08 +0100219 }
Jose Pascoal8ed98d62014-10-09 20:41:11 +0100220
Jose Pascoalfe1cb412014-10-09 18:45:59 +0100221 updateOtherOSOptionsGroup();
Jose Pascoal810950b2014-10-09 17:16:08 +0100222 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100223
Jose Pascoal810950b2014-10-09 17:16:08 +0100224 private void updateUpdateAvailableGroup()
225 {
226 mUpdateAvailableNameText.setText(mainActivity.getLatestVersionName());
227 mUpdateAvailableInstallButton.setOnClickListener(new OnClickListener()
228 {
Jose Pascoal2666b892014-10-02 21:05:08 +0100229
Jose Pascoal810950b2014-10-09 17:16:08 +0100230 @Override
231 public void onClick(View v)
232 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000233 VersionDetailFragment fragment = new VersionDetailFragment(true);
Jose Pascoale4c48e32014-10-03 19:55:39 +0100234
Jose Pascoal810950b2014-10-09 17:16:08 +0100235 Version latestVersion = mainActivity.getLatestVersion();
236 if (latestVersion != null)
237 {
Jose Pascoalee8a8eb2014-10-15 15:20:28 +0100238 fragment.setupFragment(latestVersion, getDetailLayoutFromDeviceVersion(latestVersion));
Jose Pascoal810950b2014-10-09 17:16:08 +0100239 mainActivity.changeFragment(fragment);
240 }
241 }
242 });
243 }
Jose Pascoal2666b892014-10-02 21:05:08 +0100244
Jose Pascoalcfc2dd42015-02-09 18:00:05 +0000245 private static VersionDetailFragment.DetailLayoutType getDetailLayoutFromDeviceVersion(Version latestVersion)
Jose Pascoalee8a8eb2014-10-15 15:20:28 +0100246 {
247 VersionDetailFragment.DetailLayoutType type = DetailLayoutType.UPDATE_FAIRPHONE;
248 if (Version.IMAGE_TYPE_FAIRPHONE.equalsIgnoreCase(latestVersion.getImageType()))
249 {
250 type = DetailLayoutType.UPDATE_FAIRPHONE;
251 }
252 else if (Version.IMAGE_TYPE_AOSP.equalsIgnoreCase(latestVersion.getImageType()))
253 {
254 type = DetailLayoutType.UPDATE_ANDROID;
255 }
256 return type;
257 }
258
Jose Pascoal810950b2014-10-09 17:16:08 +0100259 private void updateCurrentVersionGroup()
260 {
261 String currentVersionName = mainActivity.getDeviceVersionName();
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100262
Tiago Costadaaa32c2015-01-08 12:12:24 +0000263 if (mVersionUpToDateCurrentVersionNameText != null)
Jose Pascoal810950b2014-10-09 17:16:08 +0100264 {
Tiago Costadaaa32c2015-01-08 12:12:24 +0000265 mVersionUpToDateCurrentVersionNameText.setText(currentVersionName);
266 mVersionUpToDateCurrentVersionNameText.setOnClickListener(new OnClickListener()
Jose Pascoal810950b2014-10-09 17:16:08 +0100267 {
Tiago Costadaaa32c2015-01-08 12:12:24 +0000268 @Override
269 public void onClick(View v)
270 {
271 mainActivity.onEnableDevMode();
272 }
273 });
274 }
275
276 if (mUpdateAvailableCurrentVersionNameText != null)
277 {
278 mUpdateAvailableCurrentVersionNameText.setText(currentVersionName);
279 mUpdateAvailableCurrentVersionNameText.setOnClickListener(new OnClickListener()
280 {
281 @Override
282 public void onClick(View v)
283 {
284 mainActivity.onEnableDevMode();
285 }
286 });
287 }
Jose Pascoal810950b2014-10-09 17:16:08 +0100288 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100289
Jose Pascoal810950b2014-10-09 17:16:08 +0100290 @Override
291 public void onResume()
292 {
293 super.onResume();
294 setupBroadcastReceiver();
Jose Pascoal810950b2014-10-09 17:16:08 +0100295 registerBroadCastReceiver();
Jose Pascoalfe1cb412014-10-09 18:45:59 +0100296
Jose Pascoal8ed98d62014-10-09 20:41:11 +0100297 mDeviceVersion = mainActivity.getDeviceVersion();
Jose Pascoalfe1cb412014-10-09 18:45:59 +0100298 updateHeader();
299 updateCurrentVersionGroup();
300 toogleUpdateAvailableGroup();
301 updateOtherOSOptionsGroup();
Jose Pascoal87758742015-01-28 20:00:22 +0000302 enableGappsGroup(getGappsInstalationButtonState());
Jose Pascoal810950b2014-10-09 17:16:08 +0100303 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100304
Jose Pascoal810950b2014-10-09 17:16:08 +0100305 @Override
306 public void onPause()
307 {
308 super.onPause();
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100309
Jose Pascoal810950b2014-10-09 17:16:08 +0100310 unregisterBroadCastReceiver();
311 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100312
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000313 void setupBroadcastReceiver()
Jose Pascoal810950b2014-10-09 17:16:08 +0100314 {
315 newVersionbroadcastReceiver = new BroadcastReceiver()
316 {
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100317
Jose Pascoal810950b2014-10-09 17:16:08 +0100318 @Override
319 public void onReceive(Context context, Intent intent)
320 {
321 String action = intent.getAction();
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100322
Jose Pascoal7bf83a02014-10-13 18:30:18 +0100323 if (FairphoneUpdater.FAIRPHONE_UPDATER_NEW_VERSION_RECEIVED.equals(action))
Jose Pascoal810950b2014-10-09 17:16:08 +0100324 {
325 mainActivity.updateLatestVersionFromConfig();
326 if (mainActivity.getCurrentUpdaterState() == UpdaterState.NORMAL)
327 {
328 toogleUpdateAvailableGroup();
Jose Pascoal87758742015-01-28 20:00:22 +0000329 enableGappsGroup(getGappsInstalationButtonState());
Jose Pascoal810950b2014-10-09 17:16:08 +0100330 }
331 }
Jose Pascoal7bf83a02014-10-13 18:30:18 +0100332 else if (FairphoneUpdater.FAIRPHONE_UPDATER_CONFIG_DOWNLOAD_FAILED.equals(action))
Jose Pascoal810950b2014-10-09 17:16:08 +0100333 {
Jose Pascoal7bf83a02014-10-13 18:30:18 +0100334 String link = intent.getStringExtra(FairphoneUpdater.FAIRPHONE_UPDATER_CONFIG_DOWNLOAD_LINK);
Jose Pascoalee8a8eb2014-10-15 15:20:28 +0100335 Toast.makeText(context.getApplicationContext(),
336 context.getResources().getString(R.string.config_file_download_link_error_message) + " " + link, Toast.LENGTH_LONG).show();
Jose Pascoal810950b2014-10-09 17:16:08 +0100337 }
338 }
339 };
340 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100341
Jose Pascoal810950b2014-10-09 17:16:08 +0100342 private void registerBroadCastReceiver()
343 {
344 IntentFilter iFilter = new IntentFilter();
Jose Pascoal7bf83a02014-10-13 18:30:18 +0100345 iFilter.addAction(FairphoneUpdater.FAIRPHONE_UPDATER_NEW_VERSION_RECEIVED);
346 iFilter.addAction(FairphoneUpdater.FAIRPHONE_UPDATER_CONFIG_DOWNLOAD_FAILED);
Jose Pascoal810950b2014-10-09 17:16:08 +0100347 mainActivity.registerReceiver(newVersionbroadcastReceiver, iFilter);
348 }
349
350 private void unregisterBroadCastReceiver()
351 {
352 mainActivity.unregisterReceiver(newVersionbroadcastReceiver);
353 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100354
Jose Pascoal91aff132014-10-02 17:19:47 +0100355}