Jose Pascoal | 91aff13 | 2014-10-02 17:19:47 +0100 | [diff] [blame] | 1 | package com.fairphone.updater; |
| 2 | |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 3 | import java.util.List; |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 4 | |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 5 | import android.content.SharedPreferences; |
| 6 | import android.content.SharedPreferences.Editor; |
| 7 | import android.content.res.Resources; |
| 8 | import android.os.Build; |
Jose Pascoal | 91aff13 | 2014-10-02 17:19:47 +0100 | [diff] [blame] | 9 | import android.os.Bundle; |
| 10 | import android.support.v4.app.Fragment; |
| 11 | import android.support.v4.app.FragmentActivity; |
Jose Pascoal | 3bc3a84 | 2014-10-16 19:03:21 +0100 | [diff] [blame] | 12 | import android.support.v4.app.FragmentManager; |
Jose Pascoal | 91aff13 | 2014-10-02 17:19:47 +0100 | [diff] [blame] | 13 | import android.support.v4.app.FragmentTransaction; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 14 | import android.util.Log; |
| 15 | import android.view.View; |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 16 | import android.view.View.OnClickListener; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 17 | import android.widget.TextView; |
| 18 | import android.widget.Toast; |
Jose Pascoal | 91aff13 | 2014-10-02 17:19:47 +0100 | [diff] [blame] | 19 | |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 20 | import com.crashlytics.android.Crashlytics; |
Jose Pascoal | 7bf83a0 | 2014-10-13 18:30:18 +0100 | [diff] [blame] | 21 | import com.fairphone.updater.data.UpdaterData; |
| 22 | import com.fairphone.updater.data.Version; |
| 23 | import com.fairphone.updater.data.VersionParserHelper; |
Jose Pascoal | b690af1 | 2014-10-06 18:29:26 +0100 | [diff] [blame] | 24 | import com.fairphone.updater.fragments.DownloadAndRestartFragment; |
Jose Pascoal | 91aff13 | 2014-10-02 17:19:47 +0100 | [diff] [blame] | 25 | import com.fairphone.updater.fragments.MainFragment; |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 26 | import com.fairphone.updater.tools.Utils; |
Jose Pascoal | 91aff13 | 2014-10-02 17:19:47 +0100 | [diff] [blame] | 27 | |
Jose Pascoal | 7bf83a0 | 2014-10-13 18:30:18 +0100 | [diff] [blame] | 28 | public class FairphoneUpdater extends FragmentActivity |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 29 | { |
Jose Pascoal | 91aff13 | 2014-10-02 17:19:47 +0100 | [diff] [blame] | 30 | |
Jose Pascoal | 7bf83a0 | 2014-10-13 18:30:18 +0100 | [diff] [blame] | 31 | private static final String TAG = FairphoneUpdater.class.getSimpleName(); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 32 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 33 | public static final String FAIRPHONE_UPDATER_NEW_VERSION_RECEIVED = "FairphoneUpdater.NEW.VERSION.RECEIVED"; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 34 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 35 | public static final String PREFERENCE_CURRENT_UPDATER_STATE = "CurrentUpdaterState"; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 36 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 37 | private static final String PREFERENCE_DOWNLOAD_ID = "LatestUpdateDownloadId"; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 38 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 39 | public static final String FAIRPHONE_UPDATER_PREFERENCES = "FairphoneUpdaterPreferences"; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 40 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 41 | public static final String PREFERENCE_SELECTED_VERSION_NUMBER = "SelectedVersionNumber"; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 42 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 43 | public static final String PREFERENCE_SELECTED_VERSION_TYPE = "SelectedVersionImageType"; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 44 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 45 | public static final String FAIRPHONE_UPDATER_CONFIG_DOWNLOAD_FAILED = "FairphoneUpdater.Config.File.Download.FAILED"; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 46 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 47 | public static final String FAIRPHONE_UPDATER_CONFIG_DOWNLOAD_LINK = "FairphoneUpdater.ConfigFile.Download.LINK"; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 48 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 49 | public static enum UpdaterState |
| 50 | { |
| 51 | NORMAL, DOWNLOAD, PREINSTALL |
| 52 | }; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 53 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 54 | private Version mDeviceVersion; |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 55 | private Version mLatestVersion; |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 56 | private Version mSelectedVersion; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 57 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 58 | private UpdaterState mCurrentState; |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 59 | private SharedPreferences mSharedPreferences; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 60 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 61 | private long mLatestUpdateDownloadId; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 62 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 63 | public static boolean DEV_MODE_ENABLED; |
| 64 | private int mIsDevModeCounter; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 65 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 66 | private TextView headerMainFairphoneText; |
| 67 | private TextView headerMainAndroidText; |
| 68 | private TextView headerFairphoneText; |
| 69 | private TextView headerAndroidText; |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 70 | private TextView headerOtherOSText; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 71 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 72 | public static enum HeaderType |
| 73 | { |
Pedro Arelo | cb88f67 | 2014-10-09 17:41:02 +0100 | [diff] [blame] | 74 | MAIN_FAIRPHONE, MAIN_ANDROID, FAIRPHONE, ANDROID, OTHER_OS |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 75 | }; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 76 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 77 | @Override |
| 78 | protected void onCreate(Bundle savedInstanceState) |
| 79 | { |
| 80 | super.onCreate(savedInstanceState); |
| 81 | setContentView(R.layout.activity_updater); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 82 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 83 | Crashlytics.start(this); |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 84 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 85 | DEV_MODE_ENABLED = false; |
| 86 | mIsDevModeCounter = 10; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 87 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 88 | isDeviceSupported(); |
| 89 | mSharedPreferences = getSharedPreferences(FAIRPHONE_UPDATER_PREFERENCES, MODE_PRIVATE); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 90 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 91 | boolean isConfigLoaded = UpdaterService.readUpdaterData(this); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 92 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 93 | // get system data |
| 94 | mDeviceVersion = VersionParserHelper.getDeviceVersion(this); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 95 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 96 | mLatestVersion = isConfigLoaded ? UpdaterData.getInstance().getLatestVersion(mDeviceVersion.getImageType()) : new Version(); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 97 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 98 | getSelectedVersionFromSharedPreferences(); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 99 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 100 | // check current state |
| 101 | mCurrentState = getCurrentUpdaterState(); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 102 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 103 | initHeaderViews(); |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 104 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 105 | setupFragments(savedInstanceState); |
| 106 | } |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 107 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 108 | private void isDeviceSupported() |
| 109 | { |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 110 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 111 | Resources resources = getResources(); |
| 112 | String[] suportedDevices = resources.getString(R.string.supportedDevices).split(";"); |
| 113 | String modelWithoutSpaces = Build.MODEL.replaceAll("\\s", ""); |
| 114 | for (String device : suportedDevices) |
| 115 | { |
| 116 | if (modelWithoutSpaces.equalsIgnoreCase(device)) |
| 117 | { |
| 118 | return; |
| 119 | } |
| 120 | } |
Pedro Arelo | 773bd82 | 2014-10-10 11:57:34 +0100 | [diff] [blame] | 121 | Toast.makeText(this, R.string.device_not_supported_message, Toast.LENGTH_LONG).show(); |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 122 | finish(); |
| 123 | } |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 124 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 125 | protected void getSelectedVersionFromSharedPreferences() |
| 126 | { |
| 127 | String versionImageType = mSharedPreferences.getString(PREFERENCE_SELECTED_VERSION_TYPE, ""); |
| 128 | int versionNumber = mSharedPreferences.getInt(PREFERENCE_SELECTED_VERSION_NUMBER, 0); |
| 129 | mSelectedVersion = UpdaterData.getInstance().getVersion(versionImageType, versionNumber); |
| 130 | } |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 131 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 132 | public UpdaterState getCurrentUpdaterState() |
| 133 | { |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 134 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 135 | String currentState = getStringPreference(PREFERENCE_CURRENT_UPDATER_STATE); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 136 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 137 | if (currentState == null || currentState.isEmpty()) |
| 138 | { |
| 139 | currentState = UpdaterState.NORMAL.name(); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 140 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 141 | Editor editor = mSharedPreferences.edit(); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 142 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 143 | editor.putString(currentState, currentState); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 144 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 145 | editor.commit(); |
| 146 | } |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 147 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 148 | return UpdaterState.valueOf(currentState); |
| 149 | } |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 150 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 151 | public String getStringPreference(String key) |
| 152 | { |
| 153 | return mSharedPreferences.getString(key, null); |
| 154 | } |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 155 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 156 | public long getLongPreference(String key) |
| 157 | { |
| 158 | return mSharedPreferences.getLong(key, 0); |
| 159 | } |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 160 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 161 | public boolean getBooleanPreference(String key) |
| 162 | { |
| 163 | return mSharedPreferences.getBoolean(key, false); |
| 164 | } |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 165 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 166 | public void savePreference(String key, String value) |
| 167 | { |
| 168 | Editor editor = mSharedPreferences.edit(); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 169 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 170 | editor.putString(key, value); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 171 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 172 | editor.commit(); |
| 173 | } |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 174 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 175 | public void savePreference(String key, boolean value) |
| 176 | { |
| 177 | Editor editor = mSharedPreferences.edit(); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 178 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 179 | editor.putBoolean(key, value); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 180 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 181 | editor.commit(); |
| 182 | } |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 183 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 184 | public void savePreference(String key, long value) |
| 185 | { |
| 186 | Editor editor = mSharedPreferences.edit(); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 187 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 188 | editor.putLong(key, value); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 189 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 190 | editor.commit(); |
| 191 | } |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 192 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 193 | private void initHeaderViews() |
| 194 | { |
| 195 | headerMainFairphoneText = (TextView) findViewById(R.id.header_main_fairphone_text); |
| 196 | headerMainAndroidText = (TextView) findViewById(R.id.header_main_android_text); |
| 197 | headerFairphoneText = (TextView) findViewById(R.id.header_fairphone_text); |
| 198 | headerAndroidText = (TextView) findViewById(R.id.header_android_text); |
| 199 | headerOtherOSText = (TextView) findViewById(R.id.header_other_os_text); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 200 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 201 | OnClickListener headerBackPressListener = new OnClickListener() |
| 202 | { |
| 203 | @Override |
| 204 | public void onClick(View v) |
| 205 | { |
| 206 | onBackPressed(); |
| 207 | } |
| 208 | }; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 209 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 210 | headerFairphoneText.setOnClickListener(headerBackPressListener); |
| 211 | headerAndroidText.setOnClickListener(headerBackPressListener); |
| 212 | headerOtherOSText.setOnClickListener(headerBackPressListener); |
| 213 | } |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 214 | |
Jose Pascoal | b397dc6 | 2014-10-13 19:26:58 +0100 | [diff] [blame] | 215 | @Override |
| 216 | public void onBackPressed() |
| 217 | { |
| 218 | Fragment fragment = getTopFragment(); |
| 219 | if (fragment != null && fragment instanceof DownloadAndRestartFragment && !getCurrentUpdaterState().equals(UpdaterState.NORMAL)) |
| 220 | { |
| 221 | ((DownloadAndRestartFragment) fragment).abortUpdateProccess(); |
| 222 | } |
Jose Pascoal | 3bc3a84 | 2014-10-16 19:03:21 +0100 | [diff] [blame] | 223 | else if (fragment != null && fragment instanceof MainFragment) |
| 224 | { |
| 225 | clearBackStack(); |
| 226 | finish(); |
| 227 | } |
Jose Pascoal | b397dc6 | 2014-10-13 19:26:58 +0100 | [diff] [blame] | 228 | else |
| 229 | { |
| 230 | super.onBackPressed(); |
| 231 | } |
| 232 | } |
| 233 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 234 | public void updateHeader(HeaderType type, String headerText) |
| 235 | { |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 236 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 237 | switch (type) |
| 238 | { |
| 239 | case FAIRPHONE: |
| 240 | headerMainFairphoneText.setVisibility(View.GONE); |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 241 | headerMainAndroidText.setVisibility(View.GONE); |
Pedro Arelo | cb88f67 | 2014-10-09 17:41:02 +0100 | [diff] [blame] | 242 | headerFairphoneText.setVisibility(View.VISIBLE); |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 243 | headerAndroidText.setVisibility(View.GONE); |
Pedro Arelo | cb88f67 | 2014-10-09 17:41:02 +0100 | [diff] [blame] | 244 | headerOtherOSText.setVisibility(View.GONE); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 245 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 246 | headerFairphoneText.setText(headerText); |
| 247 | break; |
Jose Pascoal | b690af1 | 2014-10-06 18:29:26 +0100 | [diff] [blame] | 248 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 249 | case ANDROID: |
| 250 | headerMainFairphoneText.setVisibility(View.GONE); |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 251 | headerMainAndroidText.setVisibility(View.GONE); |
Pedro Arelo | cb88f67 | 2014-10-09 17:41:02 +0100 | [diff] [blame] | 252 | headerFairphoneText.setVisibility(View.GONE); |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 253 | headerAndroidText.setVisibility(View.VISIBLE); |
Pedro Arelo | cb88f67 | 2014-10-09 17:41:02 +0100 | [diff] [blame] | 254 | headerOtherOSText.setVisibility(View.GONE); |
Jose Pascoal | 91aff13 | 2014-10-02 17:19:47 +0100 | [diff] [blame] | 255 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 256 | headerAndroidText.setText(headerText); |
| 257 | break; |
Jose Pascoal | 91aff13 | 2014-10-02 17:19:47 +0100 | [diff] [blame] | 258 | |
Pedro Arelo | cb88f67 | 2014-10-09 17:41:02 +0100 | [diff] [blame] | 259 | case OTHER_OS: |
| 260 | headerMainFairphoneText.setVisibility(View.GONE); |
| 261 | headerMainAndroidText.setVisibility(View.GONE); |
| 262 | headerFairphoneText.setVisibility(View.GONE); |
| 263 | headerAndroidText.setVisibility(View.GONE); |
| 264 | headerOtherOSText.setVisibility(View.VISIBLE); |
| 265 | |
| 266 | headerOtherOSText.setText(headerText); |
| 267 | break; |
| 268 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 269 | case MAIN_ANDROID: |
| 270 | headerMainFairphoneText.setVisibility(View.GONE); |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 271 | headerMainAndroidText.setVisibility(View.VISIBLE); |
Pedro Arelo | cb88f67 | 2014-10-09 17:41:02 +0100 | [diff] [blame] | 272 | headerFairphoneText.setVisibility(View.GONE); |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 273 | headerAndroidText.setVisibility(View.GONE); |
Pedro Arelo | cb88f67 | 2014-10-09 17:41:02 +0100 | [diff] [blame] | 274 | headerOtherOSText.setVisibility(View.GONE); |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 275 | break; |
Jose Pascoal | 91aff13 | 2014-10-02 17:19:47 +0100 | [diff] [blame] | 276 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 277 | case MAIN_FAIRPHONE: |
| 278 | default: |
| 279 | headerMainFairphoneText.setVisibility(View.VISIBLE); |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 280 | headerMainAndroidText.setVisibility(View.GONE); |
Pedro Arelo | cb88f67 | 2014-10-09 17:41:02 +0100 | [diff] [blame] | 281 | headerFairphoneText.setVisibility(View.GONE); |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 282 | headerAndroidText.setVisibility(View.GONE); |
Pedro Arelo | cb88f67 | 2014-10-09 17:41:02 +0100 | [diff] [blame] | 283 | headerOtherOSText.setVisibility(View.GONE); |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 284 | break; |
| 285 | } |
| 286 | } |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 287 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 288 | private void setupFragments(Bundle savedInstanceState) |
| 289 | { |
| 290 | // Check that the activity is using the layout version with |
| 291 | // the fragment_container FrameLayout |
| 292 | if (findViewById(R.id.fragment_holder) != null) |
| 293 | { |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 294 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 295 | // However, if we're being restored from a previous state, |
| 296 | // then we don't need to do anything and should return or else |
| 297 | // we could end up with overlapping fragments. |
| 298 | if (savedInstanceState != null) |
| 299 | { |
| 300 | return; |
| 301 | } |
Jose Pascoal | 91aff13 | 2014-10-02 17:19:47 +0100 | [diff] [blame] | 302 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 303 | // Create a new Fragment to be placed in the activity layout |
| 304 | Fragment firstFragment = getFragmentFromState(); |
| 305 | |
| 306 | // In case this activity was started with special instructions from |
| 307 | // an |
| 308 | // Intent, pass the Intent's extras to the fragment as arguments |
| 309 | firstFragment.setArguments(getIntent().getExtras()); |
| 310 | |
| 311 | // Add the fragment to the 'fragment_container' FrameLayout |
Jose Pascoal | 799e394 | 2014-11-04 21:12:26 +0000 | [diff] [blame^] | 312 | FragmentManager fragManager = getSupportFragmentManager(); |
| 313 | if (fragManager != null) |
| 314 | { |
| 315 | fragManager.beginTransaction().add(R.id.fragment_holder, firstFragment).commit(); |
| 316 | } |
| 317 | else |
| 318 | { |
| 319 | Log.e(TAG, "setupFragments - Couldn't get FragmentManager"); |
| 320 | } |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 321 | } |
| 322 | } |
| 323 | |
| 324 | public Fragment getFragmentFromState() |
| 325 | { |
| 326 | Fragment firstFragment; |
| 327 | switch (mCurrentState) |
| 328 | { |
| 329 | case PREINSTALL: |
| 330 | case DOWNLOAD: |
| 331 | firstFragment = new DownloadAndRestartFragment(); |
| 332 | break; |
| 333 | case NORMAL: |
| 334 | default: |
| 335 | firstFragment = new MainFragment(); |
| 336 | break; |
| 337 | } |
| 338 | return firstFragment; |
| 339 | } |
Jose Pascoal | b690af1 | 2014-10-06 18:29:26 +0100 | [diff] [blame] | 340 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 341 | public void changeFragment(Fragment newFragment) |
| 342 | { |
Jose Pascoal | 91aff13 | 2014-10-02 17:19:47 +0100 | [diff] [blame] | 343 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 344 | Fragment topFragment = getTopFragment(); |
| 345 | if (topFragment == null || (topFragment != null && !newFragment.getClass().equals(topFragment.getClass()))) |
| 346 | { |
Jose Pascoal | 799e394 | 2014-11-04 21:12:26 +0000 | [diff] [blame^] | 347 | FragmentManager fragManager = getSupportFragmentManager(); |
| 348 | if (fragManager != null) |
| 349 | { |
| 350 | FragmentTransaction transaction = fragManager.beginTransaction(); |
| 351 | // Replace whatever is in the fragment_container view with this |
| 352 | // fragment, |
| 353 | // and add the transaction to the back stack so the user can |
| 354 | // navigate |
| 355 | // back |
| 356 | // transaction.setCustomAnimations(R.animator.fade_in_fragment, |
| 357 | // R.animator.fade_out_fragment, R.animator.fade_in_fragment, |
| 358 | // R.animator.fade_out_fragment); |
| 359 | transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); |
| 360 | transaction.replace(R.id.fragment_holder, newFragment); |
| 361 | transaction.addToBackStack(null); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 362 | |
Jose Pascoal | 799e394 | 2014-11-04 21:12:26 +0000 | [diff] [blame^] | 363 | // Commit the transaction |
| 364 | transaction.commit(); |
| 365 | } |
| 366 | else |
| 367 | { |
| 368 | Log.e(TAG, "changeFragment - Couldn't get FragmentManager"); |
| 369 | } |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 370 | } |
| 371 | } |
Jose Pascoal | 436915f | 2014-10-08 15:37:26 +0100 | [diff] [blame] | 372 | |
Jose Pascoal | 3bc3a84 | 2014-10-16 19:03:21 +0100 | [diff] [blame] | 373 | public void removeLastFragment(boolean forceFinish) |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 374 | { |
Jose Pascoal | 799e394 | 2014-11-04 21:12:26 +0000 | [diff] [blame^] | 375 | FragmentManager fragManager = getSupportFragmentManager(); |
| 376 | if (fragManager != null) |
Jose Pascoal | 3bc3a84 | 2014-10-16 19:03:21 +0100 | [diff] [blame] | 377 | { |
Jose Pascoal | 799e394 | 2014-11-04 21:12:26 +0000 | [diff] [blame^] | 378 | boolean popSuccess = fragManager.popBackStackImmediate(); |
| 379 | if (forceFinish && !popSuccess) |
| 380 | { |
| 381 | finish(); |
| 382 | } |
| 383 | } |
| 384 | else |
| 385 | { |
| 386 | Log.e(TAG, "removeLastFragment - Couldn't get FragmentManager"); |
Jose Pascoal | 3bc3a84 | 2014-10-16 19:03:21 +0100 | [diff] [blame] | 387 | } |
| 388 | } |
| 389 | |
| 390 | public int getFragmentCount() |
| 391 | { |
Jose Pascoal | 3bc3a84 | 2014-10-16 19:03:21 +0100 | [diff] [blame] | 392 | int listSize = 0; |
Jose Pascoal | 799e394 | 2014-11-04 21:12:26 +0000 | [diff] [blame^] | 393 | FragmentManager fragManager = getSupportFragmentManager(); |
| 394 | if (fragManager != null) |
Jose Pascoal | 3bc3a84 | 2014-10-16 19:03:21 +0100 | [diff] [blame] | 395 | { |
Jose Pascoal | 799e394 | 2014-11-04 21:12:26 +0000 | [diff] [blame^] | 396 | List<Fragment> allFragments = fragManager.getFragments(); |
| 397 | if (allFragments != null) |
| 398 | { |
| 399 | listSize = allFragments.size(); |
| 400 | } |
| 401 | } |
| 402 | else |
| 403 | { |
| 404 | Log.e(TAG, "getFragmentCount - Couldn't get FragmentManager"); |
Jose Pascoal | 3bc3a84 | 2014-10-16 19:03:21 +0100 | [diff] [blame] | 405 | } |
| 406 | |
| 407 | Log.d(TAG, "Fragment list size: " + listSize); |
| 408 | return listSize; |
| 409 | } |
| 410 | |
| 411 | public int getBackStackSize() |
| 412 | { |
Jose Pascoal | 799e394 | 2014-11-04 21:12:26 +0000 | [diff] [blame^] | 413 | int backStackSize = 0; |
Jose Pascoal | 3bc3a84 | 2014-10-16 19:03:21 +0100 | [diff] [blame] | 414 | FragmentManager fragManager = getSupportFragmentManager(); |
Jose Pascoal | 799e394 | 2014-11-04 21:12:26 +0000 | [diff] [blame^] | 415 | if (fragManager != null) |
| 416 | { |
| 417 | backStackSize = fragManager.getBackStackEntryCount(); |
| 418 | } |
| 419 | else |
| 420 | { |
| 421 | Log.e(TAG, "getBackStackSize - Couldn't get FragmentManager"); |
| 422 | } |
| 423 | |
Jose Pascoal | 3bc3a84 | 2014-10-16 19:03:21 +0100 | [diff] [blame] | 424 | Log.d(TAG, "Back stack size: " + backStackSize); |
| 425 | return backStackSize; |
| 426 | } |
| 427 | |
| 428 | public void clearBackStack() |
| 429 | { |
| 430 | FragmentManager fragManager = getSupportFragmentManager(); |
Jose Pascoal | 799e394 | 2014-11-04 21:12:26 +0000 | [diff] [blame^] | 431 | if (fragManager != null) |
Jose Pascoal | 3bc3a84 | 2014-10-16 19:03:21 +0100 | [diff] [blame] | 432 | { |
Jose Pascoal | 799e394 | 2014-11-04 21:12:26 +0000 | [diff] [blame^] | 433 | int backStackSize = fragManager.getBackStackEntryCount(); |
| 434 | |
| 435 | for (int i = 0; i < backStackSize; i++) |
| 436 | { |
| 437 | removeLastFragment(false); |
| 438 | } |
| 439 | } |
| 440 | else |
| 441 | { |
| 442 | Log.e(TAG, "clearBackStack - Couldn't get FragmentManager"); |
Jose Pascoal | 3bc3a84 | 2014-10-16 19:03:21 +0100 | [diff] [blame] | 443 | } |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 444 | } |
Jose Pascoal | 54b3ae6 | 2014-10-07 20:29:58 +0100 | [diff] [blame] | 445 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 446 | public Fragment getTopFragment() |
| 447 | { |
Jose Pascoal | 54b3ae6 | 2014-10-07 20:29:58 +0100 | [diff] [blame] | 448 | |
Jose Pascoal | 799e394 | 2014-11-04 21:12:26 +0000 | [diff] [blame^] | 449 | Fragment topFragment = null; |
| 450 | FragmentManager fragManager = getSupportFragmentManager(); |
| 451 | if (fragManager != null) |
| 452 | { |
| 453 | List<Fragment> allFragments = fragManager.getFragments(); |
| 454 | if (allFragments != null) |
| 455 | { |
| 456 | topFragment = allFragments.get(allFragments.size() - 1); |
| 457 | } |
| 458 | } |
| 459 | else |
| 460 | { |
| 461 | Log.e(TAG, "getTopFragment - Couldn't get FragmentManager"); |
| 462 | } |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 463 | return topFragment; |
| 464 | } |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 465 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 466 | public void onEnableDevMode() |
| 467 | { |
| 468 | if (!DEV_MODE_ENABLED) |
| 469 | { |
| 470 | mIsDevModeCounter--; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 471 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 472 | Log.d(TAG, "Developer mode in " + mIsDevModeCounter + " Clicks..."); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 473 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 474 | if (mIsDevModeCounter <= 0) |
| 475 | { |
| 476 | DEV_MODE_ENABLED = true; |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 477 | |
Pedro Arelo | 773bd82 | 2014-10-10 11:57:34 +0100 | [diff] [blame] | 478 | Toast.makeText(getApplicationContext(), getResources().getString(R.string.dev_mode_message), Toast.LENGTH_LONG).show(); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 479 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 480 | Log.d(TAG, "Developer mode enabled for this session"); |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 481 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 482 | Utils.downloadConfigFile(this); |
| 483 | } |
| 484 | } |
| 485 | } |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 486 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 487 | public boolean isUpdateAvailable() |
| 488 | { |
| 489 | return mLatestVersion.isNewerVersionThan(mDeviceVersion); |
| 490 | } |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 491 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 492 | public String getVersionName(Version version) |
| 493 | { |
| 494 | String versionName = ""; |
| 495 | if (version != null) |
| 496 | { |
| 497 | versionName = version.getImageTypeDescription(getResources()) + " " + version.getName() + " " + version.getBuildNumber(); |
| 498 | } |
| 499 | return versionName; |
| 500 | } |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 501 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 502 | public String getDeviceVersionName() |
| 503 | { |
| 504 | return getVersionName(mDeviceVersion); |
| 505 | } |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 506 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 507 | public String getLatestVersionName() |
| 508 | { |
| 509 | return getVersionName(mLatestVersion); |
| 510 | } |
Jose Pascoal | 2666b89 | 2014-10-02 21:05:08 +0100 | [diff] [blame] | 511 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 512 | public String getSelectedVersionName() |
| 513 | { |
| 514 | return getVersionName(mSelectedVersion); |
| 515 | } |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 516 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 517 | public Version getDeviceVersion() |
| 518 | { |
| 519 | return mDeviceVersion; |
| 520 | } |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 521 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 522 | public Version getLatestVersion() |
| 523 | { |
| 524 | return mLatestVersion; |
| 525 | } |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 526 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 527 | public Version getSelectedVersion() |
| 528 | { |
| 529 | return mSelectedVersion; |
| 530 | } |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 531 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 532 | public HeaderType getHeaderTypeFromImageType(String imageType) |
| 533 | { |
| 534 | HeaderType type = HeaderType.MAIN_FAIRPHONE; |
| 535 | if (Version.IMAGE_TYPE_AOSP.equalsIgnoreCase(imageType)) |
| 536 | { |
| 537 | type = HeaderType.ANDROID; |
| 538 | } |
| 539 | else if (Version.IMAGE_TYPE_FAIRPHONE.equalsIgnoreCase(imageType)) |
| 540 | { |
| 541 | type = HeaderType.FAIRPHONE; |
| 542 | } |
| 543 | return type; |
| 544 | } |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 545 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 546 | public void setSelectedVersion(Version selectedVersion) |
| 547 | { |
| 548 | int versionNumber = selectedVersion != null ? selectedVersion.getNumber() : 0; |
| 549 | String versionImageType = selectedVersion != null ? selectedVersion.getImageType() : ""; |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 550 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 551 | Editor editor = mSharedPreferences.edit(); |
| 552 | editor.putInt(PREFERENCE_SELECTED_VERSION_NUMBER, versionNumber); |
| 553 | editor.putString(PREFERENCE_SELECTED_VERSION_TYPE, versionImageType); |
| 554 | editor.commit(); |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 555 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 556 | mSelectedVersion = UpdaterData.getInstance().getVersion(versionImageType, versionNumber); |
| 557 | } |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 558 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 559 | public void resetLastUpdateDownloadId() |
| 560 | { |
| 561 | mLatestUpdateDownloadId = 0; |
| 562 | savePreference(PREFERENCE_DOWNLOAD_ID, mLatestUpdateDownloadId); |
| 563 | setSelectedVersion(null); |
| 564 | } |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 565 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 566 | private Version getLatestVersionFromConfig() |
| 567 | { |
| 568 | Version latest = UpdaterData.getInstance().getLatestVersion(mDeviceVersion.getImageType()); |
| 569 | return latest; |
| 570 | } |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 571 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 572 | public void updateLatestVersionFromConfig() |
| 573 | { |
| 574 | mLatestVersion = getLatestVersionFromConfig(); |
| 575 | } |
Jose Pascoal | 54b3ae6 | 2014-10-07 20:29:58 +0100 | [diff] [blame] | 576 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 577 | @Override |
| 578 | protected void onResume() |
| 579 | { |
| 580 | super.onResume(); |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 581 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 582 | // check current state |
| 583 | mCurrentState = getCurrentUpdaterState(); |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 584 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 585 | if (mCurrentState == UpdaterState.NORMAL) |
| 586 | { |
| 587 | Utils.startUpdaterService(this, true); |
| 588 | } |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 589 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 590 | boolean isConfigLoaded = UpdaterService.readUpdaterData(this); |
| 591 | mDeviceVersion = VersionParserHelper.getDeviceVersion(this); |
| 592 | mLatestVersion = isConfigLoaded ? UpdaterData.getInstance().getLatestVersion(mDeviceVersion.getImageType()) : new Version(); |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 593 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 594 | getSelectedVersionFromSharedPreferences(); |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 595 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 596 | changeFragment(getFragmentFromState()); |
| 597 | } |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 598 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 599 | public void changeState(UpdaterState newState) |
| 600 | { |
| 601 | updateStatePreference(newState); |
| 602 | changeFragment(getFragmentFromState()); |
| 603 | } |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 604 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 605 | public void updateStatePreference(UpdaterState newState) |
| 606 | { |
| 607 | mCurrentState = newState; |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 608 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 609 | Editor editor = mSharedPreferences.edit(); |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 610 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 611 | editor.putString(PREFERENCE_CURRENT_UPDATER_STATE, mCurrentState.name()); |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 612 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 613 | editor.commit(); |
| 614 | } |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 615 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 616 | @Override |
| 617 | protected void onStop() |
| 618 | { |
| 619 | super.onStop(); |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 620 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 621 | } |
Jose Pascoal | e4c48e3 | 2014-10-03 19:55:39 +0100 | [diff] [blame] | 622 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 623 | public long getLatestDownloadId() |
| 624 | { |
| 625 | return mLatestUpdateDownloadId; |
| 626 | } |
Jose Pascoal | 54b3ae6 | 2014-10-07 20:29:58 +0100 | [diff] [blame] | 627 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 628 | public long getLatestUpdateDownloadIdFromSharedPreference() |
| 629 | { |
| 630 | if (mLatestUpdateDownloadId == 0) |
| 631 | { |
| 632 | mLatestUpdateDownloadId = getLongPreference(PREFERENCE_DOWNLOAD_ID); |
| 633 | } |
| 634 | return mLatestUpdateDownloadId; |
| 635 | } |
Jose Pascoal | 54b3ae6 | 2014-10-07 20:29:58 +0100 | [diff] [blame] | 636 | |
Pedro Arelo | 6d2bac9 | 2014-10-09 16:48:27 +0100 | [diff] [blame] | 637 | public void saveLatestUpdateDownloadId(long latestUpdateDownloadId) |
| 638 | { |
| 639 | mLatestUpdateDownloadId = latestUpdateDownloadId; |
| 640 | savePreference(PREFERENCE_DOWNLOAD_ID, mLatestUpdateDownloadId); |
| 641 | } |
Jose Pascoal | 91aff13 | 2014-10-02 17:19:47 +0100 | [diff] [blame] | 642 | } |