1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
package se.leap.bitmaskclient;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.IntDef;
import android.support.annotation.Nullable;
import android.util.Log;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import de.blinkt.openvpn.core.VpnStatus;
import se.leap.bitmaskclient.userstatus.User;
/**
* Activity shown at startup. Evaluates if App is started for the first time or has been upgraded
* and acts and calls another activity accordingly.
*
*/
public class StartActivity extends Activity {
public static final String TAG = Dashboard.class.getSimpleName();
@Retention(RetentionPolicy.SOURCE)
@IntDef({FIRST, NORMAL, UPGRADE, DOWNGRADE})
private @interface StartupMode {}
private static final int FIRST = 0;
private static final int NORMAL = 1;
private static final int UPGRADE = 2;
private static final int DOWNGRADE = 3;
/**
* check if normal start, first run, up or downgrade
* @return @StartupMode
*/
@StartupMode
private int checkAppStart() {
SharedPreferences preferences = getSharedPreferences(Constants.SHARED_PREFERENCES, MODE_PRIVATE);
try {
int versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
int lastDetectedVersion = preferences.getInt(Constants.PREFERENCES_APP_VERSION, -1);
// versions do match -> normal start
if (versionCode == lastDetectedVersion) {
Log.d(TAG, "App start was: NORMAL START");
return NORMAL;
}
// something changed -> save current version
preferences.edit().putInt(Constants.PREFERENCES_APP_VERSION, versionCode).apply();
// no previous app version -> first start
if (lastDetectedVersion == -1 ) {
Log.d(TAG, "App start was: FIRST START");
return FIRST;
}
// version has increased -> upgrade
if (versionCode > lastDetectedVersion) {
Log.d(TAG, "App start was: UPGRADE");
return UPGRADE;
}
// version has decreased -> downgrade
if (versionCode < lastDetectedVersion) {
Log.d(TAG, "App start was: DOWNGRADE");
return DOWNGRADE;
}
} catch (PackageManager.NameNotFoundException e) {
Log.d(TAG, "Splash screen didn't find any " + getPackageName() + " package");
}
return NORMAL;
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent;
Log.d(TAG, "Started");
switch (checkAppStart()) {
case NORMAL:
break;
case FIRST:
// TODO start ProfileCreation & replace below code
intent = new Intent(this, Dashboard.class);
startActivity(intent);
break;
case UPGRADE:
// TODO appropriate data copying
// TODO show donation dialog
break;
case DOWNGRADE:
// TODO think how and why this should happen and what todo
break;
}
// initialize app necessities
ProviderAPICommand.initialize(this);
VpnStatus.initLogCache(getApplicationContext().getCacheDir());
User.init(getString(R.string.default_username));
// go to Dashboard
intent = new Intent(this, Dashboard.class);
startActivity(intent);
}
}
|