Skip to content

Commit

Permalink
Merge pull request #1354 from microsoft/feature/set-update-track-test…
Browse files Browse the repository at this point in the history
…-app

Add UI to switch between Public and Private update track
  • Loading branch information
guperrot committed Jan 30, 2020
2 parents 0539271 + 3c35a24 commit 65a1d90
Show file tree
Hide file tree
Showing 5 changed files with 198 additions and 5 deletions.
Expand Up @@ -50,6 +50,7 @@
import com.microsoft.appcenter.sasquatch.util.AttachmentsUtil;
import com.microsoft.appcenter.utils.async.AppCenterConsumer;

import java.lang.reflect.Method;
import java.util.UUID;

import static com.microsoft.appcenter.sasquatch.activities.ActivityConstants.ANALYTICS_TRANSMISSION_INTERVAL_KEY;
Expand Down Expand Up @@ -112,8 +113,27 @@ static String getLogUrl(Context context, String startType) {
}

static void startAppCenter(Application application, String startTypeString) {
if (MainActivity.sSharedPreferences.contains(ANALYTICS_TRANSMISSION_INTERVAL_KEY)) {
int latency = MainActivity.sSharedPreferences.getInt(ANALYTICS_TRANSMISSION_INTERVAL_KEY, DEFAULT_TRANSMISSION_INTERVAL_IN_SECONDS);
if (sSharedPreferences.getBoolean(application.getString(R.string.appcenter_distribute_update_track_before_start_key), false)) {

/*
* TODO Replace the next line with:
* 'int savedTrack = sSharedPreferences.getInt(application.getString(R.string.appcenter_distribute_update_track_before_start_value), UpdateTrack.PUBLIC);'
* when updating the demo during release process.
*/
int savedTrack = sSharedPreferences.getInt(application.getString(R.string.appcenter_distribute_update_track_before_start_chosen_track), 1);

/* TODO replace the next line with 'Distribute.setUpdateTrack(savedTrack);'
* when updating the demo during release process.
*/
try {
Method setUpdateTrackMethod = Distribute.class.getMethod("setUpdateTrack", int.class);
setUpdateTrackMethod.invoke(null, savedTrack);
} catch (Exception e) {
Toast.makeText(application, "No Update Track API in this build", Toast.LENGTH_SHORT).show();
}
}
if (sSharedPreferences.contains(ANALYTICS_TRANSMISSION_INTERVAL_KEY)) {
int latency = sSharedPreferences.getInt(ANALYTICS_TRANSMISSION_INTERVAL_KEY, DEFAULT_TRANSMISSION_INTERVAL_IN_SECONDS);
try {
boolean result = Analytics.setTransmissionInterval(latency);
if (result) {
Expand Down
Expand Up @@ -19,6 +19,7 @@
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.support.v7.app.AppCompatActivity;
import android.text.InputType;
import android.text.TextUtils;
Expand Down Expand Up @@ -311,6 +312,115 @@ public void setEnabled(boolean enabled) {
Distribute.setEnabledForDebuggableBuild(enabled);
}
});
final HasSummary updateTrackBeforeStartHasSummary = new HasSummary() {

@Override
public String getSummary() {
boolean updateTrackBeforeStart = MainActivity.sSharedPreferences.getBoolean(getString(R.string.appcenter_distribute_update_track_before_start_key), false);
return getString(updateTrackBeforeStart ? R.string.appcenter_distribute_update_track_before_start_enabled : R.string.appcenter_distribute_update_track_before_start_disabled);
}
};
initChangeableSetting(R.string.appcenter_distribute_update_track_before_start_key, updateTrackBeforeStartHasSummary.getSummary(), new Preference.OnPreferenceChangeListener() {

@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue == null) {
return false;
}
String[] whenToUpdateTrackEntries = getResources().getStringArray(R.array.appcenter_distribute_when_to_update_track_entries);
boolean updateTrackBeforeStartNewValue = newValue.toString().equals(whenToUpdateTrackEntries[1]);
MainActivity.sSharedPreferences.edit().putBoolean(getString(R.string.appcenter_distribute_update_track_before_start_key), updateTrackBeforeStartNewValue).apply();

/*
* TODO when updating the demo during release process:
* 1) Replace the next line with 'int currentTrack = Distribute.getUpdateTrack();'
* 2) remove try/catch block
*/
int currentTrack = 1;
try {
Method getUpdateTrackMethod = Distribute.class.getMethod("getUpdateTrack");
currentTrack = (int) getUpdateTrackMethod.invoke(null);
} catch (Exception e) {
Toast.makeText(getActivity(), "No Update Track API in this build", Toast.LENGTH_SHORT).show();
}
MainActivity.sSharedPreferences.edit().putInt(getString(R.string.appcenter_distribute_update_track_before_start_chosen_track), currentTrack).apply();
preference.setSummary(updateTrackBeforeStartHasSummary.getSummary());
return true;
}
});
final HasSummary updateTrackHasSummary = new HasSummary() {

@Override
public String getSummary() {
UpdateTrackEnum updateTrackEnum = null;
if (MainActivity.sSharedPreferences.getBoolean(getString(R.string.appcenter_distribute_update_track_before_start_key), false)) {

/*
* TODO Replace the next line with:
* 'return MainActivity.sSharedPreferences.getInt(getString(R.string.appcenter_distribute_update_track_before_start_value), UpdateTrack.PUBLIC);'
*/
updateTrackEnum = UpdateTrackEnum.init(MainActivity.sSharedPreferences.getInt(getString(R.string.appcenter_distribute_update_track_before_start_chosen_track), 1));
} else {

/*
* TODO: Replace the whole block with
* 'updateTrack = Distribute.getUpdateTrack();'
* when updating the demo during release process.
*/
try {
Method getUpdateTrackMethod = Distribute.class.getMethod("getUpdateTrack");
int updateTrack = (int) getUpdateTrackMethod.invoke(null);
updateTrackEnum = UpdateTrackEnum.init(updateTrack);
} catch (Exception e) {
Toast.makeText(getActivity(), "No Update Track API in this build", Toast.LENGTH_SHORT).show();
}
}
return updateTrackEnum != null ? getString(updateTrackEnum.summaryRes) : "Couldn't parse update track";
}
};
initChangeableSetting(R.string.appcenter_distribute_track_state_key, updateTrackHasSummary.getSummary(), new Preference.OnPreferenceChangeListener() {

@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue == null) {
return false;
}
String[] updateTrackEntries = getResources().getStringArray(R.array.appcenter_distribute_update_track_entries);

/*
* TODO Replace the next line with:
* 'int updateTrackNewValue = newValue.toString().equals(updateTrackEntries[0]) ? UpdateTrack.PUBLIC : UpdateTrack.PRIVATE;'
* when updating the demo during release process.
*/
int updateTrackNewValue = newValue.toString().equals(updateTrackEntries[0]) ? 1 : 2;

if (MainActivity.sSharedPreferences.getBoolean(getString(R.string.appcenter_distribute_update_track_before_start_key), false)) {

/*
* TODO Replace the next line with:
* 'MainActivity.sSharedPreferences.edit().putInt(getString(R.string.appcenter_distribute_update_track_before_start_value), updateTrackNewValue).apply();'
* when updating the demo during release process.
*/
MainActivity.sSharedPreferences.edit().putInt(getString(R.string.appcenter_distribute_update_track_before_start_chosen_track), updateTrackNewValue).apply();
preference.setSummary(updateTrackHasSummary.getSummary());
return true;
}

/*
* TODO: Replace the try/catch block with
* Distribute.setUpdateTrack(updateTrackNewValue);
* when updating the demo during release process.
*/
try {
Method setUpdateTrackMethod = Distribute.class.getMethod("setUpdateTrack", int.class);
setUpdateTrackMethod.invoke(null, updateTrackNewValue);
} catch (Exception e) {
Toast.makeText(getActivity(), "No Update Track API in this build", Toast.LENGTH_SHORT).show();
}
preference.setSummary(updateTrackHasSummary.getSummary());
return true;
}
});

