Skip to content

Commit

Permalink
Merge pull request #702 from Catrobat/hotfix-2.4.1
Browse files Browse the repository at this point in the history
Merge Hotfix 2.4.1 back into master
  • Loading branch information
mrmattmueller authored Jul 23, 2019
2 parents 27dd4c1 + 4558e82 commit 7e6960c
Show file tree
Hide file tree
Showing 9 changed files with 90 additions and 60 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@

import android.content.res.Resources;
import android.graphics.PointF;
import android.support.test.annotation.UiThreadTest;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.support.v7.app.AlertDialog;
import android.util.DisplayMetrics;

import org.catrobat.paintroid.MainActivity;
Expand All @@ -47,14 +49,16 @@ public class IndeterminateProgressDialogIntegrationTest {
@Rule
public ActivityTestRule<MainActivity> activityTestRule = new ActivityTestRule<>(MainActivity.class);

private IndeterminateProgressDialog dialog;
private AlertDialog dialog;

@UiThreadTest
@Before
public void setUp() {
dialog = IndeterminateProgressDialog.newInstance();
dialog.show(activityTestRule.getActivity().getSupportFragmentManager(), "testdialog");
dialog = IndeterminateProgressDialog.newInstance(activityTestRule.getActivity());
dialog.show();
}

@UiThreadTest
@After
public void tearDown() {
dialog.dismiss();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,52 +20,47 @@
package org.catrobat.paintroid.dialog;

import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatDialog;
import android.support.v7.app.AppCompatDialogFragment;
import android.support.v7.app.AlertDialog;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ProgressBar;

import org.catrobat.paintroid.R;

public class IndeterminateProgressDialog extends AppCompatDialogFragment {

public static IndeterminateProgressDialog newInstance() {
return new IndeterminateProgressDialog();
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setCancelable(false);
public final class IndeterminateProgressDialog {
private IndeterminateProgressDialog() {
}

@NonNull
@Override
@SuppressLint("InflateParams")
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater inflater = getActivity().getLayoutInflater();
public static AlertDialog newInstance(Context context) {
final LayoutInflater inflater = LayoutInflater.from(context);
View layout = inflater.inflate(R.layout.pocketpaint_layout_indeterminate, null);

// Remove this section once AppCompat supports tinting Progressbars
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
ProgressBar progressBar = layout.findViewById(R.id.pocketpaint_progress_bar);
if (progressBar != null) {
int accentColor = getAccentColor(context);
Drawable drawable = progressBar.getIndeterminateDrawable();
int toolTextColor = ContextCompat.getColor(getContext(), R.color.pocketpaint_colorAccent);
drawable.setColorFilter(toolTextColor, PorterDuff.Mode.SRC_IN);
drawable.setColorFilter(accentColor, PorterDuff.Mode.SRC_IN);
}
}
Dialog dialog = new AppCompatDialog(getContext(), R.style.PocketPaintProgressDialog);
dialog.setContentView(layout);
return dialog;

AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.PocketPaintProgressDialog);
builder.setCancelable(false);
builder.setView(R.layout.pocketpaint_layout_indeterminate);
return builder.create();
}

private static int getAccentColor(Context context) {
final TypedValue value = new TypedValue();
Resources.Theme theme = context.getTheme();
theme.resolveAttribute(R.attr.colorAccent, value, true);
return value.data;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -451,8 +451,8 @@ public void finishInitialize() {

view.initializeActionBar(model.isOpenedFromCatroid());

if (!commandManager.isBusy()) {
navigator.dismissIndeterminateProgressDialog();
if (commandManager.isBusy()) {
navigator.showIndeterminateProgressDialog();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@ private void drawRotationArrows(Canvas canvas, float boxWidth, float boxHeight)
protected void drawBitmap(Canvas canvas, float boxWidth, float boxHeight) {
tempDrawingRectangle.set(-boxWidth / 2, -boxHeight / 2,
boxWidth / 2, boxHeight / 2);
canvas.clipRect(tempDrawingRectangle, Op.UNION);
canvas.clipRect(tempDrawingRectangle);
canvas.drawBitmap(drawingBitmap, null, tempDrawingRectangle, null);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,10 @@ private synchronized void doDraw(Canvas surfaceViewCanvas) {
surfaceViewCanvas.drawBitmap(iterator.previous().getBitmap(), 0, 0, null);
}

toolReference.get().draw(surfaceViewCanvas);
Tool tool = toolReference.get();
if (tool != null) {
tool.draw(surfaceViewCanvas);
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,11 @@
import android.net.Uri;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatDialog;
import android.support.v7.app.AppCompatDialogFragment;
import android.view.Gravity;
import android.widget.Toast;
Expand Down Expand Up @@ -54,6 +56,7 @@
public class MainActivityNavigator implements MainActivityContracts.Navigator {
private MainActivity mainActivity;
private final ToolReference toolReference;
private AppCompatDialog progressDialog;

public MainActivityNavigator(MainActivity mainActivity, ToolReference toolReference) {
this.mainActivity = mainActivity;
Expand All @@ -67,7 +70,14 @@ public void showColorPickerDialog() {
if (fragment == null) {
ColorPickerDialog dialog = ColorPickerDialog.newInstance(toolReference.get().getDrawPaint().getColor());
setupColorPickerDialogListeners(dialog);
dialog.show(fragmentManager, Constants.COLOR_PICKER_DIALOG_TAG);
showDialogFragmentSafely(dialog, Constants.COLOR_PICKER_DIALOG_TAG);
}
}

private void showDialogFragmentSafely(DialogFragment dialog, String tag) {
FragmentManager fragmentManager = mainActivity.getSupportFragmentManager();
if (!fragmentManager.isStateSaved()) {
dialog.show(fragmentManager, tag);
}
}

Expand Down Expand Up @@ -110,27 +120,20 @@ public void showAboutDialog() {
about.show(mainActivity.getSupportFragmentManager(), Constants.ABOUT_DIALOG_FRAGMENT_TAG);
}

private Fragment getIndeterminateProgressFragment() {
FragmentManager supportFragmentManager = mainActivity.getSupportFragmentManager();
return supportFragmentManager.findFragmentByTag(Constants.INDETERMINATE_FRAGMENT_TAG);
}

@Override
public void showIndeterminateProgressDialog() {
Fragment fragment = getIndeterminateProgressFragment();
if (fragment == null) {
AppCompatDialogFragment dialog = IndeterminateProgressDialog.newInstance();
dialog.show(mainActivity.getSupportFragmentManager(), Constants.INDETERMINATE_FRAGMENT_TAG);
if (progressDialog == null) {
progressDialog = IndeterminateProgressDialog.newInstance(mainActivity);
}
progressDialog.show();
}

@Override
public void dismissIndeterminateProgressDialog() {
Fragment fragment = getIndeterminateProgressFragment();
if (fragment != null) {
AppCompatDialogFragment dialog = (AppCompatDialogFragment) fragment;
dialog.dismissAllowingStateLoss();
if (progressDialog != null) {
progressDialog.dismiss();
}
progressDialog = null;
}

@Override
Expand All @@ -150,20 +153,20 @@ public void showToast(int resId, int duration) {
public void showSaveErrorDialog() {
AppCompatDialogFragment dialog = InfoDialog.newInstance(InfoDialog.DialogType.WARNING,
R.string.dialog_error_sdcard_text, R.string.dialog_error_save_title);
dialog.show(mainActivity.getSupportFragmentManager(), Constants.SAVE_DIALOG_FRAGMENT_TAG);
showDialogFragmentSafely(dialog, Constants.SAVE_DIALOG_FRAGMENT_TAG);
}

@Override
public void showLoadErrorDialog() {
AppCompatDialogFragment dialog = InfoDialog.newInstance(InfoDialog.DialogType.WARNING,
R.string.dialog_loading_image_failed_title, R.string.dialog_loading_image_failed_text);
dialog.show(mainActivity.getSupportFragmentManager(), Constants.LOAD_DIALOG_FRAGMENT_TAG);
showDialogFragmentSafely(dialog, Constants.LOAD_DIALOG_FRAGMENT_TAG);
}

@Override
public void showRequestPermissionRationaleDialog(PermissionInfoDialog.PermissionType permissionType, String[] permissions, int requestCode) {
AppCompatDialogFragment dialog = PermissionInfoDialog.newInstance(permissionType, permissions, requestCode);
dialog.show(mainActivity.getSupportFragmentManager(), Constants.PERMISSION_DIALOG_FRAGMENT_TAG);
showDialogFragmentSafely(dialog, Constants.PERMISSION_DIALOG_FRAGMENT_TAG);
}

@Override
Expand Down Expand Up @@ -191,26 +194,26 @@ public void finishActivity() {
public void showSaveBeforeReturnToCatroidDialog() {
AppCompatDialogFragment dialog = SaveBeforeFinishDialog.newInstance(
SaveBeforeFinishDialogType.BACK_TO_POCKET_CODE);
dialog.show(mainActivity.getSupportFragmentManager(), Constants.SAVE_QUESTION_FRAGMENT_TAG);
showDialogFragmentSafely(dialog, Constants.SAVE_QUESTION_FRAGMENT_TAG);
}

@Override
public void showSaveBeforeFinishDialog() {
AppCompatDialogFragment dialog = SaveBeforeFinishDialog.newInstance(
SaveBeforeFinishDialogType.FINISH);
dialog.show(mainActivity.getSupportFragmentManager(), Constants.SAVE_QUESTION_FRAGMENT_TAG);
showDialogFragmentSafely(dialog, Constants.SAVE_QUESTION_FRAGMENT_TAG);
}

@Override
public void showSaveBeforeNewImageDialog() {
AppCompatDialogFragment dialog = SaveBeforeNewImageDialog.newInstance();
dialog.show(mainActivity.getSupportFragmentManager(), Constants.SAVE_QUESTION_FRAGMENT_TAG);
showDialogFragmentSafely(dialog, Constants.SAVE_QUESTION_FRAGMENT_TAG);
}

@Override
public void showSaveBeforeLoadImageDialog() {
AppCompatDialogFragment dialog = SaveBeforeLoadImageDialog.newInstance();
dialog.show(mainActivity.getSupportFragmentManager(), Constants.SAVE_QUESTION_FRAGMENT_TAG);
showDialogFragmentSafely(dialog, Constants.SAVE_QUESTION_FRAGMENT_TAG);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -714,7 +714,7 @@ public void testRestoreStateThenResetTool() {
}

@Test
public void testFinishInitializeThensetUndoRedoButtons() {
public void testFinishInitializeThenSetUndoRedoButtons() {
when(toolReference.get()).thenReturn(tool);
when(tool.getDrawPaint()).thenReturn(mock(Paint.class));

Expand All @@ -725,7 +725,7 @@ public void testFinishInitializeThensetUndoRedoButtons() {
}

@Test
public void testFinishInitializeWhenUndoAvailableThensetUndoRedoButtons() {
public void testFinishInitializeWhenUndoAvailableThenSetUndoRedoButtons() {
when(toolReference.get()).thenReturn(tool);
when(tool.getDrawPaint()).thenReturn(mock(Paint.class));
when(commandManager.isUndoAvailable()).thenReturn(true);
Expand All @@ -737,7 +737,7 @@ public void testFinishInitializeWhenUndoAvailableThensetUndoRedoButtons() {
}

@Test
public void testFinishInitializeWhenRedoAvailableThensetUndoRedoButtons() {
public void testFinishInitializeWhenRedoAvailableThenSetUndoRedoButtons() {
when(toolReference.get()).thenReturn(tool);
when(tool.getDrawPaint()).thenReturn(mock(Paint.class));
when(commandManager.isRedoAvailable()).thenReturn(true);
Expand Down Expand Up @@ -837,6 +837,27 @@ public void testFinishInitializeWhenFromCatroidThenRemoveSaveNavigationItems() {
verify(navigationDrawerViewHolder).removeItem(R.id.pocketpaint_nav_save_duplicate);
}

@Test
public void testFinishInitializeWhenCommandManagerBusyRestoreProgressDialog() {
when(toolReference.get()).thenReturn(tool);
when(tool.getDrawPaint()).thenReturn(mock(Paint.class));
when(commandManager.isBusy()).thenReturn(true);

presenter.finishInitialize();

verify(navigator).showIndeterminateProgressDialog();
}

@Test
public void testFinishInitializeWhenCommandManagerIdleThenDoNothing() {
when(toolReference.get()).thenReturn(tool);
when(tool.getDrawPaint()).thenReturn(mock(Paint.class));

presenter.finishInitialize();

verify(navigator, never()).showIndeterminateProgressDialog();
}

@Test
public void testToolClickedThenCancelAnimation() {
when(toolReference.get()).thenReturn(tool);
Expand Down
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ ext {

androidSupportLibraryVersion = '26.1.0'

androidVersionCode = 29
androidVersionName = '2.4.0'
androidVersionCode = 30
androidVersionName = '2.4.1'
}

allprojects {
Expand Down
4 changes: 4 additions & 0 deletions docker/Dockerfile.jenkins
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,13 @@ ARG _SDKMANAGER=$ANDROID_SDK_ROOT/tools/bin/sdkmanager
#

# curl/openssh-client: upload to web/share
# x11-commons/x11-utils/libpulse0 needed to start emulator
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
openssh-client \
x11-common \
x11-utils \
libpulse0 \
&& rm -rf /var/lib/apt/lists/*

# Install Fastlane
Expand Down

0 comments on commit 7e6960c

Please sign in to comment.