/* Push. */
initCheckBoxSetting(R.string.appcenter_push_state_key, R.string.appcenter_push_state_summary_enabled, R.string.appcenter_push_state_summary_disabled, new HasEnabled() {
Expand Down Expand Up @@ -409,7 +519,7 @@ public void setEnabled(boolean enabled) {
}

@Override
@SuppressWarnings("unchecked")
@SuppressWarnings({"unchecked", "ConstantConditions"})
public boolean isEnabled() {
try {
return sRumStarted && ((AppCenterFuture<Boolean>) isEnabled.invoke(null)).get();
Expand Down Expand Up @@ -922,11 +1032,44 @@ private interface HasEnabled {
void setEnabled(boolean enabled);
}

private enum UpdateTrackEnum {
/*
* TODO: Replace the next line with
* 'PUBLIC(UpdateTrack.PUBLIC, R.string.appcenter_distribute_track_public_enabled), PRIVATE(UpdateTrack.PRIVATE, R.string.appcenter_distribute_track_private_enabled);'
* when updating the demo during release process.
*/
PUBLIC(1, R.string.appcenter_distribute_track_public_enabled), PRIVATE(2, R.string.appcenter_distribute_track_private_enabled);

public final int value;

@StringRes
public final int summaryRes;

UpdateTrackEnum(int value, @StringRes int summaryRes) {
this.value = value;
this.summaryRes = summaryRes;
}

static UpdateTrackEnum init(int value) {
for (UpdateTrackEnum updateTrackEnum : UpdateTrackEnum.values()) {
if (updateTrackEnum.value == value) {
return updateTrackEnum;
}
}
return PUBLIC;
}
}

private interface EditTextListener {

void onSave(String value);

void onReset();
}

private interface HasSummary {

String getSummary();
}
}
}
10 changes: 9 additions & 1 deletion apps/sasquatch/src/main/res/values/array.xml
Expand Up @@ -17,4 +17,12 @@
<item>AAD</item>
<item>Custom</item>
</string-array>
</resources>
<string-array name="appcenter_distribute_when_to_update_track_entries" tools:ignore="MissingTranslation">
<item>Now</item>
<item>Before next start</item>
</string-array>
<string-array name="appcenter_distribute_update_track_entries" tools:ignore="MissingTranslation">
<item>Public</item>
<item>Private</item>
</string-array>
</resources>
14 changes: 13 additions & 1 deletion apps/sasquatch/src/main/res/values/settings.xml
Expand Up @@ -63,11 +63,23 @@
<string name="appcenter_distribute_state_title" tools:ignore="MissingTranslation">Distribute state</string>
<string name="appcenter_distribute_state_summary_enabled" tools:ignore="MissingTranslation">Distribute is enabled</string>
<string name="appcenter_distribute_state_summary_disabled" tools:ignore="MissingTranslation">Distribute is disabled</string>

<string name="appcenter_distribute_debug_state_key" tools:ignore="MissingTranslation">appcenter_distribute_debug_state_key</string>
<string name="appcenter_distribute_debug_state_title" tools:ignore="MissingTranslation">Distribute in debug state</string>
<string name="appcenter_distribute_debug_summary_enabled" tools:ignore="MissingTranslation">Distribute in debug is enabled</string>
<string name="appcenter_distribute_debug_summary_disabled" tools:ignore="MissingTranslation">Distribute in debug is disabled</string>

<string name="appcenter_distribute_track_state_key" tools:ignore="MissingTranslation">appcenter_distribute_track_state_key</string>
<string name="appcenter_distribute_track_state_title" tools:ignore="MissingTranslation">Update track</string>
<string name="appcenter_distribute_track_public_enabled" tools:ignore="MissingTranslation">Distribute uses public track</string>
<string name="appcenter_distribute_track_private_enabled" tools:ignore="MissingTranslation">Distribute uses private track</string>

<string name="appcenter_distribute_update_track_before_start_key" tools:ignore="MissingTranslation">appcenter_distribute_update_track_before_start_key</string>
<string name="appcenter_distribute_update_track_before_start_chosen_track" tools:ignore="MissingTranslation">appcenter_distribute_update_track_before_start_chosen_track</string>
<string name="appcenter_distribute_update_track_before_start_title" tools:ignore="MissingTranslation">When to update track</string>
<string name="appcenter_distribute_update_track_before_start_enabled" tools:ignore="MissingTranslation">Will update track before next start</string>
<string name="appcenter_distribute_update_track_before_start_disabled" tools:ignore="MissingTranslation">Update track now</string>

<string name="push_key" tools:ignore="MissingTranslation">appcenter_push</string>
<string name="push_title" tools:ignore="MissingTranslation">Push</string>

Expand Down Expand Up @@ -159,4 +171,4 @@
<string name="save" tools:ignore="MissingTranslation">Save</string>
<string name="reset" tools:ignore="MissingTranslation">Reset</string>
<string name="cancel" tools:ignore="MissingTranslation">Cancel</string>
</resources>
</resources>
10 changes: 10 additions & 0 deletions apps/sasquatch/src/main/res/xml/settings.xml
Expand Up @@ -63,6 +63,16 @@
<CheckBoxPreference
android:key="@string/appcenter_distribute_debug_state_key"
android:title="@string/appcenter_distribute_debug_state_title" />
<ListPreference
android:key="@string/appcenter_distribute_update_track_before_start_key"
android:entries="@array/appcenter_distribute_when_to_update_track_entries"
android:entryValues="@array/appcenter_distribute_when_to_update_track_entries"
android:title="@string/appcenter_distribute_update_track_before_start_title" />
<ListPreference
android:key="@string/appcenter_distribute_track_state_key"
android:entries="@array/appcenter_distribute_update_track_entries"
android:entryValues="@array/appcenter_distribute_update_track_entries"
android:title="@string/appcenter_distribute_track_state_title" />
</PreferenceCategory>

<PreferenceCategory
Expand Down

0 comments on commit 65a1d90

Please sign in to comment.